• 締切済み

平衡点とは??matlabでのコマンド・・・ 状態方程式?

現在matlabを用いて制御系を設計している者ですが。model predictive control toolboxを用いてモデル予測制御を行おうと努力しているのですが、その例題のM-fileの途中に記述されている [x0,u0,y0,dx0]=trim('model'); [A,B,C,D]=linmod('model',x0,u0); sys=ss(A,B,C,D); という部分がいまいちよくわかりません・・・。 実際に調べた所、非線形を平衡点付近で線形化し、それを状態方程式化している。みたいな感じだと思うんですが、例題のmodelを用いるとうまくまわることはまわるんですが、自分で設計した制御系のmodelを使って先程のコマンドを入力すると 「プロパティ/値の組み合わせは偶数でなければなりません。」 というエラーが起こってしまいます・・・。 自分の調べた所 trim・・・modelというシステムの初期状態x0に最も近い状態安定点 linmod・・・システムの連続空間モデル、または離散時間線形状態空間モデルを演算点のまわりで抽出 というかしこまった表現でしかわかりませんでした。 あのコマンドがいったい何を指しているのか、そして「プロパティ/値の組み合わせは偶数でなければなりません。」とはいったいどういうエラーなのか、もしわかる方がいましたら是非アドバイスお願いします。

みんなの回答

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.4

rensyuu というものが、どういった構造のモデル(?)になっているのかまったく分からないため、何とも答えようがないです。 エラーメッセージだけでは、 (1)Sum3 からデータを出力できていない (2)Transfer Fcn に渡すデータの構造が不正 ぐらいしか分かりません。 とりあえず、 (1)は出力するデータの構造を指定しているけれども、モデルのOutput端子の設計と一致していない (2)は受け取れない構造のデータを渡そうとしている といった感じでしょうか? もし、Sum3 と Transfer Fcn が直接データをやり取りしているなら、そのインターフェースが間違っているのかもしれませんね。

nannzann
質問者

お礼

そうですね。でもその問題はなんとか解決しました☆ いろいろアドバイスありがとうございます!!参考にさせて頂いた部分も多数ありますので非常に感謝しております。またmatlab関連で分からない部分等でてきましたら、質問させて頂くかもしれませんのでそのときはよろしくお願いします。

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.3

関数ss()の仕様を見る限り、sys=ss(A, B, C, D, 'min') という記述はできないように思えます。 'min'を使用するなら、おそらく以下のように記述しなければならないのではないでしょうか。 sys = ss(A, B, C, D); % 状態空間モデルの作成 sys = ss(sys, 'min'); % sys の状態空間の最小実現を計算 関数sim()のエラーメッセージにも引数は2つで記述されていますし。 > Example: MPCobj.Model.Plant = ss(G,'min')

nannzann
質問者

お礼

あ、本当ですね。ありがとうございます!!これで一歩前進しました! プロパティ/値は偶数でなければなりません。というエラーは消え、あとは ??? エラー: ==> sim --> Error in port widths or dimensions. 'rensyuu/Subsystem/inductionmotor/Sum3' の Output 端子 1 は 2 の要素をもちます。この端子は、output の信号で指定された次元 (または方向) を受け入れません。. --> Error in port widths or dimensions. 無効な次元が 'rensyuu/Subsystem/inductionmotor/Transfer Fcn' の input 端子 1 に指定されました。. というエラーだけになりました。これは帰ってくる側の信号と受け入れる側の信号の次元が違うということでしょうか・・?

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

可能性としては、 (1)'min'がプロパティだとすると、その設定値がない (2)'min'は数値情報のことで、sys=ss(A, B, C, D, min)のように使う   min = 最小値(数値) というような感じでしょうか。 ただ、関数ss()は引数を4つまでしか設定できないようなんですが…。 http://www.mathworks.com/access/helpdesk/help/toolbox/mpc/index.html?/access/helpdesk/help/toolbox/mpc/ss.html&http://translate.google.com/translate_n?hl=ja&sl=en&u=http://www.mathworks.com/access/helpdesk/help/toolbox/mpc/ss.html&prev=/search%3Fq%3Dmodel%2Bpredictive%2Bcontrol%2Btoolbox%25E3%2580%2580ss%26hl%3Dja%26lr%3D 現状の情報だけでは良く分からないので、以下の2つについても教えていただけますか? (1)sys=ss(A,B,C,D)と実行したときのエラーメッセージ (2)MATLABのCommandWindowで help ss と実行したときに表示される関数仕様

nannzann
質問者

補足

返信ありがとうございます。sys=ss(A,B,C,D)とやるだけでしたらエラーが出ないのですが、simを行うときにエラーがでてしまいます。。。そのときのエラーメッセージを以下にのせます。 ??? エラー: ==> sim MPC block (mask) 'MPC Controller1'の'InitFcn'コールバックの実行中にエラーが発生しました。 エラー ==> @mpc\private\mpc_estimator の 52 行目 Problems encountered when designing the overall state observer (Kalman filter). Model.Plant is not detectable from measured outputs. If Model.Plant was obtained using the command 'ss', try using 'ss' with option 'min'. Example: MPCobj.Model.Plant=ss(G,'min'). The overall system has unobservable modes in z=1. エラー ==> mrensyuu at 37 sim('rensyuu',Tstop); このエラーメッセージ中のIf Model.Plant was obtained using the command 'ss', try using 'ss' with option 'min'. Example: MPCobj.Model.Plant=ss(G,'min').というところを見て、'min'をつければいいのではないかと考えたのですが・・・ (2)も以下にのせておきます。よろしくおねがいします。 SS 状態空間モデルの作成、またはモデルを状態空間モデルに変換 SYS = SS(A,B,C,D) は、下記の連続状態空間モデルで表される SS オブジェクト SYS を作成します。 dx/dt = Ax(t) + Bu(t) y(t) = Cx(t) + Du(t) 適切な次元の 0 行列 D=0 を設定することができます。 行列 A,B,C,D の いくつかが不確かさをもつ場合、SS は不確かさをもつ状態空間 (USS) モデルを返します (Robust Control Toolbox のみ)。 SYS = SS(A,B,C,D,Ts) は、サンプル時間 Ts をもつ離散時間の状態空間モデルを 作成します (サンプル時間が未決定の場合、Ts=-1 を設定)。 SYS = SS は、空の SS オブジェクトを作成します。 SYS = SS(D) は、静的なゲイン行列 D を作成します。 上記のすべての場合で、様々なモデルプロパティを設定するために、入力の リストに、つぎの組み合わせを続けることができます (詳細は、LTIPROPS と タイプしてください)。 'PropertyName1', PropertyValue1, ... A,B,C,D に対する ND 配列を使用することで状態空間モデルの配列を作成できます。 A,B,C,D の最初の 2 つの次元は、状態数と入出力の数を定義し、残りの次元は配列 サイズを指定します。たとえば、 sys = ss(rand(2,2,3,4),[2;1],[1 1],0) は、SISO 状態空間モデルの 3x4 配列を作成します。SS 配列を作成するために インデックスの割り当てや、STACK を使用することもできます。 sys = ss(zeros(1,1,2)) % SISO モデルの 2x1 配列を作成 sys(:,:,1) = rss(2) % 1 番目のモデルの割り当て sys(:,:,2) = ss(-1) % 2 番目のモデルの割り当て sys = stack(1,sys,rss(5)) % 3 番目のモデルを配列に追加 SYS = SS(SYS) は、任意のクラスのシステム SYS を状態空間に変換します。 すなわち、SYS の状態空間実現を計算します。 SYS = SS(SYS,'min') は、SYS の最小実現を計算します。 参考 ltimodels, ltiprops, dss, delayss, rss, drss, lti/ssdata, tf, zpk, frd. 参照ページはHelp browserにあります doc ss

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

(1)実際に実行したコード (2)エラーの出た箇所 とりあえず、この位は書かれていないと、答えようがない気がします。  まぁ、エラー内容から察するに、linmod()かss()あたりの引数の設定がおかしそうな感じですね。  「プロパティ/値の組み合わせは偶数でなければなりません。」というのは、おそらく関数に渡すプロパティとそれに対する設定値は、一対一の関係でなければならないということだと思います。 例えば、set(handle, 'XData', x, 'YData', y, 'ZData', z)とする場合、プロパティ'XData'、'YData'、'ZData'と値「x」「y」「z」は同数指定する必要があるということではないでしょうか。

nannzann
質問者

補足

アドバイスありがとうございます。そうですね、実際に実行したコードがないと話にならないですよね。以下に書きます。 (1) %% トルク応答特性 MPCの利用 %% % Find equilibrium (平衡点を見つける) [x0,u0,y0,dx0]=trim('rensyuunaibu'); %% % x0 = offset (also used as initial condition); [A,B,C,D]=linmod('rensyuunaibu',x0,u0); sys=ss(A,B,C,D,'min'); %% MPC Controller Setup Ts=0.1; % Sampling time clear Model Model.Plant=sys; % Plant prediction model Model.Nominal.X=x0; % State vector at linearization Model.Nominal.U=u0; % Input vector at linearization Model.Nominal.Y=y0; % Output vector at linearization Model.Nominal.DX=dx0; % State derivative vector at linearization Model.Noise=0; % Output measurement noise model (white noise, zero mean, variance=0.01) p=20; m=3; weights=[]; % use default weights mpc_controller=mpc(Model,Ts,p,m,weights); %% Simulate using Simulink (Nonlinear Model + MPC Controller) Tstop=1.5; %Simulation time s = warning('query'); warning off sim('rensyuu',Tstop); warning(s); %% Simulate using SIM (Linear model + MPC Controller) Tf=round(Tstop/Ts); r=r0*ones(Tf,1); [y1,t1,u1,x1,xmpc1]=sim(mpc_controller,Tf,r); これなんですけど、まず実行させるとsys=ss(A,B,C,D);をsys=ss(A,B,C,D,'min');に変えたらどうですか?的なエラーが起こり、実際に変えて実行してみると「プロパティ/値の組み合わせは偶数でなければなりません。」というエラーが出ました。model以外のところはdemoとほぼ一緒なのでmodelに問題があるとはおもうのですが、実際にどういったエラーなのかは意味不明です・・・。ちなみにエラーの詳細は ??? エラー ==> lti.utFastSet の 10 行目 プロパティ/値 の組み合わせは偶数でなければなりません。 エラー ==> mpcc at 8 sys=ss(A,B,C,D,'min'); です。考えられる可能性としてはなにでしょうか??よろしくおねがいします。

関連するQ&A

  • 線形化 状態方程式

    非線形システムdx/dt=f(x,u), f(x,u)=(2・x1・x2+u ,x1+x2^2)T x=(x1,x2)T テーラー展開一次近似により、平衡点(x',u'), x'=(x1',x2')T に関して局所線形化したX=x-x',U=u-u'に関する状態方程式 dX/dt=AX+BUを求めよ。 上記の問題で平衡点をx0=(-1,1)T u0=2としてその近傍でテーラー展開しようとしたのですが、AとBの計算の仕方がわかりません。 お手数ですが、教えていただけないでしょうか? 似たような問題があるサイトがあれば教えてください

  • 1自由度変位強制振動の状態空間表現

    振動工学や制御工学で良く例題に挙げられるマス・ばね・ダンパ系の1自由度振動系について質問です。 マスをm1、ばねをk1、ダンパをc1と設定し、マスの上下変位をz1とします。 また、基礎の変位をz0とします。 この系に外力が作用せず、強制変位(z0 = sinωtなど)のみ作用するとき、 入力:z0 出力:z1 の状態空間表現 x_dot = A*x + B*u y = C*x + D*u x:状態変数ベクトル u:入力ベクトル y:出力ベクトル を導出したいのですが、z0_dot(変位z0の速度)はどのように取り扱えば良いのでしょうか? 状態変数をどのように置けば良いでしょうか? ウェブ上を探しても、この例題が挙げられているページを見つけることができませんでした。 状態空間表現ではなく、古典制御理論の伝達関数表現なら導出できるのですが…。 よろしくお願いいたします。

  • 線形時変モデル

    卒研で油圧ショベルの自動制御をしているんですが,線形時変モデルを用いて制御系設計をしたいと思ってます.そこで,線形時変モデルを用いた制御系設計のことが勉強できる教科書を探してます.お勧めの教科書があれば,教えて下さい.

  • 反応拡散方程式の定常解について

    反応拡散方程式 dU/dt = f(U,V)+ΔU dV/dt = g(U,V)+ΔV (fとgは非線形な関数でΔは空間1次元のラプラシアン) には、条件が整えば空間的に非一様な定常解(時間変化しない解) が存在します。 このような空間非一様性を満たす定常解 0 = f(U,V)+ΔU 0 = g(U,V)+ΔV をノイマン境界条件のもとで数値的に求めようとして、 ラプラシアン(Δ)を離散化した次の連立方程式 0 = f( U<i>, V<i> ) + [U<i+1>-2U<i>+U<i-1>]/h^2 0 = g( U<i>, V<i> ) + [V<i+1>-2V<i>+V<i-1>]/h^2 (i=0~N) をニュートン法で解いてみました。 結果、 初期値(u(x)とv(x)の形)によってはまぐれで空間非一様な定常解らしき状態に収束することがあるのですが、ほとんどの場合発散してしまうか、一様な解(u(x)=0,v(x)=0)に収束してしまいます。1000回ほどランダムに初期値を変えて試行したところ空間非一様<らしき>解に収束したのはたった数回でした。また、離散格子点を多くとった場合(例えばN=200)には、まったく収束しなくなりました。直感では、初期値さえうまくとれば収束しそうな気がしたのですが、、 質問:  上の反応拡散方程式のような非線形連立偏微分方程式の定常解を、数値的に求める手段というのはあるのでしょうか? アドバイスよろしくお願いします。

  • 偏微分方程式

    ある大学院の過去問なんですが、小問が3つあるんですが、まず1つ目について教えてください。 『次のような u(x, t) に関する偏微分方程式を考える。     ∂u/∂t + u ∂u/∂x = ν ∂^2 u/∂x^2    (*) ここで、νは正の定数である。この時以下の問いに答えよ。 (1) (*)式に ψ(x, t) と φ(x, t) を用いた2段階の変換     i. u = ∂ψ/∂x     ii. ψ = αlogφ を行ない、定数αを適当に選ぶと φ(x, t) に関する線型方程式     ∂φ/∂t = ν ∂^2 φ/∂x^2    (**) が得られることを示せ。また、そのときのαを求めよ。』 と言う問題です。 変換i. ii. を行なってφの偏微分方程式には出来るのですが(合ってるかどうかは別問題) αをどう取っても(**)になりそうにないんです。(ってことは合ってないって事?) やったのは     u = ∂ψ/∂x = (∂/∂x)(αlogφ) = (α/φ)(∂φ/∂x)     ∂u/∂t = (∂/∂t){(α/φ)(∂φ/∂x)} = -(α/φ^2)(∂φ/∂t)(∂φ/∂x) + (α/φ)(∂^2 φ/∂t∂x)     ∂u/∂x = (∂/∂x){(α/φ)(∂φ/∂x)} = -(α/φ^2)(∂φ/∂x)^2 + (α/φ)(∂^2 φ/∂x^2)     u(∂u/∂x) = (α/φ)(∂φ/∂x){-(α/φ^2)(∂φ/∂x)^2 + (α/φ)(∂^2 φ/∂x^2)}         = -(α^2/φ^3)(∂φ/∂x)^3 + (α/φ)^2(∂φ/∂x)(∂^2φ/∂x^2)     ∂^2u/∂x^2 = (∂/∂x){(α/φ)(∂φ/∂x)} = -(2α/φ^2)(∂φ/∂x)^2 + (α/φ)(∂^2φ/∂x^2) までなんですが、これを(*)に代入するとすごい事になってとても(**)にたどり着けそうにないんです。 ここまでで既に間違ってるんでしょうか?それともこの状態でαを適当に選べば(**)が導けるんでしょうか? よろしくお願いします。

  • 線形代数の二次式の集合

    二次式(aベクトル)=a1x^2+a2x+a3・1 についてu1=x^2,u2=x,u3=1とおくと、 (1) a1x^2+a2x+a3・1=0,a1=a2=a3=0より、u1,u2,u3は線形独立である (2)u1,u2,u3の一次結合c1u1+c2u2+c3u3=c1x^2+c2x+c3で任意の二次式を表すことができる。 とありますが、ここで二つ質問があります。まず(1)についてですがなぜ線形独立と言えるのか分かりません。 また、このように二次式の集合Vを線形空間としてとらえて、どのようなことができるのでしょうか?

  • 線形代数の部分空間Wの生成元の定義について

    部分空間W の生成元の定義に補足で ※a1,・・・,akは、線形独立やWの基底である必要はない とあります。 しかし、このあとの例題で、 R^2の線形空間において、W={x=[x1 x2]|2x1-x2=0}(注意:xは列ベクトルです)がR^2の部分空間であることを示し、Wの基底を求めよ。という問題で、結果x=[x1 x2]=[x1 2x1]=x1[1 2](注意:xは列ベクトルです)とのりa1=[1 2](列ベクトル)とおくと、a1 はこれのみで、線形独立であり、かつWの任意の元xはx=ca1と、a1の線形結合で表される。よって{a1}はWの基底である。このとき、Wはa1で生成される空間とよんでもいい。とります。でもこれは※と矛盾しています。どなたか詳しい解説を頂けないでしょうか?

  • 位相空間における集積点

    U(n)={n∈N|n,n+1,n+2,…} O={Φ}∪{U(n)} と与えられています。(N:自然数、Φ:空集合) (N,O):位相空間におけるA={1,3,5,7,9}の集積点を求める問題で、質問があります。 私が解いた結果、集積点は 1,2,3,4,5,6,7,8 だなって思ったんです。(これあってますよね??) で、問題はその後なんですけど、9以上の自然数が集積点でないことを示した方がいいですよね。その場合、 9≦x∈N については、  x∈U(n)となるU(n)は 1≦n≦x だが、  U(i)∩A=Φ (for i≧9, i∈N) したがって9以上の自然数は集積点ではない。 っていう証明で、示せてますか??なんか論理的じゃない気がして…。アドバイスしてもらえませんか。よろしくお願いします。

  • 線形代数の問題が分からないので教えて下さい。

    Uをベクトルv1=(2,1,1)とv2=(-1,2,0)が張る線形部分空間とする。 そのとき、点y=(10,20,2)から最も近いU上の点v0を求めよ。 原点Oとv0は平面U上にあり、O,v0,yでつくる角度は90度である。(直角三角形をつくる)

  • 等周問題で!

    等周問題で,最適制御を使った問題ですが, 最後の結論のところの計算が分からないので教えてください. ■結論は, (注意)dx/dtを x(・)と表記します.     (dx/dt)^2 は,x(・)^2 と表記します. x(・) / {√1+x(・)^2} = A + B*t は,円の弧である (x-x1)^2 + (t-t1)^2 = r^2 を満たすというもので,簡単に証明できると 書いてあります.教えてください. ■問題を解くのに必要ないのかもしれませんが,一応,以下に,等周問題を付記しておきます. 横軸のt軸上に2点(0点とT点)をとり, これらを結ぶ一定の長さのLの曲線とt軸とで取り囲まれる面積を最大にするという古典的な問題です.  ※この問題は,時間Tは指定,状態変数X(T)も指定 の問題です. 評価関数 Max:J=∫[0→T]xdt 制約条件 1)x(・)=u 初期条件x(o)=0 ,終端条件x(T)=0 2)∫[0→T](√1+u^2)dt=L (ただし,Lの長さ>Tの長さ)   この2)の長さの積分制約は,次の状態変数yを導入することで終端条件のある最適問題に帰すことが可能となる.  y(・)=( √1+u^2 )  初期条件y(0)=0,終端条件y(T)=L よって,ハミルトニアンは H=λu + δ( √1+u^2 )+ x である. (λ,σは,ラグランジェ乗数) 必要条件から, -λ(・)=1  ,  -σ(・)=0 したがって,この微分方程式を解くと,λは,時間tに関して線形,σは,定数である. また,最大化の必要条件から 制御変数uでHを微分すると бH/бu=λ+{σu/(√1+u)}=0 これに,制約条件のX(・)=u と λがtの線形,つまり,A+B*t を代入すれば,結論にある式となる.