How to minimize a function without using a loop

2 visualizaciones (últimos 30 días)
Darlington Mensah
Darlington Mensah el 26 de Jul. de 2016
Editada: Darlington Mensah el 26 de Jul. de 2016
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
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
Guillaume
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
Darlington Mensah el 26 de Jul. de 2016
Editada: Darlington Mensah el 26 de Jul. de 2016
I have a function (ExpSemivariance) that creates a vector of 11 elements. This elements are then represented on a graph in a scattered diagram and I intend finding the curve (Theoretical) that best fit 'ExpSemivariance' by using mimimum residual
Step = 10;
q = 11;
for i=1:q
Theoretical(i,1) = Nug+Sill*(1-exp(-(Lag(i,1)/R)^alpha));
end
Error = sum(abs(Theoretical-ExpSemivariance));
while Step > 1
R = R + Step;
for i=1:q
Theoretical(i,1) = Nug+Sill*(1-exp(-(Lag(i,1)/R)^alpha));
end
error = sum(abs(Theoretical-ExpSemivariance));
if error > Error
R = R - Step;
Step = Step/2;
else
Error = error;
end
end
The variables are R and alpha. Initially, i made alpha constant and used the code above to calculate min®. My problem is how to calculate both min® and min(alpha) for each i of the fun(Theoretical) such that Theoretical would be the best function that minimizes the error (between ExpSemivariance and Theoretical)

Iniciar sesión para comentar.

Categorías

Más información sobre Graph and Network Algorithms en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by