格式试验:已知 ,初值,当 x0 时,u=1,当 x0,u=0,用三种格式。
解:(1),采用 laxwendroff 格式:
题设中方程常常写为守恒型:
(1)
这样可以得到如下方程:
(2)
方程(2)的 laxwendroff 差分格式为:
对于 F=u*u/2,A=u,可令
以下用Matlab编程实现上述思想:程序如下,其中‘%’后面为解释语句。
clear all
dx=1;dt=0.6*dx;
ve(1:20)=1;%%%Laxwendoff格式dt/dx=0.6时
ve(21:40)=0;
plot(ve,'-bo')%%%Lax格式解析解
ve1(1:20)=1;%%%Lax格式dt/dx=1时
ve1(21:40)=0;
%for i=1:timestep
for j=2:39
ve(j)=ve(j)-1/4*0.6*(ve(j+1)+ve(j-1))*(ve(j+1)-ve(j-1))+1/8*0.36*((ve(j+1)+ve(j))^2*(ve(j+1)-
ve(j))-(ve(j)+ve(j-1))^2*(ve(j)-ve(j-1))); ve1(j)=ve1(j)-1/4*(ve1(j+1)+ve1(j-
1))*(ve1(j+1)-ve1(j-1))+1/8*((ve1(j+1)+ve1(j))^2*(ve1(j+1)-ve1(j))-(ve1(j)+ve1(j-1))^2*(ve1(j)-
ve1(j-1)));
end
%end
hold on
plot(ve,'-b.')%%%Lax格式
hold on;
plot(ve1,'-rs')
text(0,0.2,['Laxwendoff格式的数值解']);
legend('EXACT SOLUTION','dt/dx=0.6','dt/dx=1',-1)
数值模拟结果: