1

私はMATLABでこの形式の関数を持っています.

C=S*e^(L*t)*inv(S)*C_0

どこで私の

     S=[-2 -3;3 -2] 
     L=[0.5 0; 0 1.5]
     C_0=[1; 1]

この関数を時間に関してプロットする必要があります。出力 C は 2 行 1 列の行列です。

私が行ったことは、 b=expm(L) を使用して e^L を個別に計算し、関数に mpower(b,t) を挿入しました。したがって、スクリプトの結果の関数は次のようになります

  b=expm(L);
  C=S*mpower(b,t)*inv(S)*C_0;

では、この wrt 時間をどのようにプロットすればよいでしょうか。時間ベクトルを定義してから使用しようとしましたが、明らかに行列の次元が一致しないというエラー メッセージが表示されます。誰かが私に提案をしてもらえますか?

4

1 に答える 1

0

おそらくこれはベクトル化された方法で行うことができますが、速度や簡潔なコードを気にしないのであれば、forループを書いてみませんか?

ts = 1 : 100;
Cs = zeros(2, length(ts) );

S = [-2 -3;3 -2];
L = [0.5 0; 0 1.5];
C_0 = [1; 1];

for ii = 1 : length(ts)
  b = expm(L);
  Cs(:,ii) = S*mpower(b,ts(ii))*inv(S)*C_0;
end

ts時間値をCs含み、C各時間の値を含みます。

于 2013-09-19T09:52:14.460 に答える