1

我正在尝试自学如何使用 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
4

1 回答 1

2

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

function xDash=derivative(t,x)

xDash 是每个元素的导数x向量,是状态变量的向量。如果您的变量被调用等x_1x_2那么输入 等是一个好主意x_1x(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

于 2013-11-12T03:03:09.753 回答