2016-07-23 28 views
0

odeintを使って状態空間形式で動的システムをシミュレートしようとしています。 私のA行列は12 * 12で、B行列は12 * 4(行* cols)なので、私の初期状態ベクトルは12 * 1です。私は状態ベクトルを定義すると考えることができPython odeint-初期条件y0は1次元でなければならない

Traceback (most recent call last): 
    File "sim.py", line 17, in <module> 
    state = odeint(aircraft, state0, t) 
    File "/home/aluminium/anaconda2/lib/python2.7/site-packages/scipy/integrate/odepack.py", line 215, in odeint 
    ixpr, mxstep, mxhnil, mxordn, mxords) 
ValueError: Initial condition y0 must be one-dimensional. 

唯一の方法は、列ベクトルとしてあり、このエラーを取得しています

import numpy as np 
from scipy.integrate import odeint 

tmp = np.loadtxt("system.txt", skiprows =2) 

A=np.matrix(tmp)[0:12,0:12] 
B=np.matrix(tmp)[0:12,12:] 

control = np.matrix([[0.0],[0.0],[-0.6310],[0.0]]) 

def aircraft(state, t): 
    return A*state + B*control 

state0 = np.array([[6.809827628],[0.439572153],[0.0],[0.0],[0.0],[0.0],[0.0],[0.0],[0.0],[0.0],[0.0],[0.0]]) 
t = np.arange(0.0, 10.0, 0.1) 

state = odeint(aircraft, state0, t) 

を次のように

私のコードです。 この問題を解決するために初期状態ベクトルを定義する方法を教えてください。

ありがとうございます。

答えて

0

Iveは答えを得て、将来同じ問題を抱える誰かが恩恵を受けるという希望でここを共有すると考えました。

odeintは、関数を呼び出すための1d配列と関数からの1d配列の戻りを期待しているようです。

私はそれに応じて変数を再構成しました。ここにコードがあります。

def aircraft(state, t): 
    xdot= A*state.reshape(12,1) + B*control 
    return np.squeeze(np.asarray(xdot)) 

state0 = np.array([6.809827628,0.439572153,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]) 

乾杯

関連する問題