【问题标题】:Replacing a for loop with a while loop用 while 循环替换 for 循环
【发布时间】:2015-11-17 16:03:26
【问题描述】:

我编写了一个函数,它估计 e 的倒数并循环遍历 n 的值,直到近似值在实际值的给定 tolerance 范围内。

目前我使用这个代码:

function [approx, n] = calc_e(tolerance)

for n = 1:inf
    approx = ((1-1/n)^n);
    diff = (1/exp(1)) - approx;
    if diff < tolerance, break; end
end
end

这很好用,但是有人告诉我,使用while 循环可能会更有效,但我不知道如何以这种方式进行。

有人能解释一下吗?

【问题讨论】:

  • 我不认为它会对 matlab 产生任何影响
  • 此外,函数的名称具有误导性,您近似于 1/e,而不是 e(这需要 (1+1/n)^n
  • 你真的应该避免使用像diff这样的内置函数名作为变量名。

标签: matlab loops for-loop while-loop


【解决方案1】:

简单地做:

function [approx, n] = calc_e(tolerance)
n = 1;
while (1/exp(1)) - ((1-1/n)^n) >= tolerance
   n = n + 1;
end
end

【讨论】:

  • 你忘了 n ... 初始化,递增
  • 其实你还是可以有一个单行的,你可以把 diff 的表达式放在里面 while condition 和 increment 放在 body 里
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 2011-03-26
  • 2019-04-04
相关资源
最近更新 更多