How to minimize a function without using a loop

1 view (last 30 days)
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.

Answers (1)

Guillaume
Guillaume on 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 Comments
Guillaume
Guillaume on 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
Darlington Mensah on 26 Jul 2016
Edited: Darlington Mensah on 26 Jul 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)

Sign in to comment.

Categories

Find more on Graph and Network Algorithms in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!