(exp(x) - exp(-x))/(2*x) 的泰勒级数

Taylor series for (exp(x) - exp(-x))/(2*x)

我被要求编写一个函数来计算 (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,这会导致无限循环。

问题出在您使用的表达方式上。对于小数 exp(x)exp(-x) 近似相等,所以 exp(x)-exp(-x) 接近于零并且肯定低于 1。由于你从 1 开始并且只添加正数,你永远不会达到函数值。

将表达式重写为

f = @(x) sinh(x)/x;

会起作用,因为它对于这些小值更稳定。

您还可以通过绘制两个函数来看到这一点:

x = -1e-14:1e-18:1e-14;
plot(x,(exp(x) - exp(-x))./(2*x),x,sinh(x)./x)
legend('(exp(x) - exp(-x))/(2*x)','sinh(x)/x')

给出