在Matlab中存储迭代结果

时间:2012-09-02 07:08:27

标签: matlab

我有以下代码。

for k=40:10:80
 T(k)=273.15+k;
 z=[0.2 0.2 0.2 0.4];
 W_PR=0.245;
 C=4;
 omega=[0.344 0.467 0.578 0.789];
 Tc=[600 700 500 570];
 Pc=[50 70 58 76];
    for c=1:C

        x_PR(1,c)=z(c)/(1+W_PR*(K_PR(c)-1));
        x_PR(2,c)=K_PR(c)*x_PR(1,c);
    end
    for c=1:C
        kappa_PR=0.37464+1.54226.*omega(c)-0.26992.*omega(c).^2;
        alpha_PR=(1+kappa_PR.*(1-sqrt(T(k)./Tc(c)))).^2;
        a_PR(c,c)=0.45724.*R.^2.*Tc(c).^2./Pc(c).*alpha_PR;
        b_PR(c)=0.07780*R.*Tc(c)./Pc(c);
    end
    for c=2:C
        for n=1:(c-1)
            a_PR(c,n)=sqrt(a_PR(c,c).*a_PR(n,n));
            a_PR(n,c)=a_PR(c,n);
        end
    end
    for c=1:C
        A_PR(c,c)=a_PR(c,c).*P./(R.*T(k)).^2;
        B_PR(c)=b_PR(c).*P./(R.*T(k));
    end
    for c=1:C
        Z(c,c)=A_PR(c,c)./5;
        V(c)=B_PR(c).*6;
    end
end

每次运行代码时,我都想在每个T(k)处得到Z和V的结果。 虽然我希望它运行循环并为所有T(k)给出Z和V的结果,但它只给出了一个T值的结果。

2 个答案:

答案 0 :(得分:2)

您可能希望在主循环之外定义一些参数,至少要预先分配存储。

Z_store = ones(C,C,5); % if you want to use a 3d matrix

V_store = ones(5,C);

新功能:

function [Z_store V_store] = SO_test1()
  z=[0.2 0.2 0.2 0.4];
  W_PR=0.245;
  C=4;
  omega=[0.344 0.467 0.578 0.789];
  Tc=[600 700 500 570];
  Pc=[50 70 58 76];
  R=8.314; 
  P=20; 
  Z_store = ones(C,C,5);
  V_store = ones(5,C);
  K_PR=[1.546e-2, 0.456, 1.432e2, 14.32];
  iter = 0;

for k=40:10:80

T(k)=273.15+k;
  for c=1:C
      x_PR(1,c)=z(c)/(1+W_PR*(K_PR(c)-1));
      x_PR(2,c)=K_PR(c)*x_PR(1,c);  
      kappa_PR=0.37464+1.54226.*omega(c)-0.26992.*omega(c).^2;
      alpha_PR=(1+kappa_PR.*(1-sqrt(T(k)./Tc(c)))).^2;
      a_PR(c,c)=0.45724.*R.^2.*Tc(c).^2./Pc(c).*alpha_PR;
      b_PR(c)=0.07780*R.*Tc(c)./Pc(c);
  end
  for c=2:C
      for n=1:(c-1)
          a_PR(c,n)=sqrt(a_PR(c,c).*a_PR(n,n));
          a_PR(n,c)=a_PR(c,n);
      end
  end
  for c=1:C
      A_PR(c,c)=a_PR(c,c).*P./(R.*T(k)).^2;
      B_PR(c)=b_PR(c).*P./(R.*T(k)); 
      Z(c,c)=A_PR(c,c)./5;
      V(c)=B_PR(c).*6;
  end
  iter = iter + 1;
  Z_store(:,:,iter) = Z;
  V_store(iter,:) = V;

  end
end

答案 1 :(得分:0)

您的结果矩阵VZ需要具有更高的维度。从您的代码中,您只能以

的形式将值分配给Z.
 Z(c,c) = value

和V形式

 V(c) = value

因此看起来你的Z只是一个2d矩阵,只有定义了对角线条目,V只是一个简单的向量。您的迭代将遍历循环变量k的所有值,但每次覆盖这些数组中的当前值。考虑将V设为二维数组,将Z设为三维数组,以便它们能够将结果存储在迭代变量k的每个值的单独索引中