用Scilab求解隐式ODE系统

问题描述 投票:1回答:2

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

当谈到Scilab时,我就是菜鸟,到目前为止,我只使用不超过两个自由度的线性系统(使用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

谢谢,抱歉我的英语

math physics modeling ode scilab
2个回答
0
投票

通常的形式意味着用一阶导数写作。因此,您将与第二衍生术语的关系写成:

x'' = d(x')/fx

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


0
投票

虽然这个ODE系统是隐式的,你可以用经典的(显式的)ODE求解器通过这样重构它来解决它:如果你定义X=(x,L,theta,q)^T,那么你的系统可以用矩阵代数重新表示为A(X,X') * X" = B(X,X')。请注意,该系统的第一个订单是

d/dt(X,X') = ( X', A(X,X')^(-1)*B(X,X') )

假设您已经定义了两个Scilab函数AB,它们实际上计算了它们的值w.r.t.对Xand X'的价值观

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

那么8个ODE系统的右侧,因为它可以给予Scilab的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()B()的代码是唯一剩下的(但非常简单)任务。

© www.soinside.com 2019 - 2024. All rights reserved.