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

30 次查看(过去 30 天)
% 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