当谈到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
谢谢,抱歉我的英语
通常的形式意味着用一阶导数写作。因此,您将与第二衍生术语的关系写成:
x'' = d(x')/fx
将这些替换为您所拥有的等式。在适当的初始条件下,您将最终得到8个同时解决的ODE而不是4个。
虽然这个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函数A
和B
,它们实际上计算了它们的值w.r.t.对X
and 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()
的代码是唯一剩下的(但非常简单)任务。