【问题标题】:How to add values to already existing ones in a matrix using 'for' loop in MATLAB?如何使用 MATLAB 中的“for”循环将值添加到矩阵中已有的值?
【发布时间】:2013-04-14 15:22:03
【问题描述】:

我在 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' 中已经存在的值,但我希望将它们加在一起。我怎样才能做到这一点??谢谢。

【问题讨论】:

    标签: matlab for-loop matrix


    【解决方案1】:

    您可以在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));
    

    【讨论】:

    • 这给出了:???尝试访问 KG(1,1);索引超出范围,因为 size(KG)=[0,0]。 ==> syscalc 在 106 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 数组在遍历这些循环之前没有被初始化。您应该放置 KG = zeros(YSIZE, XSIZE); 而不是 KG = []。在 Matlab 中不要在循环中增长矩阵是一个很好的做法,而是明确指定它们的维度。如果您事先不知道矩阵的确切尺寸,请指定更大的值,然后在使用 KG = KG(YMIN:YMAX, YMIN:YMAX); 完成计算后修剪矩阵。
    • 我在循环之前用零填充了它,它工作了,非常感谢。我知道这一定是一件非常简单的事情
    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多