Erro ao usar matlab.internal.math.interp1 Os pontos de amostra devem ser exclusivos.
2 views (last 30 days)
Show older comments
% Constantes de Antoine para clorofórmio e tetracloreto de carbono (A, B, C)
A_chloroform = 6.95464;
B_chloroform = 1170.875;
C_chloroform = 226.232;
A_CCl4 = 6.87987;
B_CCl4 = 1205.67;
C_CCl4 = 223.170;
% Função para cálculo da pressão de vapor em mmHg
Pvap = @(A, B, C, T) exp(A - (B / (T + C)));
% Condições iniciais
P_total = 760; % Pressão total em mmHg (1 atm)
% Frações molares do clorofórmio na fase líquida
x_chloroform = 0:0.01:1;
x_CCl4 = 1 - x_chloroform;
% Pré-alocação de variáveis
TPB = zeros(size(x_chloroform));
y_chloroform = zeros(size(x_chloroform));
y_CCl4 = zeros(size(x_chloroform));
% Loop para calcular TPB para cada fração de clorofórmio na fase líquida
for i = 1:length(x_chloroform)
% Função de equilíbrio para o método de Newton-Raphson
equilibrio = @(T) Pvap(A_chloroform, B_chloroform, C_chloroform, T) * x_chloroform(i) + ...
Pvap(A_CCl4, B_CCl4, C_CCl4, T) * x_CCl4(i) - P_total;
% Estimativa inicial para T em Kelvin
T_inicial = 300; % Aproximadamente 27 °C
% Resolvendo a temperatura do ponto de bolha (TPB)
TPB(i) = fzero(equilibrio, T_inicial);
% Cálculo da composição na fase vapor
P_chloroform = Pvap(A_chloroform, B_chloroform, C_chloroform, TPB(i));
P_CCl4 = Pvap(A_CCl4, B_CCl4, C_CCl4, TPB(i));
y_chloroform(i) = (P_chloroform * x_chloroform(i)) / P_total;
y_CCl4(i) = (P_CCl4 * x_CCl4(i)) / P_total;
end
% Gráficos
% (a) Gráfico da TPB em função da fração molar de clorofórmio na fase líquida
figure;
plot(x_chloroform, TPB, '-b', 'LineWidth', 1.5);
xlabel('Fração Molar de Clorofórmio na Fase Líquida');
ylabel('Temperatura do Ponto de Bolha (K)');
title('TPB vs Fração Molar de Clorofórmio');
grid on;
% (b) Gráfico da composição da fase vapor em função da fração molar de clorofórmio na fase líquida
figure;
plot(x_chloroform, y_chloroform, '-r', 'LineWidth', 1.5);
xlabel('Fração Molar de Clorofórmio na Fase Líquida');
ylabel('Fração Molar de Clorofórmio na Fase Vapor');
title('Composição da Fase Vapor vs Fração Molar de Clorofórmio na Fase Líquida');
grid on;
% (c) Tabela com valores de TPB, y_cloroformio e y_CCl4 para frações de 25%, 50% e 75%
x_values = [0.25, 0.5, 0.75];
TPB_values = interp1(x_chloroform, TPB, x_values);
y_chloroform_values = interp1(x_chloroform, y_chloroform, x_values);
y_CCl4_values = 1 - y_chloroform_values;
table_data = table(x_values', TPB_values', y_chloroform_values', y_CCl4_values', ...
'VariableNames', {'x_clorof', 'TPB_K', 'y_clorof', 'y_CCl4'});
disp('Tabela de valores para frações específicas de clorofórmio:');
disp(table_data);
% (d) Encontrar a fração de clorofórmio na fase líquida para y_cloroformio = 0.5
target_y_cloroform = 0.5;
x_target = interp1(y_chloroform, x_chloroform, target_y_cloroform);
TPB_target = interp1(x_chloroform, TPB, x_target);
fprintf('Para y_cloroformio = 0.5, a fração de clorofórmio na fase líquida é %.4f e a TPB é %.2f K\n', ...
x_target, TPB_target);
alguem pode me ajudar com esse erro?
1 Comment
Answers (1)
Alan Stevens
on 31 Oct 2024
Well, this gets it working, but you need to check your function equilibrio as it doesn't cross zero until T is between 3400 and 3500, i.e. nowhere near 300 (and I suspect you don't want negative temperatures!).
% Constantes de Antoine para clorofórmio e tetracloreto de carbono (A, B, C)
A_chloroform = 6.95464;
B_chloroform = 1170.875;
C_chloroform = 226.232;
A_CCl4 = 6.87987;
B_CCl4 = 1205.67;
C_CCl4 = 223.170;
% Função para cálculo da pressão de vapor em mmHg
Pvap = @(A, B, C, T) exp(A - (B ./ (T + C)));
% Condições iniciais
P_total = 760; % Pressão total em mmHg (1 atm)
% Frações molares do clorofórmio na fase líquida
x_chloroform = 0:0.01:0.99; %%%%%%%%%% You don't want this to go all the way to 1 or interpolate doesn't work
x_CCl4 = 1 - x_chloroform;
% Pré-alocação de variáveis
TPB = zeros(size(x_chloroform));
y_chloroform = zeros(size(x_chloroform));
y_CCl4 = zeros(size(x_chloroform));
% Loop para calcular TPB para cada fração de clorofórmio na fase líquida
for i = 1:length(x_chloroform)
% Função de equilíbrio para o método de Newton-Raphson
equilibrio = @(T) Pvap(A_chloroform, B_chloroform, C_chloroform, T) * x_chloroform(i) + ...
Pvap(A_CCl4, B_CCl4, C_CCl4, T) * x_CCl4(i) - P_total;
% Estimativa inicial para T em Kelvin
T_inicial = 300; % Aproximadamente 27 °C
% Resolvendo a temperatura do ponto de bolha (TPB)
TPB(i) = fzero(equilibrio, T_inicial);
% Cálculo da composição na fase vapor
P_chloroform = Pvap(A_chloroform, B_chloroform, C_chloroform, TPB(i));
P_CCl4 = Pvap(A_CCl4, B_CCl4, C_CCl4, TPB(i));
y_chloroform(i) = (P_chloroform * x_chloroform(i)) / P_total;
y_CCl4(i) = (P_CCl4 * x_CCl4(i)) / P_total;
end
% Gráficos
% (a) Gráfico da TPB em função da fração molar de clorofórmio na fase líquida
figure;
plot(x_chloroform, TPB, '-b', 'LineWidth', 1.5);
xlabel('Fração Molar de Clorofórmio na Fase Líquida');
ylabel('Temperatura do Ponto de Bolha (K)');
title('TPB vs Fração Molar de Clorofórmio');
grid on;
% (b) Gráfico da composição da fase vapor em função da fração molar de clorofórmio na fase líquida
figure;
plot(x_chloroform, y_chloroform, '-r', 'LineWidth', 1.5);
xlabel('Fração Molar de Clorofórmio na Fase Líquida');
ylabel('Fração Molar de Clorofórmio na Fase Vapor');
title('Composição da Fase Vapor vs Fração Molar de Clorofórmio na Fase Líquida');
grid on;
% (c) Tabela com valores de TPB, y_cloroformio e y_CCl4 para frações de 25%, 50% e 75%
x_values = [0.25, 0.5, 0.75];
TPB_values = interp1(x_chloroform, TPB, x_values);
y_chloroform_values = interp1(x_chloroform, y_chloroform, x_values);
y_CCl4_values = 1 - y_chloroform_values;
table_data = table(x_values', TPB_values', y_chloroform_values', y_CCl4_values', ...
'VariableNames', {'x_clorof', 'TPB_K', 'y_clorof', 'y_CCl4'});
disp('Tabela de valores para frações específicas de clorofórmio:');
disp(table_data);
% (d) Encontrar a fração de clorofórmio na fase líquida para y_cloroformio = 0.5
target_y_cloroform = 0.5;
x_target = interp1(y_chloroform, x_chloroform, target_y_cloroform);
TPB_target = interp1(x_chloroform, TPB, x_target);
fprintf('Para y_cloroformio = 0.5, a fração de clorofórmio na fase líquida é %.4f e a TPB é %.2f K\n', ...
x_target, TPB_target);
0 Comments
See Also
Categories
Find more on Symbolic Math Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!