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

1 view (last 30 days)
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 Comments
Rik
Rik on 24 Oct 2018
Edited: Rik on 24 Oct 2018
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 on 24 Oct 2018
Edited: Torsten on 24 Oct 2018
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.

Sign in to comment.

Answers (1)

Matt J
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
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
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

Sign in to comment.

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!