如何使用MATLAB中的“for”循环在矩阵中添加已存在的值?

时间:2013-04-21 18:56:25

标签: matlab for-loop matrix

我在MATLAB中编写了一段代码,基本上将矩阵'Ke'(8x8,只是常量)的值分配给矩阵'KG',最初用零填充。应赋予值的行和列的数量由数组nEN给出,该数组在另一个循环中变化,但总是由4个数字组成。

KG=[];
 for t=1:Nw
    for i=1:Nh
    eN=Am(t:t+1,i:i+1)
    nEN=reshape(eN',1,[])
      for i1=1:4
         for i2=1:4
         KG((2*(nEN(i1))-1),(2*(nEN(i2))-1))=Ke(((2*i1)-1),((2*i2)-1));
         KG((2*(nEN(i1))-1),(2*(nEN(i2))))=Ke((2*i1-1),(2*i2));
         KG((2*(nEN(i1))),(2*(nEN(i2))-1))=Ke((2*i1),(2*i2-1));
         KG((2*(nEN(i1))),(2*(nEN(i2))))=Ke((2*i1),(2*i2));
         end
      end
    end
 end 
 KG

有时nEN可以具有与前一次迭代中获得的值相同的值,因此我的循环会重写已经存在于'KG'中的值,但我希望将它们添加到一起。我怎样才能做到这一点??感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码累积KG中的值

KG((2*(nEN(i1))-1),(2*(nEN(i2))-1)) = KG((2*(nEN(i1))-1),(2*(nEN(i2))-1)) + Ke(((2*i1)-1),((2*i2)-1));
KG((2*(nEN(i1))-1),(2*(nEN(i2)))) = KG((2*(nEN(i1))-1),(2*(nEN(i2)))) + Ke((2*i1-1),(2*i2));
KG((2*(nEN(i1))),(2*(nEN(i2))-1)) = KG((2*(nEN(i1))),(2*(nEN(i2))-1)) + Ke((2*i1),(2*i2-1));
KG((2*(nEN(i1))),(2*(nEN(i2)))) = KG((2*(nEN(i1))),(2*(nEN(i2)))) + Ke((2*i1),(2*i2));