我有一个矩阵 m*n,我想从中得到 p 阶的所有次要数(子矩阵的行列式)。
我在文档中没有找到任何好的东西,我可以使用我自己编写的函数来完成它,但我更喜欢开箱即用的东西。
我真正需要的是检查何时,在一个符号矩阵中,我的等级下降了,并且当该等级及以上的所有未成年人都为零时,就会发生这种情况。
有什么想法用纯matlab命令来做吗?由于有一个评估排名的功能,它以某种方式获得了未成年人。
我有一个矩阵 m*n,我想从中得到 p 阶的所有次要数(子矩阵的行列式)。
我在文档中没有找到任何好的东西,我可以使用我自己编写的函数来完成它,但我更喜欢开箱即用的东西。
我真正需要的是检查何时,在一个符号矩阵中,我的等级下降了,并且当该等级及以上的所有未成年人都为零时,就会发生这种情况。
有什么想法用纯matlab命令来做吗?由于有一个评估排名的功能,它以某种方式获得了未成年人。
似乎已经有一些很好的答案,但这里是你可以做什么的简单解释:
假设您想知道矩阵的每个i
子j
矩阵的秩M
。
现在我相信获得所有等级的最简单方法是遍历所有行和列并将此结果存储在矩阵R
中。
M = magic(5);
R = NaN(size(M));
for i=1:size(M,1);
for j=1:size(M,2);
R(i,j) = rank(M([1:i-1 i+1:end],[1:j-1 j+1:end]));
end
end
如果您希望所有行列式替换rank
为det
.
这计算子矩阵:
submatrix=@(M,r,c)M([1:r-1,r+1:end],[1:c-1,c+1:end])
您可以使用“arrayfun”和“meshgrid”或两个循环来迭代所有子矩阵。
警告:我没有符号工具箱,但对于常规的 matlab 数组,您可以使用这样的匿名函数计算第 i 个、第 j 个次要:
minor = @(i,j,A)det(A(setdiff([1:end],[i]),setdiff([1:end],[j])))
或者,如果您想要第 i 个、第 j 个辅因子,只需使用:
cofactor = @(i,j,A)(-1)^(i+j)*det(A(setdiff([1:end],[i]),setdiff([1:end],[j])))
但如前所述,我不知道这样的东西是否适用于符号工具箱。如果它不能按原样工作,也许这至少可以为您提供一些关于如何实现符号案例功能的想法。
希望这可以帮助。