美赛(matlab自学)之微分方程建模

人口模型

malthus模型

在这里插入图片描述
在这里插入图片描述

美国人口的预报模型

在这里插入图片描述

建模与求解

在这里插入图片描述

参数估计

(1)非线性最小二乘估计

clc, clear
a = textread('data4.txt'); %把原始数据保存在纯文本文件data4 .txt中
x=a([2:2:6],:)';%提出人口数据
x = nonzeros(x);%去掉后面的0,并变成列向量
t =[1790:10 :2000]';
t0 =t(1); x0 =x(1);
fun=@ (cs,td)cs(1)./1 +(cs(1)/x0 -1) *exp( -cs(2) * (td-t0)));%cs(1) =xm,cs(2) =r
cs = lsqcurvefit( fun, rand(2,1) ,t(2:end) ,x(2 :end) , zeros(2,1))
xhat = fun(cs,[t;2010])%预测已知年代和2010年的人口

(2)线性最小二乘法

clc, clear
a = textread( 'data4.txt');%把原始数据保存在纯文本文件data4.txt中
x=a([2:2:6],:)'; x = nonzeros(x);
t =[1790:10 :2000]';
a=[ones(21,1),-x(2:end)];
b=diff(x) ./x(2 :end) /10;
cs =a\b;
r =cs(1), xm=r/cs(2)

matlab求微分方程

在这里插入图片描述

微分方程通解

在这里插入图片描述

 syms y(x)
dsolve(x^2+y+(x-2*y)*diff(y)==0)

运行结果:
在这里插入图片描述

微分方程的初边值问题

在这里插入图片描述
在这里插入图片描述

求解微分方程组

求解方程组:

在这里插入图片描述

clc, clear
syms f(x) g(x)%定义符号变量
df =diff(f);%定义f的一阶导数,用于初值或边值条件的赋值
[ f1,g1] =dsolve(diff(f,2) +3 *g= =sin(x),diff(g) +df= =cos(x))%求通解
f1 =simplify(f1), g1 =simplify(g1)%对符号解进行化简
[f2 ,g2] =dsolve(diff(f,2) +3 *g= =sin(x),diff(g) +df= =cos(x),df(2)= =0,f(3) = =3,g(5) = =1)
f2 =simplify(f2), g2 =simplify(g2)%对符号解进行化简
求解线性微分方程组

齐次线性微分方程组
在这里插入图片描述


clc,clear
syms x(t) y(t) z(t)
X=[x;y;z];
A=[2 1 3;0 2 -1;0 0 2];
B=[1 2 1]';
[x,y,z]=dsolve(diff(X)==A*X,X(0)==B)

在这里插入图片描述
非齐次线性微分方程组
在这里插入图片描述

clc,clear
syms x(t) y(t) z(t) %定义符号变量
X=[x;y;z]; 
A=[1,0,0;2,1,-2;3,2,1];B=[0;0;exp(t) *cos(2*t)];
X0=[0;1;1];%初值条件
X =dsolve(diff(X)==A*X +B,X(0)==X0)%求符号解
X=simplify([X.x;X.y;X.z])%显示解的各个分量
pretty(x)%分数线居中的显示方式

在这里插入图片描述

发布了20 篇原创文章 · 获赞 0 · 访问量 3869

猜你喜欢

转载自blog.csdn.net/weixin_44544406/article/details/104174641
今日推荐