【问题标题】:Calculating a cumulative sum with for loops使用 for 循环计算累积和
【发布时间】:2019-07-08 21:56:24
【问题描述】:

我正在尝试对 27 层模型字段中的变量求和。大多数变量适用于每一层,但对于其中一个变量,我正在衡量高度的变化,因此从给定层的总高度中减去前一层的“顶部高度”。

基本上,我只是不确定如何使用 for 循环在任何时候表示累积总和。

我目前正在尝试,根据我的代码,使用两个 for 循环来计算累积和并得到错误。

"Attempted to access flheight(299,162,0,12); index must be a positive integer or logical." 

我知道这是因为 "flheight(299,162,0,12)" 不存在,因为第三维度没有 "layer = 0"。

no2molcm2 = 0;
dh = 0;
patm = 0;
no2ppm = 0;
for n=0:26
    for i=1:27
        T = Temp(299,162,i,12); % K 
        dh = (flheight(299,162,i,12)*100) -flheight(299,162,n,12)*100;
        patm = sum(Pres(299,162,i,12))*(1/101325); %atm
        R = 82.06; % cm3*atm/(k*mol)
        av = 6.022140857747*(10^23); % 1/mol
        no2ppm =  sum(no2(299,162,i,12));
        no2molcm2 = cumsum(((no2ppm*av*patm)/(R*T))*dh);
    end
end

我的问题是我到底如何告诉 matlab,当它看到这个输入(或错误输出)时,将它设置为零?

【问题讨论】:

    标签: matlab for-loop math sum cumsum


    【解决方案1】:

    因此,根据评论,我意识到我应该采取简单的方法并手动指定第一层,然后将其余层相加。这是修复它的代码:

    latco = 1;
    lonco = 200;
    layer1 = (no2(latco,lonco,1,12)*av*(Pres(latco,lonco,1,12)* 
       (1/101325)))/(R*Temp(latco,lonco,1,12)*h1);
            for n=1:26
            for i=2:27
                    T = Temp(latco,lonco,i,12); % K 
                    dh1 = flheight(latco,lonco,i,12)*100;
                    dh2 = flheight(latco,lonco,n,12)*100;
                    dh = dh1 - dh2;
                    patm = sum(Pres(latco,lonco,i,12))*(1/101325); %atm
                    no2ppm =  no2(latco,lonco,i,12);
                    no2molcm2_26 = sum(((no2ppm*av*patm)/(R*T))*dh);
                end
            end
    
    no2final = layer1 + no2molcm2_26
    

    【讨论】:

      【解决方案2】:

      使用 try-catch 结构可能是最简单、最直接的快速解决方案。

      try
          "something that can go wrong"
      catch ME
          "what to do if it didn't work"
      end
      

      请注意,如果您知道错误的原因,最佳做法是检查原因是否适用。即if(i==0) (do what you must)。否则,会简单地抑制意外错误情况。

      【讨论】:

      • 有点像拿大炮向蚊子开火。有效,但有点矫枉过正。
      猜你喜欢
      • 2023-01-18
      • 2013-12-02
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      相关资源
      最近更新 更多