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

3 visualizaciones (últimos 30 días)
Mr. 206
Mr. 206 el 24 de Oct. de 2018
Comentada: Rik el 24 de Oct. de 2018
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 comentarios
Rik
Rik el 24 de Oct. de 2018
Editada: Rik el 24 de Oct. de 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 el 24 de Oct. de 2018
Editada: Torsten el 24 de Oct. de 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.

Iniciar sesión para comentar.

Respuestas (1)

Matt J
Matt J el 24 de Oct. de 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 comentarios
Rik
Rik el 24 de Oct. de 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 el 24 de Oct. de 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

Iniciar sesión para comentar.

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by