创建一个包含矩阵*矩阵乘积

时间:2019-12-05 06:15:25

标签: matlab matrix vector row

我正在尝试创建一个最小二乘问题,该问题变为Cx = d的最小范数问题。我正在尝试为需要

的C创建一个数组
C = [A^(N-1)*B, A^(N-2)*B, A^(N-3)*B, B]

最后一个元素只是B。

A2x2矩阵,而B2x1矩阵。

这是我到目前为止尝试过的。

C = zeros(2,length(N));
for i = 1:N
    h = A.^(i-1)
    l = h.*B
    C(2,i) = l

end

2 个答案:

答案 0 :(得分:0)

您的方法很好,代码中只有一个小缺陷:.

A = rand(2);
B = rand(2,1);
N = 3

C = zeros(2,length(N));
for i = 1:N
    h = A.^(i-1); % power every element of the matrix
    l = h*B; % This is a matrix-vector multiplication
    C(2,i) = l;
end

请注意,.*和简单的*之间是有区别的。第一个将明智地应用乘法元素-在您的情况下[A(:,1)*B, A(:,2)*B];第二个执行matrix-vector multiplication

现在还不清楚您是否确实打算使用A.^(i-1),或者是否要计算写成A^(i-1) ...的矩阵逆矩阵。

答案 1 :(得分:0)

从数学上讲,由于矩阵C可以重写为以下格式

C = [A^(N-1),A^(N-2),...,A,I_2]*Kronecker(I_N,B)

其中I_N是维度N的单位矩阵。

然后,我们可以使用下面的代码来实现

# create a cell array to represent [A^(N-1),A^(N-2),...,A,I], in the k^th each cell of As is the matrix A^(N-k)
As = arrayfun(@(k) A^k, [N-1:-1:0], 'UniformOutput',false);

# concatenate all matrix in As by [As{:}], then also use kron(eye(numel(As)),B) to construct the block diagonal matrix consisting of B
C = [As{:}]*kron(eye(numel(As)),B);

带有虚拟数据的示例

A = [1,2;3,4];
B = (1,0.5);
N = 4;

如此

C =

   64.0000   12.0000    2.0000    1.0000
  140.0000   26.0000    5.0000    0.5000