1

s ドメインの連立方程式を解こうとしています。したがって、この連立方程式を行列形式で設定します。

a=[.4*s+s+5 -5; -5 .5*s+5]  
c=[3/s; 3/(2*s)]  
(1/s)*a*b=c

s が未定義であるというエラーが表示されます。b を s で解くにはどうすればよいですか?

4

2 に答える 2

5

Matlab は (自然に) シンボリック計算を行いません --- これはコードが行おうとしていることです。Matlab の変数は、具体的な数値、配列、または構造体などである必要があります。任意の数値の単なるプレースホルダーにすることはできません。

(ただし、Matlab のシンボリック コンピューティング ツールボックスを使用している場合を除きます。Maple や Mathematica などの環境でシンボリック コンピューティングを行うことを好むため、これは実際には使用していません。Wolfram Alpha Web サイトで問題を解決することもできます)。

しかし、s の特定の値を選択すると、必要なものを簡単に計算できます。

s = 5;
a=[.4*s+s+5 -5; -5 .5*s+5];
c=[3/s; 3/(2*s)];
b = s*(a\c);

線形反転を行うためにバックスラッシュ演算子を使用した場所。

あなたは今それを持っているはずです

(1/s)*a*b-c

ゼロベクトルです。

編集:シンボリックツールボックスを調べました。これはあなたが望むもののように見えます(ただし、シンボリックツールボックスを動作させるには、ライセンスを取得してインストールする必要があります):

syms s;
a=[.4*s+s+5 -5; -5 .5*s+5];
c=[3/s; 3/(2*s)];
b = simple(s*(a\c))
于 2012-02-14T17:55:47.593 に答える
1

記号演算子を使用して計算を実行するコードは次のとおりです。

syms s;                           %This defines 's' as a symbolic token
a=[.4*s+s+5 -5; -5 .5*s+5];       %a and c inherit the symbolic properties from s
c=[3/s; 3/(2*s)];                 
result = solve('(1/s)*a*b=c','b') %Solve is the general symbolic toolbox algebraic solver.

これにより、

result =
(c*s)/a

一般的に言えば、Matlab は数値ツールボックスとして最高のパフォーマンスを発揮します。したがって、アプリケーションによっては、Ian Hincks が別の回答で示したような別のアプローチを使用します。しかし、状況によっては象徴的な解決策が必要になることもあります。

于 2012-02-14T19:31:58.837 に答える