Computational Physics

Episode 1. 计算方法

Computational Physics

 

REF:计算方法/scherer computational physics/Hoffman 计算物理学/丁泽军讲义

涉及内容: 经典力学问题/电磁学/QM本征值问题/统计力学 相变/随机过程/二次量子化/严格对角化/开放系统耗散问题/固体物理/随机矩阵

 


 

Review:数值方法

插值

给定n组数据点(x1,y1),,(xn,yn),考虑存在函数f(x),满足f(xi)=yi,显然在这些点处是没有误差的en(xi)=0,显然误差满足

(1)en(x)in(xxi)

误差阶数是n,那么f(x)应该是一个阶数小于n的多项式,形式上

(2)f(x)=a0+a1x++an1xn1+en(x)

直接的想法是求解方程组

(3)yi=f(xi)=j=0n1ajxij   for all  i=1,,n

Lagrange插值

插值的用意:

计算积分

(4)I=abf(x)dx

计算积分最粗糙的方式是取矩形近似,但毫无疑问精度是不太够的,此时积分值表示为I=hiyi。外推这个表达式,有一般形式

(5)I=(ba)iyiwi

其中wi为权重,iwi=1,例如矩形近似的等权重的。上式通常称为和积分形式,但处理高微积分时效率并不高。矩形近似的误差为O(h),采取梯形近似的误差为O(h2)

(6)Ii=[f(xi+h)f(xi)]h/2f(xi)h2/2

实际上对应Taylor展开得不同阶项

(7)f(xi+z)=f(xi)+f(xi)z+f(xi)z2/2!+

的解析积分值。这么做可以不断提高积分的精度,但是前提我们需要知道f(x)的各阶导数,而实际情况往往不能满足。不要求导数信息的数值方法Simpson summation具有O(h3),记已知数据点{yi(xi):i=1,,n}

(8)I=(x2x1)(f1+f2)/2+(x3x2)(f2+f3)/2+(x4x3)(f3+f4)/2+

数据点等距的情况下

(9)I=h2(f1+2f2++2fn1+fn)

这种方法实际上用两点插值

(10)f(x)=f(a)+f(b)f(a)ba(xa)

给出的函数f(x)完成了解析积分运算。

进一步,考虑Lagrange插值

(11)f(x)=iwili(x)=iyiji(xxj)ji(xixj)

考虑等距数据点,积分表示为

(12)I=inx1x1+(n1)hyili(x)dx=inyi0n1hji(xxj)ji(xixj)dx=hinyiwi(n)

其中第二步移动坐标原点以及rescalex=hx,最后的权重定义为

(13)wi(n):=0n1ji(xxj)ji(xixj)dx

可直接查表。

注意到Lagrange函数的性质

(14)li(xj)=δij

定义

(15)l(x)=i=1nli(x)1

可以验证

(16)ili(x)=1

同时也满足权重函数的归一性。

Newton-Cotes插值

对于Lagrange插值,增加一个数据点时,插值函数要完全重新计算;相对的Newton-Cotes插值在处理上简单很多,只需在插值多项式上额外增加一项即可。

考虑如下形式的插值多项式

(17)f(x)=b0+b1(xx1)+b2(xx1)(xx2)++bn(xxn)(xxn)

x=xi,分别得到

(18)b0=f(x1), b1=f(x1)f(x2)x1x2:=f[x1,x2], b2=f[x1,x2]f[x2,x3]x1x3:=f[x1,x2,x3], 

其他插值方法

切比雪夫插值,考虑一个例子

(19)11f(t)dt=0πf(cost)sintdt

其中

(20)f(cost)=12MC0+1MjCjcos(jt)+12MCMcos(Mt)

j=0,,M,系数可以通过FFT计算。

Runge-Kutta方法

从一个ODE出发

(21)dy/dx=f(x,y)

这个问题通常可以应用于两种场合:(1)ODE求解;(2)作为高精度的积分器yn+1yn=xnxn+!f(x,y)dx。一个trivial的处理方式是

(22)yn+1=yn+xnxn+1f(x,y)dxyn+(xn+1xn)f(xn,yn)+O(h2)yn+xn+1xn2[f(xn,yn)+f(xn+1,yn+1)]+O(h3)

第三行的由于yn+1的计算要调用自身的值,计算方式收敛性会相对好,通常我们会对yn+1取一个预估值y~n+1(可以用第二行的表达式算),然后在此基础上反复迭代计算yn+1的值。

换个角度考虑上式的积分

(23)yn+1=yn+0hf(xn+z,y(xn+z))dz=yn+0hf(xn+z,yn+ynz+ynz2/2)dz=yn+0hf+fxz+fxxz2/2+fy(ynz+ynz2/2)+dz=yn+f(xn,yn)h+fxh2/2+fyynh2/2+O(h3)=yn+f(xn,yn)h+h2[fx(xn,yn)+fy(xn,yn)f(xn,yn)]/2+O(h3)

这种算法需要计算f(x,y)的各阶偏导数,实际仍然不便利。如何避开导数的运算?Runge-Kutta方法在保证精度的情况下,避开了导数的运算(证明较复杂)。

Runge-Kutta 23

由于

(24)yn+1=yn+f(xn,yn)h+h2[fx(xn,yn)+fy(xn,yn)f(xn,yn)]/2+O(h3)=yn

(25)yn+1=yn+h[af(xn,yn)+bf(xn+h,yn+h)]+O(h3)

这个计算方法有3阶精度。

Runge-Kutta 45

(26)k1=f(xn,yn)k2=f(xn+h/2,yn+hk1/2)k3=f(xn+h/2,yn+hk2/2)k4=f(xn+h,yn+k3)

(27)yn+1=yn+h6(k1+2k2+2k3+k4)+O(h5)

上述数值方法也称为ODE45。

 

求解二阶ODE

物理学问题中常常有二阶微分方程,例如单摆的运动方程

(28)mlθ¨=mgsinθ

这种二阶方程可以通过设v=θ˙,reduce至一阶:

(29)ddt(θv)=(vgsinθ/l)

值得注意的是,Runge-Kutta方法也支持诸如y=(y1y2)的向量情形。

 

HW :Lagrange力学模拟问题

a.双摆问题

b. 引力模型U=A/rα

c. 竖杆倾倒问题

 

Notes on the Runge-Kutta method

示例:MMA求解经典力学问题

二维中心势场U=A/rα下的经典粒子运动问题。保守力场下拉格朗日量为

(30)L=x˙2(t)/2+y˙2/2U

拉格朗日方程

(31){0=ddt(Lx˙)Lx0=ddt(Ly˙)Ly

以及初始条件x(0),x˙(0);y(0),y˙(0)

 

 

 

TEST

TEST

TEST