2

我有下面的代码。

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 值的结果。

4

2 回答 2

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
于 2012-09-02T09:01:07.197 回答
0

您的结果矩阵需要更高的维度VZ从您的代码中,您只需将值分配给 Z 形式

 Z(c,c) = value

和 V 的形式

 V(c) = value

因此,您的 Z 似乎只是一个仅定义对角线条目的二维矩阵,而 V 只是一个简单的向量。您的迭代运行循环变量的所有值,k但每次您覆盖这些数组中的当前值。考虑制作V一个 2D 数组和Z一个 3D 数组,以便它们能够将结果存储在迭代变量的每个值的单独索引处k

于 2012-09-02T11:03:23.590 回答