Code covered by the BSD License  

Highlights from
Boiling point for ideal liquids

from Boiling point for ideal liquids by Jakub Kopac
Finds boiling point for ideal liquids using analytical Newton method

boiling_point (t0,x,AC,P)
function BoilingPoint = boiling_point (t0,x,AC,P)
% Finds boiling point for ideal liquids
%
% t0 - starting temperature
% x  - molar fractions
% AC - constants of Antoine equations
%       form:     N = number of compounds
%         [A1 B1 C1
%          A2 B2 C2
%          .  .  .
%          AN BN CN]
%
% P  - pressure

BoilingPointTolerance = 1e-6;

x = x(:);

if sum(x)~=1
    error('sum(x)~=1. function: boiling_point')
end

Ni   = length(x);   %number of compounds
p0   = zeros(1,Ni); %prealocation
t1   = t0;
iter = 0;     %counting iterations
MaxIter = 50; %maximum number of iterations

for i=1:Ni
    p0(i) = 10^(AC(i,1)-AC(i,2)/(AC(i,3)+t1));
end

criteria  = abs( P - p0*x );

while criteria > BoilingPointTolerance

    iter = iter +1;
    if iter == MaxIter
        error('MaxIter reached. function: boiling_point')
    end

    F = P - p0*x;

    %dFdt
    dFdt_i = zeros(1,Ni);
    for i=1:1:Ni
        dFdt_i(i) = x(i)*log(10)*AC(i,2)/((AC(i,3)+t1)^2)*(10^(AC(i,1)-AC(i,2)/(AC(i,3)+t1)));
    end
    dFdt = -sum(dFdt_i);

    t2 = t1 - F/dFdt;
    t1 = t2;

    p0 = zeros(1,Ni);
    for i=1:1:Ni
        p0(i)=10^(AC(i,1)-AC(i,2)/(AC(i,3)+t1));
    end

    criteria = abs(P-p0*x);
end

BoilingPoint = t1;

Contact us at files@mathworks.com