如何在一组系统生成的矩阵上有效地应用函数?

时间:2016-05-15 22:25:26

标签: matlab function matrix

A11A12A21A22都是n*m矩阵,我想形成B11B12B21B22的方式:

enter image description here

这可以使用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

但它真的很慢。那么,我怎样才能加快这种行动呢?

非主题问题:这个问题是否有代数解决方案?

1 个答案:

答案 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矩阵逆公式的矢量化版本。