我是新来的Matlab,这可能看起来很容易。
我有两个矩阵:
a = [1 1 1; 2 2 2 ; 3 3 3 ; 4 4 4 ; 5 5 5];
b = [4 4 4; 3 2 4 ; 1 5 7 ; 4 3 8 ; 2 4 7];
我想要计算由一行1( 3*3矩阵)相加的两个矩阵每一行的行列式,并将所有的行列式放在另一个数组中。例如,第一个行列式(d(1)
)将来自此矩阵:
1 1 1
4 4 4
1 1 1
第二个(d(2)
)将来自这个矩阵:
2 2 2
3 2 4
1 1 1
等等..。
当我尝试这个:
m = size(a,1);
ons = ones(m,3);
d = det([a(:,:) ; b(:,:) ; ons(:,:)]);
我知道这个错误:
使用det时出错 矩阵必须是正方形的。
在不使用循环的情况下,如何一次计算所有的行列式?
发布于 2019-10-09 15:33:42
根据@Andras的建议,我根据wiki页面尝试了行列式
根据@beaker的建议,这是可行的:
d = (a(:, 1) .* b(:, 2) - a(:, 2) .* b(:, 1)) - (a(:, 1) .* b(:, 3) - a(:, 3) .* b(:, 1)) + (a(:, 2) .* b(:, 3) - a(:, 3) .* b(:, 2))
这些是较慢的备选方案:
d = arrayfun(@(x)det([a(x,:);b(x,:);ones(1,3)]),1:length(a));
d = bsxfun(@times, a(:,1), b(:,2))+ bsxfun(@times, a(:,2), b(:,3)) +...
bsxfun(@times, a(:,3), b(:,1))- bsxfun(@times, a(:,3), b(:,2)) -...
bsxfun(@times, a(:,2), b(:,1))- bsxfun(@times, a(:,1), b(:,3));
https://stackoverflow.com/questions/58294880
复制相似问题