简单的递归关系

时间:2017-10-26 13:11:55

标签: matlab for-loop

假设我有向量z1 z2 z3 z4b以及矩阵D1 D2 D3 D4

我想构建:

b1 = D2*z2 + D3*z3 +D4*z4 -b

b2 = D1*z1 + D3*z3 +D4*z4 -b

b3 = D1*z1 + D2*z2 +D4*z4 -b

b4 = D1*z1 + D2*z2 +D3*z3 -b

我计划将我的z向量和D矩阵存储在单元格中,并通过for循环提取它们以创建b。 e.g。

for i = 1:3

  b(i) = D{i+1}*z{i+1} + D{i}*z{i};

end

当然它肯定会失败,因为它在每个D{i}*z{i}步骤都涉及i。你能帮我完成我的任务吗?

1 个答案:

答案 0 :(得分:2)

你可以这样做(没有递归,但任何成对产品仍然只计算一次)。

pairs = zeros(size(D{1},1), 4);
for ii=4:-1:1,
    pairs(:,ii) = D{ii}*z{ii};
end

一旦你拥有所有对的产品,你就可以得到总和

all_sum = sum(pairs, 2) - b_vec; % D1*z1 + D2*z2 + D3*z3 +D4*z4 -b

要获得正确的b_i,您只需从总和中减去 pairs(:,ii)

for ii=4:-1:1
    b{ii} = all_sum - pairs{ii};
end