Matlab:向量矩阵的行列式

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向量。
我该如何实现这个目标?

你需要一个向量化版本的“det”吗? - Andrey Rubshtein
为什么你不能直接计算 det(A) = x.^2 - x.^4 - chaohuang
因为我只是演示一个简单的例子。我需要处理的实际矩阵是4x4的,有很多贝塞尔函数。 - Eddy
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);

谢谢,最终我采用了匿名函数的方法,因为我无法通过其他方式使其正常工作。它一直报错说“输入不足”或类似的错误。 - Eddy

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

这种方法可行吗,还是你想同时考虑每个向量?这种方法将每个“层”视为独立的,但我有一个小小的怀疑,你想得到一个单一的值作为结果。


问题是,如果您将x视为符号,则我确实有一个方阵。我需要弄清楚的是如何以符号方式计算行列式,然后用向量替换x。 - Eddy
这只是我脑海中一个可能的解决方案。已经更新了答案。 - Ben A.
虽然我最终没有使用这个解决方案,但它对我在处理行列式时做的另一件事情很有帮助,所以我会点赞它。 - Eddy
好在我至少能帮上一点忙 =P - Ben A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接