How can find the maximum of f(x) by updating initial guesses in a loop?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
As homework a 'simple grid search' must be coded to find the maxima of f(x) = 2*ln(x)-2*x+5.
The simple grid search takes two initial guesses (xa, xb) and devides them over 5 intervals of equal lenght (xa , (xa+xb)*(1/4) , (xa+xb)*(2/4) , (xa+xb)*(3/4) , xb). Then the code checks for three consecutive intervals in which a maximum is, and takes the outer two points to be iterated again as new initial guesses, this results in more narrow intervals each iteration until a chosen accuracy is acquired.
My code can find the intervals in which a maximum is because i leave it no choice. However, it fails to update the new initial guesses correctly, i think because i dont know how to properly start at the beginnen of the loop again. This is my code:
clear all
xa = 0; %Initial guess xa < xb
xb = 10; %Important: f(xa) < max < f(xb)
iter = 10;
f = @(x) 2*log(x) - 2*x + 5;
for k = 1:iter
x1 = (xa) %Assuming a maximum is between xa and xb
x2 = (xa+xb)*1/4
x3 = (xa+xb)*2/4
x4 = (xa+xb)*3/4
x5 = (xb)
if (f(x1) < f(x2))
if (f(x2) < f(x3))
if (f(x3) < f(x4))
if (f(x4) < f(x5))
xa = x3;
xb = x5;
else
print('Choose better initial guesses')
end
else
xa = x2; %0.5
xb = x4; %1.5
end
else
xa = x1;
xb = x3;
end
else
print('Choose better initial guesses')
end
if abs((x4-x3)) < 0.001
break
end
end
fprintf('The maximum is %f\nNumber of iterations: %d\n',x3,k)
0 Kommentare
Antworten (2)
Divya Yerraguntla
am 31 Mär. 2020
Hi Loic,
I dont see any issue with the updation of initial guesses in your code.
The initial guesses keep updating until the 3rd iteration and then they saturate because your maxima is already found at 3rd iteration itself. So you could change the value of 'iter' variable to 3 and still be able to find maxima.
Hope it helps!
0 Kommentare
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!