Web前端1+x证书初级:ln (1+x)的Maclaurin系列

我试图在 c ++ 中使用 Maclaurin 系列计算 ln(1 + x)的值:x-x ^ 2 / 2 + x ^ 3 / 3-...+(-1)^(n + 1)* x ^ 2n / 2n。但是如果入一个大于 2 的数字,程序将返回错误 nan。

我的代码在这里:

double ln(double x){
 double oldx=x,prec,t=x,i=1,eps=0.0001; 
int semn=-1;
 do{ prec=x;
  t=t*oldx;
    i++;
    x=prec+(t/i)*semn;
    semn=-semn;
 }while(fabs(x-prec)>=eps);
return x;
}

我能做些什么来得到正确的答案?

5

这不是您的程序中的错误,您正在使用 Maclaurin 级数超出其有效性范围。此泰勒级数的收敛半径为 1,因此对于 | x | & lt;1,您将从中得到 ln(1 x)。请参阅 Wikipedia 的this section中的图像,很明显,近似值以添加更多术语无济于事的方式失败。

幂级数总是收敛在一个磁盘上(在复平面中),该磁盘在到达任何奇点之前就停止了,并且只有在函数为entire时才是无限的。对于 x =-1,函数 ln(1 x)发散到负无穷大,因此半径可以(最多)为 1。可以使用更严格的方法来确定它。您可以阅读更多here

0

这里的问题是泰勒级数不会收敛于任何大于 2 的数,换句话说,ln (1 + x) 的泰勒级数不会收敛于 x & gt;1。你可以用ratio test找到实际的收敛半径。公式为

enter image description here

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(187)
海尔冰柜e1是什么故障代码:复合赋值E1op=E2不等同于E1=E1opE2
上一篇
Vr是啥东西:开发Unity游戏VR和非 VR
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(40条)