How to find the value of 'x' which will minimize an enclaved function?

조회 수: 1 (최근 30일)
Mr. 206
Mr. 206 2018년 10월 24일
댓글: Rik 2018년 10월 24일
I am trying to use the function
[x,fval]=fminsearch(fun,x_0)
However the problem appears that i don't have any direct function (Direct means y= f(x), here you are seeing both y and x, in my case x is coming from a huge pile of programing) 'fun' in this case. My function is a combination of several steps. Here is my code that is generating the function ...
Rescaled_f = f/max(f);
Rescaled_g = g/max(f);
Model_number = (size(READ,2)/2)-1;
D = min(max(x_0_f),max(x_0_g)) - max(min(x_0_f),min(x_0_g));
Difference_Rescaled_fg = (Rescaled_f.-Rescaled_g);
fun = norm(Difference_Rescaled_fg)/(abs(D)*Model_number) %Here is my my function
As we are seeing there is no direct 'x' in my function then how can i minimize this function? Is it going to work like this....
x_0= 0.001 % Starting point
[x,fval]=fminsearch(@(x) fun,x_0)
  댓글 수: 4
Rik
Rik 2018년 10월 24일
편집: Rik 2018년 10월 24일
If it possible to have the function header below, that would work as well.
function fval=fun(x)
If that is not possible your function doesn't depend on x, so you can't use fminsearch.
Torsten
Torsten 2018년 10월 24일
편집: Torsten 2018년 10월 24일
in my case x is coming from a huge pile of programing
If you try to minimize a function using fminsearch, e.g., x is not an output from a huge pile of programming, but the input to this programming producing a value that MATLAB tries to minimize.

댓글을 달려면 로그인하십시오.

답변 (1개)

Matt J
Matt J 2018년 10월 24일
There is no requirement in fminsearch that your function f(x) be expressed in a single one-line equation. fminsearch cares only that an input variable x goes into your function and that an output y=f(x) comes out.
  댓글 수: 8
Rik
Rik 2018년 10월 24일
The inputs are allowed to be vectors, so you can solve that issue like this:
wrapper=@(x_vector) fun(x_vector(1),x_vector(2));
function output=fun(xf,xg)
Also, you should keep your syntax Matlab-compatible on this forum, as Octave is more or less a competitor. So avoid endfunction and endif.
Rik
Rik 2018년 10월 24일
In the code you posted, xf will be overwritten:
xf=READ(:,1);
That line also suggests READ is a variable, not a function. That means your function is not self-contained.
The function you have as an input should run without error, at the very least for you x_0:
output=fun(x_0);
%x_0 can be a vector, output should be scalar

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by