A11
,A12
,A21
和A22
都是n*m
矩阵,我想形成B11
,B12
,B21
和B22
的方式:
这可以使用for循环来完成:
function [ B11, B12, B21, B22 ] = pinvmat( A11, A12, A21, A22 )
[n m] = size(A11);
B11 = zeros(n, m);
B12 = B11; B21 = B11; B22 = B11;
for i = 1:n
for j = 1:m
A = double([A11(i, j), A12(i, j); A21(i, j), A22(i, j)]);
B = pinv(A);
B11(i, j) = B(1, 1);
B12(i, j) = B(1, 2);
B21(i, j) = B(2, 1);
B22(i, j) = B(2, 2);
end
end
end
但它真的很慢。那么,我怎样才能加快这种行动呢?
非主题问题:这个问题是否有代数解决方案?
答案 0 :(得分:0)
如果您假设每个由(i,j)
元素组成的2x2矩阵是可逆的,您可以按如下方式轻松计算:
n = 4; m = 5;
A11 = randn(n,m);
A12 = randn(n,m);
A21 = randn(n,m);
A22 = randn(n,m);
det_ = A11.*A22 - A12.*A21;
B11 = A22 ./ det_;
B22 = A11 ./ det_;
B12 = -A12 ./ det_;
B21 = -A21 ./ det_;
这基本上只是2x2矩阵逆公式的矢量化版本。