How to find the value of 'x' which will minimize an enclaved function?
1 view (last 30 days)
Show older comments
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)
Answers (1)
Matt J
on 24 Oct 2018
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 Comments
Rik
on 24 Oct 2018
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
on 24 Oct 2018
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
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!