我有一个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向量。
我如何实现这一目标?
答案 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
这样的工作是否有效,或者您是否希望同时考虑每个向量?这种方法将每个“图层”视为自己的图层,但我有一种偷偷摸摸的怀疑,即您希望获得单个值。