index must be a positive integer or logical problem

1 次查看(过去 30 天)
Hi I can't see the problem in this code, would someone please help
R=3.5;
th = 0;
for i = 1:0.01:180;
SP(i) = (pi/2)*sin(th)*(1+((cos(th))/(R^2-(sin(th))^2)^0.5));
th = th+0.01;
end
plot(th,SP)
If I change i to be 1:180 and th to be th=th+1 it works, however as soon as I put in the incremental change it gives me this error
Also the plot is wrong, giving me a straight line at one point instead of for the full range when it should be a curve with all positive values.
Could someone please explain/help
Thank you very much Tom

回答(1 个)

the cyclist
the cyclist 2011-12-5
When you are looping with i=1:0.01:180, the second run through the loop has i=1.01. You are then trying to write into the "1.01"th element of the vector SP. That is what is causing the error.
EDIT:
You can do this without a for loop, by the way. (Also incorporated Paulo's correction for using degrees instead of radians for the input arguments.)
th = 0:0.01:180;
SP = (pi/2).*sind(th).*(1+((cosd(th))./(R^2-(sind(th)).^2).^0.5));
plot(th,SP)
  4 个评论
the cyclist
the cyclist 2011-12-5
+1 to Paulo's comment. sin() and cos() assume radian inputs.
Paulo Silva
Paulo Silva 2011-12-5
+1 to you for the explanations and for removing the loop, I was away too many weeks, my MATLAB skills are returning slowly :)

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by