pc-saft状态方程的matlab代码
时间: 2023-07-16 11:14:01 浏览: 358
matlab精度检验代码-PC-SAFT:实现PC-SAFT状态方程的函数,包括缔合,电解质和偶极子项
以下是使用PC-SAFT状态方程在MATLAB中计算液相、气相和相平衡的示例代码:
```matlab
% 定义需要的参数
T = 298.15; % 温度,单位:K
P = 1.01325; % 压力,单位:bar
R = 8.314; % 气体常数,单位:J/(mol*K)
kij = [0 0; 0 0]; % 交互参数,二元混合物取值通常为0
% 定义组分属性
z = [0.5; 0.5]; % 组分摩尔分数
Tc = [647.3; 507.6]; % 临界温度,单位:K
Pc = [220.55; 80.97]; % 临界压力,单位:bar
w = [0.344; 0.561]; % 偏心因子
% 计算物质性质
Mw = [18.01528; 58.07914]; % 分子量,单位:g/mol
Vc = (0.288*R.*Tc)./Pc; % 临界摩尔体积,单位:m^3/mol
Tr = T./Tc; % 归一化温度
% 定义PC-SAFT方程需要的常数
m = 0.480 + 1.574*w - 0.176*w.^2; % 用于计算a和b的常数
a = 0.45724.*(R.*Tc).^2.*(1 + m.*(1 - Tr.^0.5)).^2./Pc; % a常数,单位:Pa*m^6/mol^2
b = 0.07780*R.*Tc./Pc; % b常数,单位:m^3/mol
% 计算物质的a和b值
a_mix = z'*z.*sqrt(a*a').*(1 - kij); % 混合物的a值
b_mix = z'*b; % 混合物的b值
% 定义方程需要的常数
A = a_mix*P./(R.*T).^2;
B = b_mix*P./(R.*T);
% 计算方程的根
coefs = [1, -(1-B), (A-3*B^2-2*B), -(A*B-B^2-B^3)];
roots = roots(coefs);
% 选择实际的根
if imag(roots(1)) == 0 && real(roots(1)) > B
Vg = real(roots(1));
elseif imag(roots(2)) == 0 && real(roots(2)) > B
Vg = real(roots(2));
elseif imag(roots(3)) == 0 && real(roots(3)) > B
Vg = real(roots(3));
else
error('无法计算气相体积');
end
% 计算液相组成和体积
phi_l = b./sum(z.*b);
phi_v = Vg./sum(z.*Vc);
gamma_l = exp((b./b_mix).*(log(phi_l) - log(sum(z.*phi_l))));
gamma_v = exp((Vc./Vg).*(log(phi_v) - log(sum(z.*phi_v))));
x = z.*gamma_l.*phi_l./sum(z.*gamma_l.*phi_l);
y = z.*gamma_v.*phi_v./sum(z.*gamma_v.*phi_v);
Vl = sum(x.*b);
% 输出结果
fprintf('液相组成:\n');
disp(x);
fprintf('气相组成:\n');
disp(y);
fprintf('相平衡计算结果:\n');
fprintf('液相体积为 %.4f m^3/mol,气相体积为 %.4f m^3/mol\n', Vl, Vg);
```
注意:此代码示例仅适用于二元混合物。对于更复杂的混合物,请根据需要进行修改。此外,代码中使用的所有单位都必须保持一致,否则计算结果可能会不正确。
阅读全文