偏微分方程的数值解


Matlab提供了两种方法解决PDE问题 一是pdepe函数可以求解一般的PDEs,具有较大的通用性但是只支持命令行调用二是pde工具箱,可以求解特殊的pde问题,但是具有较大的局限性比如只能求解二阶的pde问题,并且不能解决偏微分方程组,但他提供了GUI界面。简化了操作并且可以通过FILE->Save As生成M文件

偏微分方程的数值解_第1张图片

@pdeFu Pde函数的标准形式如下对应函数@pedFu

所以函数的形式为[ c,f,s ] = pedFu( x,t,u,du );

@pdebc 是pde函数的边界条件描述函数

对应形式如下:

[ pa,qa,pb,qb ] = pedbc( xa,ua,xb,ub,t)

@pedic初值条件函数

赋予微分方程的初值

对应形式如下u0=[1;0];

使用matlab绘制如下图

偏微分方程的数值解_第2张图片

代码如下


clc

clear

x=0:0.05:1;

t=0:0.05:2;

m=0;

sol=[];

sol=pdepe(m,@pedFu,@pedic,@pedbc,x,t);

figure('numbertitle','off','name','PDE Demo ¡ª¡ªby matlabsy');

subplot(2,1,1);

surf(x,t,sol(:,:,1))

title('The Solution of u_1')

xlabel('X')

ylabel('Y')

zlabel('U')

subplot(2,1,2);

surf(x,t,sol(:,:,2))

title('The Solution of u_2')

xlabel('X')

ylabel('Y')

zlabel('U')

pedic.m

function u0 = pedic( x )

%PEDIC 初值条件函数

u0=[1;0];

end

pedfu.m

function [ c,f,s ] = pedFu( x,t,u,du )

%pedfu 求解微分方程

c=[1;1];

f=[0.024*du(1);10.17*du(2)];

temp=u(1)-u(2);

s=[-1;1].*(exp(5.73*temp)-exp(-11.46*temp));

end

pedbc.m

function [ pa,qa,pb,qb ] = pedbc( xa,ua,xb,ub,t )

%PDEBC 边界条件函数

% a上边界 b下边界

pa=[0;ua(2)];

qa=[1;0];

pb=[ub(1)-1;0];

qb=[0;1];

end

你可能感兴趣的:(偏微分方程的数值解)