如何使用matlab,用有限差分求解偏微分方程?
求解思路:把偏微分方程离散化,采用合适的差分方法,将复杂的方程简化成简单的线性方程组,最后求解线性方程组,得到其数值解。
现以一维扩散方程为例,说明其计算过程。
第一步,根据条件,建立边界条件和初始条件,即
g0=@(t)zeros(size(t))
g1=g0%边界条件
eta=@(x)sin(pi*x)%初始条件
第二步,设置网格数,即
n=101%网格数
m=101%网格数
第三步,设置步长,即
h=0.01%步长
k=0.01%步长
第四步,设置t和x的初始值,即
t0=0%t的初始值
x0=0%x的初始值
第五步,确定扩散系数,即
K=1/pi^2
第六步,自定义Crank-Nicolson差分格式解函数
[t,x,U]=diffusion_sol1(h,k,t0,x0,n,m,eta,g0,g1,K)
第七步,绘制偏微分方程解的曲面,即
surf(t,x,U)
最后,运行程序得到一维扩散方程数值解的曲面图
pdepe()函数的一般调用格式是:sol=pde...1
例题:解下列偏微分方程组,方程如下图...
2
pdefun的命令为:function[c,f,s]=pdef...
3
初始条件:初始条件标准形式:[u1u2]=...
4
边界条件:左边界:[0u2]+[10].*f=[0...
5
求解偏微分方程组计算程序如下所示:>>...
MATLAB提供两种解决PDE问题:pdepe()函数求解般PDEs据用较通用性支持命令行形式调用
二PDE工具箱求解特殊PDE问题PDEtool较局限性比能求解二阶PDE问题并且能解决偏微程组提供GUI界面繁杂编程解脱同通File->Save As直接M代码
MATLAB语言提供pdepe()函数直接求解般偏微程(组)调用格式
sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)
【输入参数】
@pdefun:PDE问题描述函数必须换面标准形式
PDE编写面入口函数
[c,f,s]=pdefun(x,t,u,du)
m,x,t应于(式1)相关参数duu阶导数由给定输入变量即表示c,f,s三函数
@pdebc:PDE边界条件描述函数必须先化面形式
于边值条件编写面函数描述
[pa,qa,pb,qb]=pdebc(x,t,u,du)
其a表示边界b表示边界
@pdeic:PDE初值条件必须化面形式
股我使用面简单函数描述
u0=pdeic(x)
m,x,t:应于(式1)相关参数
【输参数】
sol:三维数组sol(:,:,i)表示ui解换句说uk应x(i)t(j)解sol(i,j,k)
通sol我使用pdeval()直接计算某点函数值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)