用Scilab求解隐式ODE系统

时间:2015-11-15 21:53:16

标签: math physics modeling ode scilab

我正在为高架起重机建模并获得以下等式: enter image description here

对于Scilab而言我是noob,到目前为止,我只使用不超过两个自由度的线性系统(使用ODE),这是一个简单的系统,我可以很容易地转换为am矩阵并使用ODE进行集成

但是这个系统特别是我不知道如何模拟它,不是因为sin和cos函数,而是因为我不知道如何将它放在状态空间矩阵中。

我已经找了几个教程(下面列出的),但我不明白其中任何一个,有人可以告诉我我是怎么做的,或者至少指出我可以学到它吗?

http://www.openeering.com/sites/default/files/Nonlinear_Systems_Scilab.pdf http://www.math.univ-metz.fr/~sallet/ODE_Scilab.pdf

谢谢,抱歉我的英文

2 个答案:

答案 0 :(得分:0)

通常的形式意味着用一阶导数写作。因此,您将建立关系,其中第二衍生术语将被写为:

x'' = d(x')/fx

将这些替换为您所拥有的等式。在具有适当的初始条件的情况下,您将最终得到8个同时解决的ODE而不是4个。

答案 1 :(得分:0)

尽管此ODE系统是隐式的,但您可以使用传统的(显式)ODE求解器通过以下方式对其进行重新求解:如果定义X=(x,L,theta,q)^T,则可以使用矩阵代数将其重新编写为{{1} }。请注意,该系统的一阶订单为

A(X,X') * X" = B(X,X')

现在假设您定义了两个Scilab函数d/dt(X,X') = ( X', A(X,X')^(-1)*B(X,X') ) A,它们实际计算出的值是到BX

的值
X'

然后,可以将8个ODE的系统的右侧编码为Scilab的function out = A(X,Xprime) x=X(1) L=X(2) theta=X(3) qa=X(4) xd=XPrime(1) Ld=XPrime(2) thetad=XPrime(3) qa=XPrime(4); ... end function out = B(X,Xprime) ... end 功能

ode

根据给定的公式编写function dstate_dt = rhs(t,state) X = state(1:4); Xprime = state(5:8); out = [ Xprime A(X,Xprime) \ B(X,Xprime)] end A()的代码是剩下的唯一(但很容易的)任务。