How to minimize a function without using a loop
Ältere Kommentare anzeigen
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.
Antworten (1)
Guillaume
am 26 Jul. 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 Kommentare
Darlington Mensah
am 26 Jul. 2016
Bearbeitet: Darlington Mensah
am 26 Jul. 2016
Guillaume
am 26 Jul. 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
am 26 Jul. 2016
Bearbeitet: Darlington Mensah
am 26 Jul. 2016
Guillaume
am 26 Jul. 2016
So, for a given R and alpha, you've 11 different theoritical (theoretical?) values. What is it you want to minimise?
Darlington Mensah
am 26 Jul. 2016
Bearbeitet: Darlington Mensah
am 26 Jul. 2016
Kategorien
Mehr zu Graph and Network Algorithms finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!