Why is slow?
13 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
the cyclist
2016-5-21
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 个评论
the cyclist
2016-5-22
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).
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!