双曲方程基于matlab的数值解法.docx

上传人:b****4 文档编号:5093036 上传时间:2022-12-13 格式:DOCX 页数:11 大小:217.45KB
下载 相关 举报
双曲方程基于matlab的数值解法.docx_第1页
第1页 / 共11页
双曲方程基于matlab的数值解法.docx_第2页
第2页 / 共11页
双曲方程基于matlab的数值解法.docx_第3页
第3页 / 共11页
双曲方程基于matlab的数值解法.docx_第4页
第4页 / 共11页
双曲方程基于matlab的数值解法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

双曲方程基于matlab的数值解法.docx

《双曲方程基于matlab的数值解法.docx》由会员分享,可在线阅读,更多相关《双曲方程基于matlab的数值解法.docx(11页珍藏版)》请在冰豆网上搜索。

双曲方程基于matlab的数值解法.docx

双曲方程基于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

的精度高,但是在网格点划分比较细的情况下,二者的差别不大。

从三个图像的结果看出,二者都拟合的相当好,并且结果都稳定。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1