How to minimize a function without using a loop
Mostrar comentarios más antiguos
I have an equation with 3 constant (Nug & Sill, Lag) and 2 variable (R[ranges from 1 to 4000], alpha[ranges from 1 to 2, step of 0.1]). I need to find the value R and alpha that minimizes the function. Is there any Matlab function or any way i can do it without having to do a doublé for loop.
%q = 4000
for i=1:q
Theoritical(i,1) = Nug+Sill*(1-exp(-(Lag(i,1)/R)^alpha));
end
Thank you. Darl.
Respuestas (1)
Guillaume
el 26 de Jul. de 2016
It doesn't look like your Lag is much of a constant if there's 4000 values for it. Does Lag changes with R (since there's also 4000 R values)?
You can use fminsearch or fminbnd but if there's only 4000 values for R and 11 for alpha, you could simply calculate the result for all of them at once and get the minimum :
[R, alpha] = ndgrid(1:4000, 1:0.1:2); %get all combinations of R and alpha
result = Nug + Sill * (1 - exp(-bsxfun(@rdivide, Lag, R) .^ alpha)); %assumes Lag is a column vector with 4000 elements
[minvalue, location] = min(result(:));
minR = R(location)
minalpha = alpha(location)
5 comentarios
Darlington Mensah
el 26 de Jul. de 2016
Editada: Darlington Mensah
el 26 de Jul. de 2016
Guillaume
el 26 de Jul. de 2016
Oh! I'm not sure why you accepted the answer then as it's not going to work.
What is your equation then? In your question you're indexing Lag with i, i goes from 1 to q and q is said to be 4000. That's in direct contradiction with your statement above.
How do these 11 different values figure in the equation?
Darlington Mensah
el 26 de Jul. de 2016
Editada: Darlington Mensah
el 26 de Jul. de 2016
Guillaume
el 26 de Jul. de 2016
So, for a given R and alpha, you've 11 different theoritical (theoretical?) values. What is it you want to minimise?
Darlington Mensah
el 26 de Jul. de 2016
Editada: Darlington Mensah
el 26 de Jul. de 2016
Categorías
Más información sobre Graph and Network Algorithms en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!