3

私は2x2の行列を持っており、その各要素は1x5のベクトルです。このようなもの:

x = 1:5;
A = [ x  x.^2; x.^2 x];

今、私は行列式を見つけたいのですが、これは起こります

B = det(A);
Error using det
Matrix must be square.

これで、なぜこれが発生するのかがわかります。MATLABは、Aをdoubleの2x10行列と見なします。xをベクトルではなく要素として扱えるようにしたい。私が欲しいのはdet(A) = x^2 - x^4、それからB = det(A)1x5ベクトルとして取得することです。

どうすればこれを達成できますか?

4

2 に答える 2

3

Matlabには象徴的な機能がありますが、それは素晴らしいものではありません。代わりに、あなたは本当にあなたの操作をベクトル化したいのです。ARRAYFUNこれはループで実行することも、ジョブに使用することもできます。おそらくARRAYFUNあなたの問題はもっと簡単だろうと思われます。

ARRAYFUNアプローチ:

x = 1:5;
detFunc = @(x) det([ x x^2 ; x^2 x ]);

xDet = arrayfun(detFunc, x)

生成するもの:

>> xDet = arrayfun(detFunc, x)
xDet =
     0   -12   -72  -240  -600

4x4の場合のように、より複雑な行列式の場合は、実際の関数用に別のMファイルを作成し(上記のような無名関数ではなく)、ARRAYFUN関数ハンドルを使用して渡します。

xDet = arrayfun(@mFileFunc, x);
于 2012-07-19T17:00:09.577 に答える
1

数学的には、行列式は正方行列に対してのみ定義されますしたがって、正方行列を提供できない限り、行列式を使用することはできません。

ウィキペディアがすべてのリソースではないことを私は知っていることに注意してください。大学の微積分の本からの印刷物を簡単に提供することができないので、私は単にそれを提供しています。

更新:可能な解決策?

x = zeros(2,2,5);
x(1,1,:) = 1:5;
x(1,2,:) = 5:-1:1;
x(2,1,:) = 5:-1:1;
x(2,2,:) = 1:5;

for(n=1:5)
    B(n) = det(x(:,:,n));
end

そのようなものは機能しますか、それとも各ベクトルを同時に説明しようとしていますか?このメソッドは、各「レイヤー」をそれ自体として扱いますが、結果として単一の値を取得したいという卑劣な疑いがあります。

于 2012-07-19T15:44:42.147 に答える