【数学建模】day05-微分方程建模

很多问题,归结起来是微分方程(组)求解的问题。比如:为什么使用三级火箭发射卫星、阻滞增长人口模型的建立……

MATLAB提供了良好的微分方程求解方案。

一、MATLAB求微分方程的符号解

matlab求常微分方程:

[y1,….yN] = dsolve(eqns,conds,Name,Value);

param:

  eqns:符号微分方程或者符号微分方程组(逗号隔开即可)

  conds:初值条件

return:

  有conds返回符号解,否则返回通解

 

例子:

1. 求解常微分方程通解:

x^2 + y + ( x-2y)*y'= 0;

1 clc,clear
2 syms y(x);
3 
4 dsolve(x^2+y+(x-2*y)*diff(y) == 0)


image

2. 求解常微分方程,初值问题

y'''– y' = x; y(1) = 8,y'(1) = 7,y''(2) = 4

 

1 clc,clear
2  syms y(x)
3  df = diff(y);
4  d2y = diff(y,2);
5  y = dsolve(diff(y,3) - d2y == x,y(1) == 8,df(1) == 7,d2y(2) == 4)
6 
7 t = simplify(y) %化简结果

y =x*((exp(-1)*(19*exp(1) - 14))/2 - 1) + 7*exp(-2)*exp(x) - x^2/2 - x^3/6 + (exp(-1)*(19*exp(1) - 14))/2 - (exp(-1)*(25*exp(1) - 21))/3 - 1
t =(17*x)/2 + 7*exp(x - 2) - 7*x*exp(-1) - x^2/2 - x^3/6 + 1/6

 

3. 常微分方程组

f''+ 3g = sin(x)

g'+ f' = cos(x)

求通解以及在初值条件为f'(2) = 0,f(3) = 3,g(5) =1处的一个特解。

 

clc,clear
 syms f(x) g(x)
 df = diff(f);
 [f1,g1] = dsolve(df + 3*g == sin(x),diff(g) + diff(f) == cos(x));
 f1 = simplify(f1)
 g1 = simplify(g1)
 %特解
[f2,g2] = dsolve(df + 3*g == sin(x),diff(g) + df == cos(x),df(2) == 0,f(3) == 3,g(5) == 1);
 f2 = simplify(f2)
 g2 = simplify(g2)

 

4. 求线性微分方程组

X‘ = AX,初值X(0) = [1 2 1]’;这里X是向量 A是矩阵

其中,A = [2 1 3;0 2 –1;0 0 2];

 

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)

 

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

z =exp(2*t)

5. 其他微分方程组形式、初值、边值问题,用到查阅。

6. 另外注意一点,常微分方程的离散化解法不失为一种很有效的解法(差分、差商解法),这在《数值分析》一课中有讲解。

 

二、人口模型

 

1. Malthus模型

image

image

image

 

 

2. 阻滞增长模型(Logistic模型)

image

image

image

posted @ 2018-07-21 11:05  pigcv  阅读(2691)  评论(0编辑  收藏  举报