Why is slow?

13 views (last 30 days)
Eryk Fernandes
Eryk Fernandes on 21 May 2016
Commented: the cyclist on 22 May 2016
Hey guys, i'm trying to run this script but it takes too long. Can i change anything to make it faster?
Note: I've already tried in another computer.
a=1560;
b=6360;
tol=500;
it= 50;
g=@(P)(3*10^7*(P^(-0.6)+7/P)+800*P^0.7+400000);
x1=a+(1/4)*((b-a)/4);
x2=a+(2/4)*((b-a)/4);
x3=a+(3/4)*((b-a)/4);
g_x1=g(x1);
g_x2=g(x2);
g_x3=g(x3);
while (abs(b-a)>tol)
if g_x1<g_x2
b=x2;
x2=x1;
x1=a+(1/4)*((b-a)/4);
g_x1=g(x1);
g_x2=g(x2);
g_x3=g(x3);
elseif g_x3<g_x2
a=x2;
x2=x3;
x3=a+(3/4)*((b-a)/4);
g_x1=g(x1);
g_x2=g(x2);
g_x3=g(x3);
else g_x3>g_x2
a=x1;
b=x2;
g_x1=g(x1);
g_x2=g(x2);
g_x3=g(x3);
end
end

Accepted Answer

the cyclist
the cyclist on 21 May 2016
The problem is not that your code is slow, but that your algorithm doesn't converge.
abs(b-a) reaches 1925.3906, and stays there, so the while loop doesn't end.
  2 Comments
Eryk Fernandes
Eryk Fernandes on 21 May 2016
Thank you, but i can't see why it don't converge
the cyclist
the cyclist on 22 May 2016
Do you have a reference for the algorithm you are using? Maybe you coded it incorrectly.
Also, I am quite sure that this line ...
else g_x3>g_x2
is not what you intended. That line is not going to check any condition. It is going to execute the code
g_x3>g_x2
and just display 1 or 0 (i.e. true or false).

Sign in to comment.

More Answers (0)

Categories

Find more on Programming in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!