1

我认为这将是一个简单的迭代,但显然不是,我一直看到数字在屏幕上运行并且b = 425.0000......这应该结束我的 while 循环,但我已经大惊小怪了!

temp = 85;
b = 85;
cntr = 0;

while b < 425
  temp = temp * 0.8
  b = b + temp
  cntr = cntr + 1
end;
cntr

同样在上面我有cntr = cntr + 1,但在其他语言中,我可以将其缩短为cntr++cntr+=1如何在 MATLAB 中执行此操作?

干杯!

4

5 回答 5

5

您的条件可能应该测试 b 的当前值是否接近 425 的值,直到达到一定数量的有效数字。你可以这样做:

temp = 85; 
b = 85; 
cntr = 0; 

while b < (425 - 0.0001)   #<--- however many significant digits you need.
  temp = temp * 0.8; 
  b = b + temp;
  cntr = cntr + 1;
end

cntr

问题是您的 while 循环正在收敛到 425,但从未完全到达那里。

于 2012-04-19T21:48:29.607 回答
2

似乎b收敛到 425,但实际上并没有达到 425。b类似于 424.9999999999,当显示时四舍五入为 425。

据我所知,Matlab中没有++or运算符。+=

于 2012-04-19T21:36:51.297 回答
1

您没有打印足够的小数位来说明问题,请尝试运行以下命令:

temp = 85; 
b = 85; 
cntr = 0; 

while ( b < 425 ) && ( cntr < 300 )
  temp = temp * 0.8; 
  b = b + temp;
  cntr = cntr + 1;
  fprintf( 1, '%.20f\t%.20f\t%d\n', temp, b, cntr );
end

你会看到它b永远不会达到 425,它的值是 is的424.99999999999983值,所以永远不会进一步增加。temp0b

MATLAB 不实现任何递增/递减运算符。

于 2012-04-19T21:40:52.557 回答
1

MATLAB 没有等效的前置和后置运算符。

于 2012-04-19T21:41:02.473 回答
0

您的表达式的限制似乎是 425,这意味着它实际上从未达到该值。你必须以某种方式编辑你的代码来解决这个问题。

此外,没有这样的增量运算符

于 2012-04-19T21:41:19.680 回答