微分方程建模Matlab代码总结

微分方程建模Matlab代码总结**

1.常微分方程求解的几种常用代码

Model 1

dy/dt=f(t,y)
y(t)|t=t0=y0
采用Matlab代码dsolve,ode23,ode45求解

1.代码及对应方法
代码名称求解问题对应方法输入参数输出参数进一步使用情况
dsolvedy/dt=ay;
diff(y,t,2)=ay:
diff(y,t,2)=y*a^2:
解的是常微分方程的精确解法也称为常微分方程的符号解syms:定义多个符号是符号变量
eqn:表示方程
cond:表示初值
diff(y,x,i):表示y对x的第i阶倒数
Name:表示变量。
没有指定变量时,matlab默认的变量为t;
带有常量的符号解[T,Y]=solver(odefun,tspan,y0)
ode23y’=f(x,t)求解非刚性微分方
低阶方法
ODEFUN,TSPAN,Y0
(注 TSPAN自变量范围是[t0,t_max])
TOUT,YOUTM(t,y)y’=f(t,y)M为非奇异矩阵
ode45y′1−μ(1−y1^2)y1’+y1=0
y’’=A*ty/B
y’(t)+f(t)y(t)=g(t)
求解非刚性微分方程 -
中阶方法
[T,Y] = ode45(odefun,tspan,y0) odefun 是函数句柄,可以是函数文件名,
匿名函数句柄或内联函数名 tspan 是区间 [t0 tf] 或者一系列散点[t0,t1,…,tf] y0 是初始值向量
T 返回列向量的时间点1.使用ode45的时候,必须表示为Y’=f(t,Y)的形式
2.ode45 仅适用于使用两个输入参数(ty)的函数。但是,通过在函数外部定义参数并在指定函数句柄时传递这些参数,可以传入额外参数。
2.实例
1.问题1
1.求解常微分方程

x*y’’-3 * y’ = x^2,y(1)=0,y(5)=0;

2.代码
%dsolve
syms y(x)
eqn = x * diff(y,x,2) -3 * diff(y,x) == x*x;
tip1=y(1)==0;
tip2=y(5)==0;
tip=[tip1,tip2];
dsolve(eqn,tip);
%top.m
function dy=odefun(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=(3*dy(1))/x+x;
end

%ode23
tspan=[1 5];
y0=[0 0];
[x,y]=ode23(@odefun,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')

%ode45
tspan=[1 5];
y0=[0 0];
[x,y]=ode45(@odefun,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')
3.运行结果
%dsolve
ans =
 
(31*x^4)/468 - x^3/3 + 125/468

ode23

image-20210305193953090

ode45

image-20210305194024323
2.问题2
1.求解

y’’ = cos(2x) – y , y(0) = 1 , y’(0) = 0;

2.代码
%dsolve
syms y(x)
eqn = diff(y,x,2) == cos(2*x) - y;
tip0 = diff(y,x);
tip1=y(0)==1;
tip2 = tip0(0) == 0;
tip = [tip1 , tip2];
F(x) = dsolve(eqn,tip);
F(x)
%top.m
function dy=top(x,y)
dy=[cos(2*x)-y];
end

%ode23
tspan=[1 5];
y0=[1;0];
[x,y]=ode23(@top,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')

%ode45
tspan=[1 5];
y0=[1;0];
[x,y]=ode45(@top,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')
3.结果
%dsolve
ans =
 
(5*cos(x))/3 + sin(x)*(sin(3*x)/6 + sin(x)/2) - (2*cos(x)*(6*tan(x/2)^2 - 3*tan(x/2)^4 + 1))/(3*(tan(x/2)^2 + 1)^3)

ode23

image-20210305213339228

ode45

image-20210305213423362
3.结果分析

通过三个库函数计算常微分方程发现,精度方法ode45,较高,相比速度 方法dsolve最快。

因此后期可以尝试采用方法*求解常微分模型定解问题

2.偏微分方程求解

偏微分方程分为 椭圆型、抛物型、双曲型,在matlab 有微分方程工具箱 (pdetool),这里简单学习pdetool的使用

1.pdetool的使用

  1. 在命令行输入pdetool,就会弹出相应的界面
  2. PDE图形界面的菜单下方的功能图标(icon)按 钮img
  3. 定义 PDE 问题,其包含三大部份
    1. 利用绘图(draw)模式,定义 需要求解的问题的空间范围(domain)Ω
    2. 利用 boundary 模式,指定边界条件
    3. 利用 PDE 模式指定 PDE 系数,即输入 c,a,f 和 d 等 PDE 模式中的系数
  4. 在定义 PDE 问题之后,可依以下两个步骤求解
    1. mesh 模式下,产生 mesh 点,以便将原问题离散化
    2. solve 模式下,求解
    3. 最后,在 Plot 模式下,显示答案

2.同轴电缆(已知电荷密度)为例

​ 1.绘图

image-20210305224810810 image-20210305225925088

​ 2.设置参数

将问题类型设置为Electrostatics

image-20210305230057339 image-20210305230202950

​ 3.设置边界条件

image-20210305230306424

​ 4.将原问题离散化

image-20210305230518129

​ 5.求解

image-20210305230853889

​ 6.显示答案(画出等势线)

image-20210305230920695
  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要用300字回答偏微分方程建模MATLAB代码,需要先了解偏微分方程(PDE)和MATLAB的基本知识。 偏微分方程建模是将实际问题转化为数学方程的过程。我们通常使用有限差分方法,其中空间和时间都被离散化为一系列网格点。然后,我们可以使用差分近似来计算方程中的偏微分部分。MATLAB是一种功能强大的数值计算软件,广泛用于科学和工程领域的建模和仿真。 假设我们要建模一个简单的热传导问题,可以使用热传导方程来描述: ∂u/∂t = α * ∇²u 其中,u是温度分布的函数,α是热扩散系数,∇²u是Laplace算子。 在MATLAB中,我们可以使用pdepe函数来求解偏微分方程。首先,我们需要定义方程和初始条件。然后,我们可以指定求解区域、边界条件和时间范围。 以下是一个简单的MATLAB代码示例: function [c,f,s] = pdeeqn(x,t,u,DuDx) c = 1; % 定义系数c f = alpha * DuDx; % 定义方程的非线性部分 s = 0; % 定义方程的源项 end function u0 = pdeic(x) u0 = sin(pi * x); % 定义初始条件 end function [pl,ql,pr,qr] = pdebc(xl,ul,xr,ur,t) pl = ul - 0; % 定义左边界条件 ql = 0; % 定义左边界梯度条件 pr = ur - 0; % 定义右边界条件 qr = 0; % 定义右边界梯度条件 end x = linspace(0,1,100); % 定义空间范围 t = linspace(0,1,100); % 定义时间范围 sol = pdepe(0,@pdeeqn,@pdeic,@pdebc,x,t); % 求解偏微分方程 u = sol(:,:,1); % 提取温度分布 surf(x,t,u) % 绘制温度分布图像 以上是一个简单的热传导问题的MATLAB代码示例。通过使用pdepe函数,我们可以求解偏微分方程并绘制结果。但是,请注意,此代码只是一个简单的示例,实际应用中可能需要进行更复杂的建模和求解。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值