假设我有向量z1 z2 z3 z4
和b
以及矩阵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
。你能帮我完成我的任务吗?
答案 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