I need help with using a while loop
2 次查看(过去 30 天)
显示 更早的评论
My problem I think is quite simple. But I just cannot get my brain around it.
I'm trying to use a while loop to iterate my code until m = 1.000e-5. But when I execute the code what I get is an infinite loop.
Here is the code:
c1 = 0.1;
v1 = 0.1;
v2 = 1;
p = 0;
m = 0;
while m ~= 1.000e-5
c1 = c1*v1/v2
m = c1*0.1
p = p+1
end
0 个评论
采纳的回答
Paul Hoffrichter
2021-4-19
编辑:Paul Hoffrichter
2021-4-19
Looks like you are trying to solve a difference equation. Take a look at what is happening:
c1 = 0.1;
v1 = 0.1;
v2 = 1;
p = 2;
m = 0;
while m ~= 1.000e-5
c1(p) = c1(p-1)*v1/v2; % ==> c1 = c1 * 0.1 since v1, v2 never change in loop
m(p-1) = c1(p)*0.1;
if p > 100 || m(p-1) < 1e-8
break;
end
p = p+1;
end
figure(1), plot(c1), title('c1'), xlim([1 15])
figure(2), plot(m), title('m'), xlim([1 15])
c1
m
Output:
c1 =
0.100000000000000 0.010000000000000 0.001000000000000 0.000100000000000 0.000010000000000 0.000001000000000 0.000000100000000 0.000000010000000
m =
1.0e-03 *
1.000000000000000 0.100000000000000 0.010000000000000 0.001000000000000 0.000100000000000 0.000010000000000 0.000001000000000
m is decreasing rapidly. Never compare real numbers for equality or inequality. Remove my if-break statement, and adjust your while-loop accordingly.
更多回答(1 个)
David Hill
2021-4-19
c1 = 0.1;
v1 = 0.1;
v2 = 1;
p = 0;
m = 1;
while m > 1.000e-5%floating point errors, use >
c1 = c1*v1/v2
m = c1*0.1
p = p+1
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!