数学建模入门-matlab实现偏微分方程数值解

前言

在python3安装fipy失败之后,懒得下载python2的我还是选择了matlab。

调用示例

例题

在这里插入图片描述

求解

在这里插入图片描述

命令介绍

在这里插入图片描述
在这里插入图片描述

具体实现

步骤1:化标准式

在这里插入图片描述
在这里插入图片描述

步骤 2:编写偏微分方程的系数向量函数

function[c,f,s]=pdefun(x,t,u,ux)  %建立偏微分方程函数
c=[1;1];
y=u(1)-u(2);
F=exp(5.73*y)-exp(-11.46*y);
s=F*[-1;1];
f=[0.024*ux(1);0.017*ux(2)];

步骤3:编写初始条件函数

function[u0]=pdeic(x)   %建立偏微分方程的初始条件函数
u0=[1;0];

步骤 4:编写边界条件函数

function[pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t)   %建立偏微分方程的边界条件函数
pa=[0;ua(2)];qa=[1;0];
pb=[ub(1)-1;0];qb=[0;1];

步骤 5: 取点

由于此问题的端点均受边界条件的限制, 且时间t 很小时状态的变动很大(由多次求
解后的经验得知),故在两端点处的点可稍微密集些。同时对于t 小处亦可取密一些。例
如,

x=[0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1];
t=[0 0.005 0.01 0.05 0.1 0.5 1 1.5 2];

主程序

以上几个主要步骤编写完成后,事实上就可直接完成主程序来求解。此问题的参考
程序如下:

x=0:0.05:1;
t=0:0.05:2;
m=0;

sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t);
u1=sol(:,:,1);
u2=sol(:,:,2);

figure;
surf(x,t,u1)
title('u1(x,t)')
xlabel('Distance x')
ylabel('Time t')

figure;
surf(x,t,u2)
title('u2(x,t)')
xlabel('Distance x')
ylabel('Time t')

猜你喜欢

转载自blog.csdn.net/weixin_44112790/article/details/88628464