概述
文章目录
- 微分方程建模Matlab代码总结**
- 1.常微分方程求解的几种常用代码
- Model 1
- 1.代码及对应方法
- 2.实例
- 1.问题1
- 1.求解常微分方程
- 2.代码
- 3.运行结果
- 2.问题2
- 1.求解
- 2.代码
- 3.结果
- 3.结果分析
- 2.偏微分方程求解
- 1.pdetool的使用
- 2.同轴电缆(已知电荷密度)为例
微分方程建模Matlab代码总结**
1.常微分方程求解的几种常用代码
Model 1
dy/dt=f(t,y)
y(t)|t=t0=y0
采用Matlab代码dsolve,ode23,ode45求解
1.代码及对应方法
代码名称 | 求解问题 | 对应方法 | 输入参数 | 输出参数 | 进一步使用情况 |
---|---|---|---|---|---|
dsolve | dy/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) |
ode23 | y’=f(x,t) | 求解非刚性微分方 低阶方法 | ODEFUN,TSPAN,Y0 (注 TSPAN自变量范围是[t0,t_max]) | TOUT,YOUT | M(t,y)y’=f(t,y)M为非奇异矩阵 |
ode45 | y′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 仅适用于使用两个输入参数(t 和 y )的函数。但是,通过在函数外部定义参数并在指定函数句柄时传递这些参数,可以传入额外参数。 |
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
ode45
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
ode45
3.结果分析
通过三个库函数计算常微分方程发现,精度方法ode45,较高,相比速度 方法dsolve最快。
因此后期可以尝试采用方法*求解常微分模型定解问题
2.偏微分方程求解
偏微分方程分为 椭圆型、抛物型、双曲型,在matlab 有微分方程工具箱 (pdetool),这里简单学习pdetool的使用
1.pdetool的使用
- 在命令行输入pdetool,就会弹出相应的界面
- PDE图形界面的菜单下方的功能图标(icon)按 钮
- 定义 PDE 问题,其包含三大部份
- 利用绘图(draw)模式,定义 需要求解的问题的空间范围(domain)Ω
- 利用 boundary 模式,指定边界条件
- 利用 PDE 模式,指定 PDE 系数,即输入 c,a,f 和 d 等 PDE 模式中的系数
- 在定义 PDE 问题之后,可依以下两个步骤求解
- 在 mesh 模式下,产生 mesh 点,以便将原问题离散化
- 在 solve 模式下,求解
- 最后,在 Plot 模式下,显示答案
2.同轴电缆(已知电荷密度)为例
1.绘图
2.设置参数
将问题类型设置为Electrostatics
3.设置边界条件
4.将原问题离散化
5.求解
6.显示答案(画出等势线)
最后
以上就是妩媚羊为你收集整理的微分方程建模Matlab代码总结微分方程建模Matlab代码总结**的全部内容,希望文章能够帮你解决微分方程建模Matlab代码总结微分方程建模Matlab代码总结**所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复