

参考までに、これはリカッチの代数方程式で求めた最適レギュレータのゲインについてのお話です。ですが、周辺知識がなくとも問題ありませんので読み進めていただければ幸いです。私はsympyでやりましたが、ライブラリはなんでもいいです。

求めたいのは、変数Jです。Jを求めるには、以下の二式の行列の連立方程式を解いて、成分を明らかにする必要があります。

[code]

    K-inv_R@tB@P＝０
    A@tP+P@A-P@B@inv_R@tB@P+Q＝０
    
[/code]

それぞれの数値と行列の定義は以下です。Pは上の二つの式をつなぐ媒介変数のような行列です。

[code]

    import sympy as sp 
    
    #数値
    M=8.15*10**(-1) 
    g=9.81 
    r=2.80*10**(-2) 
    H=19.6*10**(-2) 
    J=sp.symbols("J")
    η=9.41*10**(-2) 
    ζ=9.10*10**(-2) 
    ε=130 
    
    
    p1,p2,p3,p4=sp.symbols("p1 p2 p3 p4")
    
    p12,p23,p34=sp.symbols("p12 p23 p34")
    
    p13,p24=sp.symbols("p13 p24")
    
    p14=sp.symbols("p14")
    
    #行列の定義
    
    
    
    
    P=sp.Matrix([[p1,p12,p13,p14],[p12,p2,p23,p24],[p13,p23,p3,p34],[p14,p24,p34,p4]])
    
    
    
    
    
    A=sp.Matrix([[0,0,1,0],[0,0,0,1],[M*g*H/(M*H**2+J),0,-η/(M*H**2+J),M*r*H/(ζ*(M*H**2+J))],[0,0,0,-1/ζ]])
    
    B=sp.Matrix([[0],[0],[-ε*(M*r*H/(ζ*(M*H**2+J)))],[ε/ζ]])
    
    Q = sp.Matrix([[85.,0,0,0],[0,5.0,0,0],[0,0,0.1,0],[0,0,0,0.1]])
    
    R = sp.Matrix([[40.0]])
    
    K= sp.Matrix([[15.0028,0.3536,1.7082,0.1875]])
    
    inv_R=R.inv()
    tB=B.transpose()
    tP=P.transpose()
    
[/code]

そして、二つの式を以下で解こうとしましたが、答えが []としか表示されません。どうすれば良いでしょうか？

[code]

    sp.solve([K-inv_R@tB@P,A@tP+P@A-P@B@inv_R@tB@P+Q],[J])
    
[/code]


CC BY-SA 4.0
2020-12-05T02:02:05.313
72413
2020-12-05T02:02:05.313
41334
question
python3 numpy sympy matlab
行列の連立方程式を解きたいです。