在MATLAB中用ode45求解状态空间(二阶方程)

时间:2013-11-12 02:28:12

标签: matlab math signal-processing ode

我正在尝试自学如何使用MATLAB来解决状态空间系统,我有一个看似非常简单的系统,但迄今为止一直无法为新手找到任何体面的直接例子

我想简单介绍一下如何将系统转换为MATLAB,设置哪些变量,以及如何解决约50(?)秒(从t = 0到50或任何值)。

我想使用ode45,因为它是使用Runge-Kutta变体的四阶方法。

这是二阶方程式:

θ''+0.03|θ'|θ'+4pi^2*sinθ=0

状态空间:

x_1'=x_2

x_2'=-4pi^2*sin(x_1)-0.03|x_2|x_2

x_1 = θ, x_2 = θ'

θ(0)=pi/9 rad, θ'(0)=0, h(step)=1

1 个答案:

答案 0 :(得分:2)

您需要一个导数函数函数,在给定系统的当前状态和当前时间的情况下,返回所有状态变量的导数。通常,此函数的格式为

function xDash=derivative(t,x)

和xDash是具有每个元素的导数的向量,x是状态变量的向量。如果你的变量被称为x_1x_2等,那么将x_1放在x(1)等等是个好主意。那么你需要一个公式来计算每个状态变量的导数就其他状态变量而言,例如,您可以xDash_1=x_1-x_2,并将其编码为xDash(1)=x(1)-x(2)。希望能够解决问题。

对于您的示例,衍生函数看起来像

function xDash=derivative(t,x)
    xDash=zeros(2,1);
    xDash(1)=x(2);
    xDash(2)=-4*pi^2*sin(x(1))-0.03*abs(x(2))*x(2);
end

您将使用

解决系统问题
[T,X]=ode45(@derivative,0:50,[pi/9 0]);

这给出了t=0,1,2,...,50的输出。