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

3 vues (au cours des 30 derniers jours)
Mr. 206
Mr. 206 le 24 Oct 2018
Commenté : Rik le 24 Oct 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 commentaires
Rik
Rik le 24 Oct 2018
Modifié(e) : Rik le 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 le 24 Oct 2018
Modifié(e) : Torsten le 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.

Connectez-vous pour commenter.

Réponses (1)

Matt J
Matt J le 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 commentaires
Rik
Rik le 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 le 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

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by