用MATLAB计算ODE

时间:2013-05-14 11:43:45

标签: matlab differential-equations ode

微分方程:

α'(T)= S(β-βα+α-Qα^ 2)

β'(T)=(S ^ -1)( - β-αβ+γ)

γ'(T)= W(α-γ)

初始值

α(0)= 30.00

β(0)= 1.000

γ(0)= 30.00

计算

我想在使用值s = 1时从t_0 = 0到t = 10解决问题, q = 1且w = 0.1610

我不知道如何为ODE编写函数,非常感谢帮助!

1 个答案:

答案 0 :(得分:3)

我通常不习惯解决别人的家庭作业,但今天是我的幸运日。

所以,你有一个耦合常微分方程组:

α'(t)= s(β-α(​​β+ 1)-qα²)

β'(t)=( - β-αβ+γ)/ s

γ'(t)= w(α-γ)

你要解决

y = [α(t)β(t)γ(t)]

0 <&lt; t&lt; 10,s = 1,q = 1,w = 0.1610。在matlab中做到这一点的方法是定义一个计算导数的函数([α'(t)β'(t)γ'(t)]),然后在一个ODE求解器中抛出它({{1}是一个很好的第一个赌注):

ode45

这将输出

s = 1;
q = 1; 
w = 0.1610;

% Define y(t) = [α(t) β(t) γ(t)] = [y(1) y(2) y(3)]:

deriv = @(t,y) [...
    s * (y(2) - y(1)*(y(2)+1) - q*y(1)^2)   % α'(t)
    (-y(2) - y(1)*y(2) + y(3))/s            % β'(t)
    w * (y(1)-y(3))                         % γ'(t)
];

% initial value
y0 = [30 1 10];

% time span to integrate over
tspan = [0 10];

% solve ODE numerically
[t, y] = ode45(deriv, tspan, y0)

您可以这样绘制所有这些:

y =
   30.0000    1.0000   10.0000
   28.5635    0.9689   10.0049   % numerical solutions at times t
   27.2558    0.9413   10.0094
   26.0603    0.9166   10.0136
   ...        ...      ...
   = α(t)     = β(t)   = γ(t)

t =
         0
    0.0016
    0.0031   % corresponding times
    0.0047
    ...

导致这个数字:

ODE solution