首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(exp(x) - exp(-x))/(2*x)的Taylor级数

(exp(x) - exp(-x))/(2*x)的Taylor级数
EN

Stack Overflow用户
提问于 2018-04-04 10:59:25
回答 1查看 230关注 0票数 0

我被要求编写一个函数来计算(exp(x) - exp(-x))/(2*x)的Taylor级数,直到绝对误差小于机器的eps为止。

代码语言:javascript
复制
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;

我的问题是,反差永远不会低于机器的eps,这会导致无限循环。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 13:15:05

问题是你用的是表达式。对于小数,exp(x)exp(-x)大致相等,所以exp(x)-exp(-x)接近于零,并且肯定低于1。因为你从1开始,并且只加正数,你就永远达不到函数的值。

将表达式重写为

代码语言:javascript
复制
f = @(x) sinh(x)/x;

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

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

代码语言:javascript
复制
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')

给出

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49649281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档