【数学建模\MATLAB】掌握用Matlab求解微分方程问题

这篇具有很好参考价值的文章主要介绍了【数学建模\MATLAB】掌握用Matlab求解微分方程问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、求解一阶常微分方程

d y d t = a y 2 \cfrac{dy}{dt}=ay^2 dtdy=ay2

clc,clear 
syms y(t) a %定义符号变量
dsolve(a*y^2-diff(y)==0)

结果

ans =
 
             0
 -1/(C1 + a*t)

2、求解三阶常微分方程

d 3 y d t 3 = b y \cfrac{d^3y}{dt^3}=by dt3d3y=by

clc,clear 
syms y(t) b %定义符号变量
dsolve(diff(y,3)-b*y==0)

结果

ans =
 
C3*exp(b^(1/3)*t) + C1*exp(-t*((3^(1/2)*b^(1/3)*1i)/2 + b^(1/3)/2)) + C2*exp(t*((3^(1/2)*b^(1/3)*1i)/2 - b^(1/3)/2))

3.求解常微分方程

x 2 + y + ( x − 2 y ) y ′ = 0 x^2+y+(x-2y)y\prime=0 x2+y+(x2y)y=0

clc,clear 
syms y(x) %定义符号变量
dsolve(x^2+y+(x-2*y)*diff(y)==0)

结果:

ans =
 
 x/2 + ((4*x^3)/3 + x^2 + C1)^(1/2)/2
 x/2 - ((4*x^3)/3 + x^2 + C1)^(1/2)/2

4. 求解二阶常微分方程

d 2 y d t 2 = a y , 初 始 条 件 为 y ( 0 ) = 5 , y ′ ( 0 ) = 1 \cfrac{d^2y}{dt^2}=ay, \text初始条件为y(0)=5,y\prime(0)=1 dt2d2y=ay,y(0)=5,y(0)=1

clc,clear 
syms y(t) a %定义符号变量
dy = diff(y);
y = dsolve(diff(y,2)==a*y,y(0)==5,dy(0)==1);
y = simplify(y) %化简结果

结果

y =
 
(exp(a^(1/2)*t)*(5*a^(1/2) + 1))/(2*a^(1/2)) + (exp(-a^(1/2)*t)*(5*a^(1/2) - 1))/(2*a^(1/2))

5.求解常微分方程组

{ d y d t = z + 5 t d z d t = − 2 y \left\{\begin{aligned} \cfrac{dy}{dt}&=z+5t \\ \\ \cfrac{dz}{dt}&=-2y \\ \end{aligned}\right. dtdydtdz=z+5t=2y

clc,clear 
syms y(t) z(t) %定义符号变量
dy = diff(y);
dz = diff(z);
[y1,z1] = dsolve(dy==z+5*t,dz==-2*y);
y1 = simplify(y1) %化简结果
z1 = simplify(z1) %化简结果

结果:

y1 =
 
(2^(1/2)*C2*cos(2^(1/2)*t))/2 + (2^(1/2)*C1*sin(2^(1/2)*t))/2 + 5/2
 
 
z1 =
 
C1*cos(2^(1/2)*t) - 5*t - C2*sin(2^(1/2)*t)

6.求解初值为下述常微分方程的解析解和精确解

matlab 一阶方程,数学建模,matlab,线性代数,矩阵

clc,clear 
yx = @(x,y) -2*y+2*x^2+2*x; %定义微分方程右端的匿名函数
[x,y] = ode45(yx,[0,0.5],1)
[x1,y1] = ode23(yx,[0,0.5],1)
plot(x,y,x1,y1)

matlab 一阶方程,数学建模,matlab,线性代数,矩阵

7.应用两个模型分别计算并预测未来五年的工资走势

根据以下提供的某省份年平均工资统计表(单位:元),通过马尔萨斯模型阻滞增长模型构建微分方程,求解并绘制图像,应用两个模型分别计算并预测未来五年的工资走势.
matlab 一阶方程,数学建模,matlab,线性代数,矩阵

x = [1978:1:2010]
y=[566,632,745,755,769,789,985,1110,1313,1428,1782,1920,2150,2292,2601,3149,4338,5145,5809,6271,6854,7656,8772,10007,11374,12567,14332,16614,19228,22844,26404,29638,32074]

7.1 马尔萨斯模型

模型假设:

  • 设x(t)表示t时刻的工资,且x(t)连续可微
  • 工资的增长率r是常数
  • 工资的变化是封闭的,工资的变化只和工作的年限有关,工作年限越长,工资越高。

模型建立和求解:
假设t时刻到 t + Δ t t+\Delta t t+Δt时间内工资的增量为:
{ d x d t = r x , x ( 0 ) = x 0 , \left\{\begin{aligned} \cfrac{dx}{dt}&=rx, \\ \\ x(0)&=x_0, \\ \end{aligned}\right. dtdxx(0)=rx,=x0,
其解为:
x ( t ) = x 0 ∗ e r t x(t)=x_0*e^{rt} x(t)=x0ert

7.2 阻滞增长模型

对增长率r进行修正。如果在工资较少的时候,把r看成常数,工资增长到一定数量的时候,就应该把r看作应该随着工资增加而减少的量,即将增长率r表示成工资x(t)的函数r(x),r(x)是x的减函数。

模型假设:

  • 设r(x)为x的线性函数,r(x)=r-sx(工程师原则,首选线性)
  • 最大工资是: x m x_m xm,即当x= x m x_m xm时,增长率r( x m x_m xm)=0.

模型求解:
由假设1、2, 可得 r ( x ) = r ( 1 − x x m r(x)=r(1-\cfrac{x}{x_m} r(x)=r(1xmx), 则有
{ d x d t = r ( 1 − x x m ) x , x ( t 0 ) = x 0 , \left\{\begin{aligned} \cfrac{dx}{dt}&=r(1-\cfrac{x}{x_m})x, \\ \\ x(t_0)&=x_0, \\ \end{aligned}\right. dtdxx(t0)=r(1xmx)x,=x0,
其解为:
x ( t ) = x m 1 + ( x m x 0 − 1 ) e − r ( t − t 0 ) x(t)=\cfrac{x_m}{1+(\cfrac{x_m}{x_0}-1)e^{-r(t-t_0)}} x(t)=1+(x0xm1)er(tt0)xm

x=[566 632 745 755 769 789 985 1110 ...
    1313 1428 1782 1920 2150 2292 2601 3149 ...
    4338 5145 5809 6271 6854 7656 8772 10007 ...
    11374 12567 14332 16614 19228 22844 26404 29638 ...
    32074]';
t=1978:2010;t=t';
t=t-1977;
near5year= [2011:1:2015]';
near5year=near5year-1977;
%阻滞增长增长模型
beta0 = [566 0.22 12567];
yzuzhi =@(beta,t) beta(3)./(1+(beta(3)./beta(1)-1).*exp(-beta(2)*t));
beta=nlinfit(t,x,yzuzhi,beta0)
xzuzhi=yzuzhi(beta,near5year);
%马尔萨斯增长模型
ymuthus=@(r,t) r(1)*exp(r(2)*t);
r0=[5.7,0.1];
a=nlinfit(t,x,ymuthus,r0)
xmuthus=ymuthus(a,near5year);
subplot(1,2,1);
plot([t;near5year],[x;xmuthus]);
title('马尔萨斯增长模型');
subplot(1,2,2);
plot([t;near5year],[x;xzuzhi]);
title('阻滞增长增长模型');
%预测未来五年
disp(['马尔萨斯增长模型预测未来五年工资是',num2str(xmuthus')]);
disp(['阻滞增长增长模型预测未来五年工资是',num2str(xzuzhi')]);
clear all;clc
x=[566 632 745 755 769 789 985 1110 ...
    1313 1428 1782 1920 2150 2292 2601 3149 ...
    4338 5145 5809 6271 6854 7656 8772 10007 ...
    11374 12567 14332 16614 19228 22844 26404 29638 ...
    32074]';
n = 33;
t = (1:n)';
beta0 = [5.3 0.22 400]; %[x0, r, xm]
[beta, R, J] = nlinfit(t,x,'logisfun',beta0); %非线性拟合
py = beta(3)./(1+(beta(3)./beta(1)-1).*exp(-beta(2)*t)); %预测各年工资
p5 = beta(3)./(1+(beta(3)./beta(1)-1).*exp(-beta(2)*(n:n+5)')); %预测五年后工资
subplot(2,1,1)
plot(1:n, x, '*', 1:n, py,n:n+5,p5,'o'); %对比图
title('阻滞增长增长模型');

xx = x(1:n); 
t=[ones(n,1),(1:n)'];
y=log(xx(1:n));
[b,bint,r,rint,stats] = regress(y,t)
x0 = exp(b(1)) %参数x0
r = b(2)%参数r
py_ = x0*exp(r*(1:n+5)'); %预测数据
subplot(2,1,2)
plot(1:n, xx, 'k+', 1:n+5, py_); %对比图
title('马尔萨斯增长模型');

8.练习(传染病模型)

假设某一种传染病正在流行,现在希望建立适当的数学模型,利用已经掌握的一些数据资料对该传染病进行有效地研究,用于对其传播蔓延进行必要的控制,减少人民生命财产损失。现假设某地区人口分布约为5万人,且有约为5千人已经感染并积极治疗,每个病人每天接触约为5人,且每天治愈率约为150%。考虑如下问题,建立适当的数学模型:

  1. 该传染病不具有免疫性,试估算病情稳定时对应的天数,并绘制出病人与健康者人数随时间变化的分布曲线;
  2. 该传染病具有免疫性,试估算病情稳定时对应的天数,并绘制出病人,健康者与免疫者人数随时间变化的分布曲线.

8.1 传染病无免疫性

病人治愈成为健康人,健康人可以再次被感染(SIS模型)

假设:

  • 总人数N不变,病人和健康人比例分别为:i(t),s(t)
  • 每个病人每天有效接触人数为 λ \lambda λ,且使接触的健康人致病
  • 病人每天治愈的比例为 μ \mu μ

建模:
N [ i ( + Δ t ) − i ( t ) ] = λ s ( t ) N i ( t ) Δ t − μ N i ( t ) Δ t N[i(+\Delta t)-i(t)] = \lambda s(t)Ni(t)\Delta t -\mu Ni(t)\Delta t N[i(+Δt)i(t)]=λs(t)Ni(t)ΔtμNi(t)Δt
得到:
{ d i d t = λ i s − u i i ( 0 ) = i 0 \left\{\begin{aligned} \cfrac{di}{dt}&=\lambda is-ui \\ \\ i(0)&=i_0\\ \end{aligned}\right. dtdii(0)=λisui=i0

clear all;
clc;
xspan = [0 5];
y0 = 0.1;
[x,y] = ode45(@(x,y) 5*y*(1-y)-1.5*y, xspan, y0);
y1 = 1-y(:)
plot(x,y,'r',x,y1,'b')

matlab 一阶方程,数学建模,matlab,线性代数,矩阵
由图可以看出,需要两天病情才能稳定。

8.2 传染病有免疫性

病人治愈后即移除感染系统,称为移出者(SIR模型)

假设:

  • 总人数N不变, 病人、健康人、移出者的比例分别为 i ( t ) , s ( t ) , r ( t ) i(t),s(t),r(t) i(t),s(t),r(t)
  • 病人每天有效接触人数为 λ \lambda λ,治愈的比例为 μ \mu μ,接触数为 σ = λ / μ \sigma = \lambda / \mu σ=λ/μ

建模:
s ( t ) + i ( t ) + r ( t ) = 1 s(t)+i(t)+r(t)=1 s(t)+i(t)+r(t)=1
需要建立 s ( t ) , i ( t ) , r ( t ) 的 两 个 方 程 s(t),i(t),r(t)的两个方程 s(t),i(t),r(t)
N [ i ( t + Δ t ) − i ( t ) ] = λ s ( t ) N i ( t ) Δ t − μ N i ( t ) Δ t N [ s ( t + Δ t ) − s ( t ) ] = − λ s ( t ) N i ( t ) Δ t N[i(t+\Delta t)-i(t)] = \lambda s(t)Ni(t)\Delta t -\mu Ni(t)\Delta t \\ \\ N[s(t+ \Delta t)-s(t)] =-\lambda s(t)Ni(t)\Delta t\\ N[i(t+Δt)i(t)]=λs(t)Ni(t)ΔtμNi(t)ΔtN[s(t+Δt)s(t)]=λs(t)Ni(t)Δt

{ d i d t = λ i s − u i d s d t = − λ s i i ( 0 ) = i 0 , s ( 0 ) = s 0 \left\{\begin{aligned} \cfrac{di}{dt}&=\lambda is-ui\\ \cfrac{ds}{dt}&=-\lambda si \\ i(0)&=i_0,s(0)=s_0\\ \end{aligned}\right. dtdidtdsi(0)=λisui=λsi=i0,s(0)=s0
无法求出s(t),i(t)的解析解,利用matlab求出数值解

function y = infect(t,x)
lamp = 5;
u = 1.5;
y = [lamp*x(1)*x(2)-u*x(1); -lamp*x(1)*x(2)];
end
x0 = [0.9, 0.1]';
[t,x] = ode45('infect', [0,4], x0); 
%调用变步长45级Runge-Kutta-Felhberg法计算
y = 1-x(:,1)-x(:,2)
plot(t,x(:,1),'r', t,x(:,2),'b',t,y,'k');
grid on

matlab 一阶方程,数学建模,matlab,线性代数,矩阵
由图可以看出,大概4天后,传染病趋于稳定。文章来源地址https://www.toymoban.com/news/detail-779897.html


到了这里,关于【数学建模\MATLAB】掌握用Matlab求解微分方程问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab数学建模实验题

    (1)用起泡法对10个数由小到大排序.即将相邻两个数比较,将小的调到前头。 (2)有一个4×5矩阵,编程求出其最大值及其所处的位置. (3)编程求 (4)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹有多高? (

    2024年02月11日
    浏览(54)
  • 数学建模之MATLAB使用

    我们都知道MATLAB里面存在着数值计算和符号计算,但是两者之间到底是怎样的呢? 举一个很简单的例子,我们在高等数学里面的微积分学习时经常求不定积分,也就是原函数,这个过程实际上进行的就是符号运算,我们通过对一些变量字符x等等的运算,最后得出一个表达式

    2024年04月09日
    浏览(56)
  • 数学建模——matlab基本使用

    清除工作区:clear。 清屏:clc。 圆周率表示:pi。 lnx代码化:log(x)。 e^x代码化:exp(x) x代表次数。 sin(x):sin(x);cos(x):cos(x);tan(x):tan(x)  arcsin(x):asin(x);arccos(x):acos(x);arctan(x):atan(x). .*与*的区别:.*代表进行矩阵的数值运算 *代表进行矩阵的运算。(matlab的基本操作对象是矩阵)。

    2024年02月07日
    浏览(44)
  • 数学建模-MATLAB三维作图

    导出图片用无压缩tif会更清晰 帮助文档:doc 函数名 新建实时脚本或右键文件转换为实时脚本 实时编辑器-全部运行-内嵌显示 保存为PDF

    2024年02月15日
    浏览(45)
  • 【数学建模】 MATLAB 蚁群算法

    MATLAB–基于蚁群算法的机器人最短路径规划 * https://blog.csdn.net/woai210shiyanshi/article/details/104712540?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168853912916800215023827%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257Drequest_id=168853912916800215023827biz_id=0utm_medium=distribute.pc_search_result.

    2024年02月15日
    浏览(48)
  • Matlab数学建模-典型相关分析

    典型相关分析是研究两个多变量(向量)之间之间的线性相关关系,能够揭示出两组变量之间的内在联系。 CCA(典型相关分析) 在一元统计分析中,用相关系数来衡量两个随机变量的线性相关关系,用复相关系数研究一个随机变量与多个随机变量的线性相关关系。然而,这些方

    2024年02月10日
    浏览(58)
  • 数学建模学习(7):Matlab绘图

    最基础的二维图形绘制方法:plot -plot命令自动打开一个图形窗口Figure; 用直线连接相邻两数据点来绘制图形 -根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标轴,可把x,  y 轴用对数坐标表示 -如果已经存在一个图形窗口,plot命

    2024年02月14日
    浏览(40)
  • (一)MATLAB数学建模——数据拟合

    目录 一、简介 二、多项式拟合 (一)指令介绍 (二)代码

    2024年02月11日
    浏览(60)
  • 数学建模| 线性规划(Matlab)

    线性规划:约束条件和目标函数都是线性的。简单点说,所有的决策变量在目标函数和约束条件中都是一次方。 Matlab函数: 参数解释: func 表示目标函数。 A 表示不等式约束条件系数矩阵,b 表示不等式约束条件常数矩阵。 Aeq 表示等式约束条件系数矩阵,beq 表示等式约束条

    2024年02月07日
    浏览(44)
  • 数学建模 | MATLAB数据建模方法--机器学习方法

    近年来,全国赛的题目中,多多少少都有些数据,而且数据量总体来说呈不断增加的趋势, 这是由于在科研界和工业界已积累了比较丰富的数据,伴随大数据概念的兴起及机器学习技术的发展, 这些数据需要转化成更有意义的知识或模型。 所以在建模比赛中, 只要数据量还

    2024年02月03日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包