m*******s 发帖数: 3142 | 1 现在碰到一个结构有点奇怪的级数,通项大概是1/{[(2n-1)-i*a]^2-b^2},其中i是虚数
单位,a,b是一般的实数,具体大小待定。
这个级数收敛没有问题,但是我不知道最后的准确结果,只能用数值计算办法逼近。
问题就是这种级数收敛速度很慢,我用matlab试了一下,前10^8项的和也只能精确到小
数点后6位的样子,不能满足要求,可是取更多的项意味着别的量也要算更多,时间太
长了。
请问对于这种形状的级数有没有什么比较好的加速方法? |
R*********r 发帖数: 1855 | |
m*******s 发帖数: 3142 | 3 谢谢,里头的方法确实不错。我用那个ε算法试了一次,取了前5000项,精度达到了10
^(-9).时间是20分钟的样子。
新的问题是在数值计算中,有些级数没有通项表达式,只有数值,其渐近行为是收敛的
,能用那些Convergence Improvement方法吗? |
x******i 发帖数: 3022 | 4
this sum can probably be done analytically.
at least a simpler one can be (if a>0 & b>0)
\sum_{-\infty < n <+\infty} 1/((n-ia)^2-b^2)
=> \iint_{-\infty}^{+\infty} dn*dt exp(-2*pi*i*n*t) 1/((n-ia)^2-b^2)
=> \int_0^{+\infty} dt cos(2*pi*b*t)*exp(-2*pi*a*t)/b
=> something easy
【在 m*******s 的大作中提到】 : 现在碰到一个结构有点奇怪的级数,通项大概是1/{[(2n-1)-i*a]^2-b^2},其中i是虚数 : 单位,a,b是一般的实数,具体大小待定。 : 这个级数收敛没有问题,但是我不知道最后的准确结果,只能用数值计算办法逼近。 : 问题就是这种级数收敛速度很慢,我用matlab试了一下,前10^8项的和也只能精确到小 : 数点后6位的样子,不能满足要求,可是取更多的项意味着别的量也要算更多,时间太 : 长了。 : 请问对于这种形状的级数有没有什么比较好的加速方法?
|
R*********r 发帖数: 1855 | 5 那些方法最拿手的就是对付数值级数,计算机对付符号计算也是很费劲的。
举个例子
4(1-1/3+1/5-1/7+……)=pi
精度只有o(1/n),想直接加起来计算pi的近似值几乎是MI,但是你先求部分和序列S_n
(0),然后反复利用公式(17)~(20),得到一系列部分和S_(k),所有的S_(k)都收
敛于pi,而且一个比一个快,实际上你只要算到S_11(0),再进行几次数据处理就可以
精确到10^-10
公式(17)~(20)对付振荡和数列特别有效,对单调的和数列效果就一般,这时候需要换
一种方法,比如Richardson变换,S_n(k)=D^k(S_n(0)n^k)/k!,D是差分算子
10
【在 m*******s 的大作中提到】 : 谢谢,里头的方法确实不错。我用那个ε算法试了一次,取了前5000项,精度达到了10 : ^(-9).时间是20分钟的样子。 : 新的问题是在数值计算中,有些级数没有通项表达式,只有数值,其渐近行为是收敛的 : ,能用那些Convergence Improvement方法吗?
|
R*********r 发帖数: 1855 | 6 假设 S_n(0)=s+\sum_{i=a}^{\infty}c_i/n^i
则施行Richardson变换后,S_n(k)=s+\sum_{i=max{k+1,a}}^{\infty}d_i/n^i
精度由原来的o(1/n^a)变为o(1/n^(max{k+1,a}))
单调数列比较难搞,因为对这种数列找极限相当于外推,不容易,振荡的相当于内插,
京都容易提高。
你加了5000项绝对是走了弯路,通项(不管是数值还是解析式)比较规整(比方前
1000000项是一种规律,1000000项以后又是另外一种规律,那就显然要算到1000000项
以后才有意义)的话一般十来项都是足够的。 |
m*******s 发帖数: 3142 | 7 這個級數只是從1到+∞,要是從-∞到+∞,結果書上早就給好了,不用費精費神用數值計
算了 |
m*******s 发帖数: 3142 | 8 我用那個ε算法,確實要比較多的項才有較高的精度.我記得取前20項的話,精度好像只
達到10^(-4)的樣子. 當然這個所謂的精度是最后的那個數跟前一次的數相減得到的,至
于真實的精度,我不知道.
Richardson变换,能給個參考文獻嗎?謝謝! |
R*********r 发帖数: 1855 | 9 ε算法 对单调和数列效果很差,你可以自己算算,假设S_n=s+c/n^k,代入公式以后
误差总是o(1/n^k),最多系数小一些。
何必要什么文献?
举个例子,比如取k=4
S_n(4)=D^4(S_n(0)n^4)/4!
=((n+4)^4S_{n+4}-4(n+3)^4S_{n+3}+6(n+2)^4S_{n+2}-4(n+1)^4S_{n+1}+n^4*S
_n)/24
跟公式 D=E-I,
D^4=(E-I)^4=E^4-4E^3+6E^2-4E+I
对比一下就知道Richardson变换公式什么意思了
你原来的和数列误差是O(1/n)
S_n(4)的和数列误差是O(1/n^5)
取n=100,误差大概就是10^-10,不过显然增加项数n远不如提高阶数k效率高。 |
x******i 发帖数: 3022 | 10
1到无穷也可以搞定,要经过如下步骤:
1)把a看成复数,则1到无穷之和是a的解析函数
2) 负无穷到正无穷求和,是上述函数的实数部分乘以2
3) 对于任何解析函数,虚部可以通过实部得到,之须用一下Poisson积分.
【在 m*******s 的大作中提到】 : 這個級數只是從1到+∞,要是從-∞到+∞,結果書上早就給好了,不用費精費神用數值計 : 算了
|
m*******s 发帖数: 3142 | 11 不是很懂,不过这个级数的实部为0,用你说的方法,得不到虚部
【在 x******i 的大作中提到】 : : 1到无穷也可以搞定,要经过如下步骤: : 1)把a看成复数,则1到无穷之和是a的解析函数 : 2) 负无穷到正无穷求和,是上述函数的实数部分乘以2 : 3) 对于任何解析函数,虚部可以通过实部得到,之须用一下Poisson积分.
|
m*******s 发帖数: 3142 | 12 主要是我只听说过Richardson extrapolation,没有google到Richardson变换,
对你给出的符号的含义不清楚,所以想看看参考文献,
比如k是什么意思,n又是什么意思
而且算到什么时候为止,哪个量可以作为级数无穷求和的结果?
*S
【在 R*********r 的大作中提到】 : ε算法 对单调和数列效果很差,你可以自己算算,假设S_n=s+c/n^k,代入公式以后 : 误差总是o(1/n^k),最多系数小一些。 : 何必要什么文献? : 举个例子,比如取k=4 : S_n(4)=D^4(S_n(0)n^4)/4! : =((n+4)^4S_{n+4}-4(n+3)^4S_{n+3}+6(n+2)^4S_{n+2}-4(n+1)^4S_{n+1}+n^4*S : _n)/24 : 跟公式 D=E-I, : D^4=(E-I)^4=E^4-4E^3+6E^2-4E+I : 对比一下就知道Richardson变换公式什么意思了
|
x******i 发帖数: 3022 | 13
把a看成复数时,级数和就不能只有虚部。
这个问题,不如直接用Mathematica,得到
Sum[1/((2 n - 1 - I*a)^2 - b^2), {n, 1, Infinity}]
=(-PolyGamma[0, 1/2 - (I a)/2 - b/2] + PolyGamma[0, 1/2 - (I a)/2 + b/2])/(4
b)
PolyGamma[0,z]是Log[Gamma[z]]的导数。
【在 m*******s 的大作中提到】 : 不是很懂,不过这个级数的实部为0,用你说的方法,得不到虚部
|
m*******s 发帖数: 3142 | 14 前几天我也在数学手册上查到了,可惜的实际计算中这个级数很可能要拆开,每一项都
得干别的事,
(4
【在 x******i 的大作中提到】 : : 把a看成复数时,级数和就不能只有虚部。 : 这个问题,不如直接用Mathematica,得到 : Sum[1/((2 n - 1 - I*a)^2 - b^2), {n, 1, Infinity}] : =(-PolyGamma[0, 1/2 - (I a)/2 - b/2] + PolyGamma[0, 1/2 - (I a)/2 + b/2])/(4 : b) : PolyGamma[0,z]是Log[Gamma[z]]的导数。
|