Erro ao usar matlab.int​ernal.math​.interp1 Os pontos de amostra devem ser exclusivos.

조회 수: 30 (최근 30일)
Caio Caio
Caio Caio 2024년 10월 31일 12:01
이동: Torsten 2024년 10월 31일 13:45
% 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:');
Tabela de valores para frações específicas de clorofórmio:
disp(table_data);
x_clorof TPB_K y_clorof y_CCl4 ________ _______ ___________ ______ 0.25 -223.17 2.9381e-167 1 0.5 -223.17 5.8763e-167 1 0.75 -223.17 8.8144e-167 1
% (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);
Error using matlab.internal.math.interp1
Sample points must be unique.

Error in interp1 (line 188)
VqLite = matlab.internal.math.interp1(X,V,method,method,Xqcol);
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개)

Alan Stevens
Alan Stevens 2024년 10월 31일 12:46
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:');
Tabela de valores para frações específicas de clorofórmio:
disp(table_data);
x_clorof TPB_K y_clorof y_CCl4 ________ _______ ___________ ______ 0.25 -223.17 2.9381e-167 1 0.5 -223.17 5.8763e-167 1 0.75 -223.17 8.8144e-167 1
% (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);
Para y_cloroformio = 0.5, a fração de clorofórmio na fase líquida é NaN e a TPB é NaN K

카테고리

Help CenterFile Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by