一阶波动方程数值解
第一次做数值模拟,计算天文的课程作业——数值求解一阶波动方程。这个是标准的一阶线性双曲型方程,其实计算过程不复杂,不过为交作业方便起见要生成动画,这动画做得可真是……这么说吧,100张图片用Windows Movie Maker叠加(注:已使用GIMP重新叠图为gif文件),麻烦得一塌糊涂。谁让我不会用其他软件呢……>
具体计算采用的是迎风格式,换句话说就是迎着波的传播方向求解。差分方程形式可以参考任何计算流体力学的书籍,就不在此废话了。
初始取三角波,其他初始条件请见动画开始的介绍。计算得出的演化行为是随着时间推进,一边扩散一边向右行进。实际上方程中没有耗散项,是差分法引入了数值解的耗散现象。
其他初始条件演化行为类似,因为动画实在麻烦,就不做了,干脆画个曲面图就好了。
delta函数:
方波:
IDL程序见下,其实很简单:
;simulation of one-order wave equation written by Bo Zhang
pro wave_testu = fltarr(100,100)
delta_x = 1
delta_t = 0.5
c = 1;initial condition
u(0:9,0) = findgen(10)
u(10:19,0) = 9-findgen(10);boundary condition
u(0,*) = 0
u(99,*) = 0;up-wind scheme
for n=0,98,1 do begin
for i=1,98,1 do begin
u(i,n+1) = u(i,n)-c*delta_t*(u(i,n)-u(i-1,n))/delta_x
endfor
endforwindow,1
shade_surf,uwindow,2
contour,uwindow,3
plot,u(*,99),yrange=[0,10]end