【发布时间】:2018-09-13 21:55:41
【问题描述】:
我被要求编写一个函数来计算 (exp(x) - exp(-x))/(2*x) 的泰勒级数,直到绝对误差小于机器的 eps。
function k = tayser(xo)
f = @(x) (exp(x) - exp(-x))/(2*x);
abserror = 1;
sum = 1;
n=2;
while abserror > eps
sum = sum + (xo^n)/(factorial(n+1));
n=n+2;
abserror = abs(sum-f(xo));
disp(abserror);
end
k=sum;
我的问题是,abserror 永远不会低于机器的 eps,从而导致无限循环。
【问题讨论】:
-
我认为条件应该是“直到绝对误差与机器的 eps 相当”。如果您设法在 eps 以下出现错误,那将是偶然的。 eps 的阈值太低。您可能应该使用类似 10*eps 作为绝对误差阈值
-
你用什么
xo?我试了几次,都没有死循环。 -
非常感谢您的即时回复@LuisMendo。我使用机器的 eps 和 0 尝试了一些合乎逻辑的情况,最终我被问到“直到绝对错误为 0”(因为 0
-
@ViG 感谢您的即时回复。我正在尝试 ????o=10^−13, xo=10^−14,xo=10^−15,xo=10^−16 和 xo=0。
标签: matlab infinite-loop taylor-series