双曲方程基于某matlab的数值解法.docx
- 文档编号:10899209
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:12
- 大小:217.33KB
双曲方程基于某matlab的数值解法.docx
《双曲方程基于某matlab的数值解法.docx》由会员分享,可在线阅读,更多相关《双曲方程基于某matlab的数值解法.docx(12页珍藏版)》请在冰点文库上搜索。
双曲方程基于某matlab的数值解法
双曲型方程基于MATLAB的数值解法
(数学1201,晓云,41262022)
一:
一阶双曲型微分方程的初边值问题
精确解为
二:
数值解法思想和步骤
2.1:
网格剖分
为了用差分方法求解上述问题,将求解区域
作剖分。
将空间区间
作
等分,将时间
区间作
等分,并记
。
分别称
和
为空间和时间步长。
用两簇平行直线
将
分割成矩形网格。
2.2:
差分格式的建立
2.2.1:
Lax-Friedrichs方法
对时间、空间采用中心差分使得
则由上式得到Lax-Friedrichs格式
截断误差为
所以Lax-Friedrichs格式的截断误差的阶式
令
:
则可得差分格式为
其传播因子为:
化简可得:
所以当
时,
格式稳定。
*2.2.2:
LaxWendroff方法
用牛顿二次插值公式可以得到LaxWendroff的差分格式,在此不详细分析,它的截断误差为
,是二阶精度;当
时,
,格式稳定。
在这里主要用它与上面一阶精度的Lax-Friedrichs方法进行简单对比。
2.3差分格式的求解
因为
时格式稳定,不妨取
,则s=0.9
差分格式
写成如下矩阵形式:
则需要通过对k时间层进行矩阵作用求出k+1时间层。
对上面的矩阵形式通过matlab编出如附录的程序求出数值解、真实解和误差。
2.5算法以及结果
function[PUExt]=PDEHyperbolic(uX,uT,M,N,C,type)
formatlong
%一阶双曲型方程的差分格式
%[PUExt]=PDEHyperbolic(uX,uT,M,N,C,phi,psi1,psi2,type)
%方程:
u_t+C*u_x=00<=t<=uT,0<=x<=uX
%初值条件:
u(x,0)=phi(x)
%输出参数:
U-解矩阵
%x-横坐标
%t-纵坐标,时间
%输入参数:
uX-变量x的上界
%uT-变量t的上界
%M-变量x的等分区间数
%N-变量t的等分区间数
%C-系数
%phi-初值条件函数,定义为联函数
%psi1,psi2-边值条件函数,定义为联函数
%type-差分格式,从下列值中选取
%-type='LaxFriedrichs',采用Lax-Friedrichs差分格式求解
%-type='LaxWendroff',采用Lax-Wendroff差分格式求解
h=uX/M;%变量x的步长
k=uT/N;%变量t的步长
r=k/h;%步长比
x=(0:
M)*h;t=(0:
N)*k;
U=zeros(M+1,N+1);
%初值条件
fori=1:
M+1
U(i,1)=cos(pi*x(i));
P(i,1)=cos(pi*x(i));
E(i,1)=0;
end
%边值条件
forj=1:
N+1
U(1,j)=cos(pi*t(j));
E(1,j)=0;
P(1,j)=cos(pi*t(j));
U(M+1,j)=-cos(pi*t(j));
P(M+1,j)=-cos(pi*t(j));
E(M+1,j)=0;
end
switchtype
case'LaxFriedrichs'
ifabs(C*r)>1
disp('|C*r|>1,Lax-Friedrichs差分格式不稳定!
')
end
%逐层求解
forj=1:
N
fori=2:
M
U(i,j+1)=(U(i+1,j)+U(i-1,j))/2-C*r*(U(i+1,j)-U(i-1,j))/2;
P(i,j+1)=cos(pi*(x(i)+t(j+1)));
E(i,j+1)=abs(U(i,j+1)-cos(pi*(x(i)+t(j+1))));
end
end
%Lax-Wendroff差分格式
case'LaxWendroff'
ifabs(C*r)>1
disp('|C*r|>1,Lax-Wendroff差分格式不稳定!
')
end
%逐层求解
forj=1:
N
fori=2:
M
U(i,j+1)=U(i,j)-C*r*(U(i+1,j)-U(i-1,j))/2+C^2*r^2*(U(i+1,j)-2*U(i,j)+U(i-1,j))/2;
P(i,j+1)=cos(pi*(x(i)+t(j+1)));
E(i,j+1)=abs(U(i,j+1)-cos(pi*(x(i)+t(j+1))));
end
end
otherwise
disp('差分格式类型输入有误!
')
return;
end
U=U';
P=P';
E=E';
%作出图形精确解
mesh(x,t,P);
title('一阶双曲型方程的精确解图像');
xlabel('空间变量x');ylabel('时间变量t');zlabel('一阶双曲型方程的解P')
%作出图形数值解
mesh(x,t,U);
title([type'格式求解一阶双曲型方程的解的图像']);
xlabel('空间变量x');ylabel('时间变量t');zlabel('一阶双曲型方程的解U')
return;
命令窗口输入:
>>uX=1;uT=1;M=90;N=100;C=-1;phi=inline('cos(pi*x)');psi1=inline('cos(pi*t)');psi2=inline('-cos(pi*t)');type='LaxFriedrichs'或type='LaxWendroff';
>>[PUExt]=PDEHyperbolic(uX,uT,M,N,C,type)
从matlab的数值解法结果中抽出一部分数据进行比较
表1
LaxFriedrichs
格式
j
k
(x,t)
数值解
真实解
误差
46
11
(0.5,0.1)
-0.308981
-0.309017
0.000036
46
21
(0.5,0.2)
-0.587647
-0.587785
0.000138
46
31
(0.5,0.3)
-0.808731
-0.809017
0.000286
46
41
(0.5,0.4)
-0.950609
-0.951056
0.000448
46
51
(0.5,0.5)
-0.999409
-1.000000
0.000591
46
61
(0.5,0.6)
-0.950496
-0.951057
0.000560
46
71
(0.5,0.7)
-0.808539
-0.809017
0.000478
46
81
(0.5,0.8)
-0.587437
-0.587785
0.000348
46
91
(0.5,0.9)
-0.308833
-0.309017
0.000184
46
101
(0.5,1.0)
-0.000002
-0.000000
0.000002
表2
LaxWendroff
格式
j
k
(x,t)
数值解
真实解
误差
46
11
(0.5,0.1)
-0.309005
-0.309017
0.000012
46
21
(0.5,0.2)
-0.587765
-0.587785
0.000020
46
31
(0.5,0.3)
-0.808995
-0.809017
0.000022
46
41
(0.5,0.4)
-0.951040
-0.951056
0.000016
46
51
(0.5,0.5)
-0.999999
-1.000000
0.000001
46
61
(0.5,0.6)
-0.951074
-0.951057
0.000017
46
71
(0.5,0.7)
-0.809051
-0.809017
0.000034
46
81
(0.5,0.8)
-0.587833
-0.587785
0.000048
46
91
(0.5,0.9)
-0.309074
-0.309017
0.000057
46
101
(0.5,1.0)
-0.000006
-0.000000
0.000006
备注:
本来
,但是由于matlab中下标必须从大于0开始,所以在程序中
图像分析:
结果分析:
从表1和表2可以看出LaxFriedrichs格式和LaxWendroff格式的
真值得误差都比较小,而LaxWendroff格式虽然精度比LaxFriedrichs
的精度高,但是在网格点划分比较细的情况下,二者的差别不大。
从三个图像的结果看出,二者都拟合的相当好,并且结果都稳定。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方程 基于 matlab 数值 解法