Matlab:向量矩阵的行列式

时间:2012-07-19 15:38:30

标签: matlab matrix determinants

我有一个2x2矩阵,每个元素都是1x5向量。像这样的东西:

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

现在我想找到决定因素,但这种情况发生了

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

现在我可以看到为什么会发生这种情况,MATLAB将A视为双倍的2x10矩阵。我希望能够将x视为元素,而不是矢量。我想要的是det(A) = x^2 - x^4,然后将B = det(A)作为1x5向量。

我如何实现这一目标?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

数学上,Determinant仅为方阵定义。因此,除非你能提供方阵,否则你将无法使用行列式。

注意我知道维基百科不是最终的所有资源。我只是提供它,因为我不能轻易地从我的大学微积分书中提供打印件。

更新:可能的解决方案?

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

这样的工作是否有效,或者您是否希望同时考虑每个向量?这种方法将每个“图层”视为自己的图层,但我有一种偷偷摸摸的怀疑,即您希望获得单个值。