r******n 发帖数: 88 | 1 正在改老板的老程序,碰到这个余误差函数很好奇是怎么求的。我比较wiki上面的
asymptotic expansion,发现和
这
个程序有点相似,但那个expansion是发散的。请哪位兄台指教一下,非常感谢!
REM this calculates erfc(X)
SUB Erfc(X#,Y#) STATIC
IF ABS(X#)<=1.7# THEN CALL Erf(X#,Y#) : Y#=1#-Y# : EXIT
SUB
X1#=ABS(X#) : XC1#=X# : XD1#=1#/(X1#+.5#/X1#) : Y#=XD1#
FOR I%=3 TO 10000
XC2#=X1#+.5#*(I%-1)/XC1#
XD2#=1#/(X1#+.5#*(I%-1)*XD1#)
|
R*********r 发帖数: 1855 | 2 渐近级数本来就不要求收敛,照样可以以任意精度求出有限的和来。
那个程序用的是从那个渐近级数得到的Pade序列(有理分式)逼近。
P(1,2)=2x/(1+2x^2)
P(2,3)=(2+2x^2)/(2x^3+3x)
……
limP(n,n+1)=P
Erfc(x)=P*e^(-x^2)/Sqrt[pi] |
r******n 发帖数: 88 | 3 谨受教!这些是数学系的课程里有的吗?以前学的级数或者计算方法好像都没有提到过。
EXIT
【在 r******n 的大作中提到】 : 正在改老板的老程序,碰到这个余误差函数很好奇是怎么求的。我比较wiki上面的 : asymptotic expansion,发现和 : 这 : 个程序有点相似,但那个expansion是发散的。请哪位兄台指教一下,非常感谢! : REM this calculates erfc(X) : SUB Erfc(X#,Y#) STATIC : IF ABS(X#)<=1.7# THEN CALL Erf(X#,Y#) : Y#=1#-Y# : EXIT : SUB : X1#=ABS(X#) : XC1#=X# : XD1#=1#/(X1#+.5#/X1#) : Y#=XD1# : FOR I%=3 TO 10000
|
R*********r 发帖数: 1855 | 4 那是你没学到。看看渐近分析方面的书。
就这个题目而言,发散的级数(1)比那个收敛的级数(2)“收敛”得快得多——你可以用
少得多的项数得到所需精度。
(1)Erfc(x)~\sum_{n=0}^{\infty}(-1)^n(2n)!/n!/(2x)^{2n} e^{-x^2}/x/Sqrt{\pi}
(2)Erfc(x)=1-2\sum_{n=0}^{\infty}(-1)^n /n!/(2n+1)/Sqrt{\pi}
过。
【在 r******n 的大作中提到】 : 谨受教!这些是数学系的课程里有的吗?以前学的级数或者计算方法好像都没有提到过。 : : EXIT
|