Matlab:向量矩阵的行列式

Matlab:向量矩阵的行列式,matlab,matrix,determinants,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向量 我如何做到这一点 从数学上讲,a仅

我有一个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向量

我如何做到这一点

从数学上讲,a仅定义为一个方阵。所以除非你能提供一个平方矩阵,否则你不能使用行列式

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

更新:可能的解决方案

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

你想这样做,还是想同时考虑每个向量?这种方法将每个“层”都视为自己的层,但我有一种隐秘的怀疑,即您希望得到一个单独的值作为结果。

虽然Matlab有符号工具,但它们并不伟大。相反,您确实希望将操作矢量化。这可以在循环中完成,也可以用于作业。这听起来像是
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);

你想要“det”的矢量化版本吗?为什么你不能直接计算
det(a)=x.^2-x.^4
?因为我刚才演示了一个简单的例子。我需要处理的实际矩阵是4x4,有很多贝塞尔函数。事实是,如果你象征性地对待x,那么我有一个正方形矩阵。我需要弄清楚的是,如何用符号计算行列式,然后用向量代替x。在我的头顶上抛一抛,作为一个可能的解。用它更新了答案。虽然我最终没有使用此解决方案,但它对我使用行列式所做的其他事情很有帮助,因此我将对其进行投票。很高兴我至少能帮上一点忙=PThanks,我最终使用了匿名函数方法,因为我无法让它以其他方式工作。不断地说“输入不足”之类的错误。