数学建模专栏 | 第七篇:MATLAB连续模型求解方法
连续模型是指模型是连续函数的一类模型总称,具体建模方法主要是微分方程建模。微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微分方程的定解问题。把形形色色的实际问题化成微分方程的定解问题,大体上可以按以下几步:
1. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。
2. 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等等)。
3. 运用这些规律列出方程和定解条件。
MATLAB 在微分模型建模过程中的主要作用是求解微分方程的解析解, 将微分方程转化为一般的函数形式。 另外, 微分方程建模, 一定要做数值模拟, 即根据方程的表达形式, 给出变量间关系的图形, 做数值模拟也需要用 MATLAB 来实现。
微分方程的形式多样,微分方程的求解也是根据不同的形式采用不同的方法, 在建模比赛中, 常用的方法有三种:
1. 用 dsolve 求解常见的微分方程解析解
2. 用 ODE 家族的求解器求解数值解
3. 使用专用的求解器求解
1. 常规微分方程的求解
微分方程在 MATLAB 中固定的表达方式, 这些基本的表达方式如下表所示:
对于通常的微分方程, 一般需要先求解析解, 那么 dsolve 是首先考虑的求解器,因为dsolve 能够求解解析解,其具体的用法如下:
[实例]求微分方程 xy'+y-e^x=0 在初始条件 y(1)=2e 下的特解,并画出解函数的图形.
求解本问题的 Matlab 程序为:
syms x y
y=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x')
ezplot(y)
微分方程的特解为:y=1/x*exp(x)+1/x*exp (1) (Matlab格式),即 y=(e+e^x)/x ,此函数的图形如图 1:
图1 y关于x的函数图象
2. ODE 家族求解器
如果微分方程的解析形式求解不出来, 那么退而求其次的办法是求解数值解, 那么这个时候就需要用 ODE 家族的求解器求解微分方程的数值解啦。
因为没有一种算法可以有效地解决所有的 ODE 问题,为此,MATLAB 提供了多种求解器,对于不同的 ODE 问题,采用不同的 Solver。MATLAB 中常用的微分方程数值解的求解器及特点如下表所示。
要特别提醒的是:ode23、ode45 是极其常用的用来求解非刚性标准形式一阶常微分方程(组)初值问题解的 Matlab 的常用程序,其中:
ode23 采用龙格-库塔2 阶算法,用3 阶公式作误差估计来调节步长,具有低等的精度.
ode45 则采用龙格-库塔4 阶算法,用5 阶公式作误差估计来调节步长,具有中等的精度.
[实例]导弹追踪问题
设位于坐标原点的甲舰向位于 x 轴上点 A(1, 0) 处的乙舰发射导弹,导弹头始终对准乙舰。如果乙舰以最大的速度 v0 (是常数)沿平行于 y 轴的直线行驶,导弹的速度是 5*v0,求导弹运行的曲线方程,以及乙舰行驶多远时,导弹将它击中?
记导弹的速度为 w,乙舰的速率恒为 v0。设时刻 t 乙舰的坐标为 (X(t),Y(t)),导弹的坐标为 (x(t),y(t)) 。当零时刻,(X(0),Y(0))=(1,0),(x(0),y(0))=(0,0),建立微分方程模型:
因乙舰以速度 v0 沿直线 x=1 运动,设 v0=1,w=5,X=1,Y=t,因此导弹运动轨迹的参数方程为:
MATLAB 求解数值解程序如下:
(1) 定义方程的函数形式:
function dy=eq2(t,y)
dy=zeros(2,1);
dy(1)=5*(1-y(1))/sqrt((1-y(1))^2+(t-y(2))^2);
dy(2)=5*(t-y(2))/sqrt((1-y(1))^2+(t-y(2))^2);
(2) 求解微分方程的数值解
t0=0,tf=0.21;
[t,y]=ode45('eq2',[t0 tf],[0 0]);
X=1;Y=0:0.001:0.21;plot(X,Y,'-')
plot(y(:,1),y(:,2),'*'),hold on
x=0:0.01:1; y=-5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24;
plot(x,y,'r')
3.专用求解器
对于复杂的微分方程模型的求解, 可以借助 MATLAB 偏微分方程工具箱中的专用求解器。以下将以一个实例来看看如何借助偏微分方程工具箱来实现一个微分方程的求解与数值仿真。
所研究的对象是一个二阶波的方程:
这个时候要查看一下 MALTAB 中哪个函数能求解相类似的方程, solvepde 可以求解的方程形式为:
可以发现只要通过参数设定就可以将所要求解的方程转化成这种标准形式。
具体求解步骤如下:
(1) 设置参数
c = 1;
a = 0;
f = 0;
m = 1;
(2) 定义波的空间位置
numberOfPDE = 1;
model = createpde(numberOfPDE);
geometryFromEdges(model,@squareg);
pdegplot(model,'EdgeLabels','on');
ylim([-1.1 1.1]);
axis equal
title 'Geometry With Edge Labels Displayed';
xlabel x
ylabel y
(3) 定义微分方程模型的系数和边界条件
specifyCoefficients(model,'m',m,'d',0,'c',c,'a',a,'f',f);
applyBoundaryCondition(model,'dirichlet','Edge',[2,4],'u',0);
applyBoundaryCondition(model,'neumann','Edge',([1 3]),'g',0);
(4) 定义该问题的有限元网格
generateMesh(model);
figure
pdemesh(model);
ylim([-1.1 1.1]);
axis equal
xlabel x
ylabel y
(5) 定义初始条件
u0 = @(location) atan(cos(pi/2*location.x));
ut0 = @(location) 3*sin(pi*location.x).*exp(sin(pi/2*location.y));
setInitialConditions(model,u0,ut0);
(6) 方程的求解
n = 31; % 求解次数
tlist = linspace(0,5,n);
model.SolverOptions.ReportStatistics ='on';
result = solvepde(model,tlist);
u = result.NodalSolution;
(7) 模型的数值仿真
figure
umax = max(max(u));
umin = min(min(u));
for i = 1:n
pdeplot(model,'XYData',u(:,i),'ZData',u(:,i),'ZStyle','continuous',...
'Mesh','off','XYGrid','on','ColorBar','off');
axis([-1 1 -1 1 umin umax]);
caxis([umin umax]);
xlabel x
ylabel y
zlabel u
M(i) = getframe;
end
数学建模专栏 | 第七篇:MATLAB连续模型求解方法相关推荐
- 数学建模专栏 | 第十篇:MATLAB CUMCM真题求解实例一:数据型
本讲针对的题型是数据型的建模问题, 2012 年的 A 题就是一道典型这类问题,接下来将介绍这道题的 MATLAB 求解过程. 1. 问题的提出 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品 ...
- 数学建模专栏 | 第五篇:MATLAB优化模型求解方法(上):标准模型
最优化赛题是数学建模大赛中最常见的问题类型之一.一般说来,凡是寻求最大.最小.最远.最近.最经济.最丰富.最高效.最耗时的目标,都可以划入优化问题的范畴.MATLAB 优化工具箱和全局优化工具箱对多个 ...
- 【数学建模】灰色关联(Matlab代码实现)
目录 1 灰色关联理论 2 算例及Matlab代码实现 2.1 算例1 2.2 算例2 2.3 算例3 2.4 算例4 3 写在最后 1 灰色关联理论 灰色关联分析l是由邓聚龙教授于1982年提 ...
- 数学建模中的ARMA模型和ARIMA模型的使用实例(含代码)
数学建模中的ARMA模型和ARIMA模型的使用实例(含代码) 原文地址:http://blog.csdn.net/qq_34861102/article/details/77659399 对于较少时间 ...
- Python小白的数学建模课-B5. 新冠疫情 SEIR模型
传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. 考虑存在易感者.暴露者.患病者和康复者四类人群,适用于具有潜伏期.治愈后获得终身免疫的传染病. 本 ...
- Python小白的数学建模课-B3. 新冠疫情 SIS模型
传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SIS 模型型将人群分为 S 类和 I 类,考虑患病者可以治愈而变成易感者,但不考虑免疫期. 本文 ...
- Python小白的数学建模课-B2. 新冠疫情 SI模型
传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SI 模型是最简单的传染病模型,适用于只有易感者和患病者两类人群. 我们就从 SI 模型开始吧,从 ...
- 2022年MathorCup数学建模A题大规模指纹图像检索的模型与实现解题全过程文档加程序
2022年第十二届MathorCup高校数学建模 A题 大规模指纹图像检索的模型与实现 原题再现 在生物特征识别领域,指纹作为最具独特性与持久性的生物特征之一,被广泛应用于身份识别. 指纹识别 ...
- Matlab数学建模(七):连续模型
一.学习目标 (1)了解连续模型及解题步骤. (2)掌握用 dsolve 求解常见的微分方程解析解. (3)掌握用 ODE 家族的求解器求解数值解. (4)掌握使用专用的求解器求解. 二.实例演练 ( ...
最新文章
- mysql存储登录密码_当密码存储在选项文件中时,MySQL拒绝登录尝试
- php中静态方法有什么作用,PHP中的静态方法与非静态方法有什么不同吗?
- 工作128:element上传组件时候的钩子--event里面有数据参数
- 新一代云原生监控系统Prometheus--理解数据模型/指标/标签/PromQL/Exporter
- Linux如何产看系统信息
- Python爬虫之起点中文网完本小说
- 寄存器与七种寻址方式
- 用python爬取码市的数据简单分析
- 解锁 Elastic 最新的数据采集模块 - Ingest manager 和 Elastic Agent
- 打包项目出错 Your build settings specify a provisioning profile with the UUI
- 计算机标记的定义,标记网格法
- 红旗linux 安装教程,红旗linux安装教程,红旗linux9
- 极路由——彻底凉了,云插件服务都关闭了,还没root的抓紧了
- Navicat Premium链接MySQL时出现2059错误解决方法
- oracle中的blob类型,clob类型,nclob类型主要区别是什么
- 【云原生系列】第三讲:Knative 之 Serving
- MQ消息队列搭建命令及方法
- java websocket 聊天室实现 与 tomcat监控实现java类
- 如何写好一篇高质量计算机科学论文?
- 计算机组少年宫安全应急预案,拱墅区第十三届中小学生“运河之星”科技节紧急事件应急预案...
热门文章
- 最详细的Excel模块Openpyxl教程(三)-使用公式
- 公众号消息转发到客服
- 2022-2028中国高纯氘气市场现状研究分析与发展前景预测报告
- 日本旅行一些注意事项
- signature=7eaed5a66499b473aab2f11ec0461fe9,Author's reply: To PMID 25293698
- Bioinfomatic
- Launcher: 设置壁纸_源码跟踪
- 【知识】从音频CS4334 DAC转换的电路引发的一些知识
- 到底该不该去初创公司上班?
- SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下)