我用泰勒公式写的ln(1+x)函数误差太大怎么办?
mfp吧
全部回复
仅看楼主
level 11
xqooZXY 楼主
function myln(x1)
variable x=x1-1,a=0
for variable n=1 to 100 step 1
a=a+(-1)**(n-1)/n*x**(n)
next
return a
endf
2021年09月11日 00点09分 1
level 1
将(-1)**(n-1)改成
variable b = 1
if mod(n, 2) == 0
b = -1
endif
然后
a = a + b/(n*x**(n))
另外,你的代码是不是少了一对括号?
a=a+(-1)**(n-1)/n*x**(n)
还是
a=a+(-1)**(n-1)/(n*x**(n))
2021年09月11日 06点09分 2
应该是a = a + (-1)**(n-1)/n! * x**(n),总之你的代码有点问题。
2021年09月11日 06点09分
应该是a = a + (-1)**(n-1)/n! * x**(n),总之你的代码有点问题。
2021年09月11日 06点09分
@woshiwppaa 加了阶乘之后就是这样myln(1278)=6588478455572230000000000000000+很多个0怎么办???
2021年09月11日 11点09分
@woshiwppaa 你有审核中的回复,怎么才能解决???
2021年09月12日 09点09分
level 11
xqooZXY 楼主
怎么回事???
2021年09月11日 11点09分 3
level 1
我知道是怎么回事了。麦克劳林公式最后一项是R_n(x),意思是说除了前面按照傅里叶分解出的x个各项,还有一个x高次方(也就是n次方以上)error,这个x高次方的error在x小于1时随n的增大趋近于0,但是如果x大于1,这个x高次方的error随n的增大趋近于无穷,所以你当然算不出来。你把代码改成
function myln(x1)
variable x=x1-1277.1,a=ln(1277.1)
for variable n=1 to 100 step 1
print_line("add " + ((-1)**(n-1)/n*x**(n)))
a=a+(-1)**(n-1)/n*x**(n)
next
return a
endf
就可以了。
2021年09月11日 23点09分 4
好像这个代码也不对。不过反正用麦克劳林公式算近似值x必须小于1.
2021年09月11日 23点09分
1