对于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
谢谢,抱歉我的英文
答案 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
,它们实际计算出的值是到B
和X
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()
的代码是剩下的唯一(但很容易的)任务。