使用for循环计算累计和

时间:2019-02-14 19:27:38

标签: matlab for-loop math sum cumsum

我试图得出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当看到输入(或错误输出)时将其设置为零?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用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)。否则,将简单地抑制意外的错误情况。