I have a problem with my code
1 回表示 (過去 30 日間)
古いコメントを表示
I need help. The code doesn't show me the results.
% Datos iniciales
L = 25; % Longitud de la tubería (m)
D1 = 0.03; % Diámetro de la tubería 1 (m)
D2 = 0.05; % Diámetro de la tubería 2 (m)
g = 9.81; % Aceleración debida a la gravedad (m/s^2)
za = 0; % Altura inicial (m)
zb = 7; % Altura final (m)
alpha_a = 1; % Factor alpha para la tubería 1
alpha_b = 1; % Factor alpha para la tubería 2
% Rango de valores para f1 y f2
f1_guess = 0.02; % Valor inicial para f1
f2_guess = 0.02; % Valor inicial para f2
tolerance = 1e-4; % Tolerancia más estricta para la convergencia
% Inicializar el valor de Q
Q = 0.01; % Valor inicial para el caudal (puedes ajustar este valor)
% Bucle para encontrar Q
while true
% Cálculo de velocidades y Reynolds
V1 = Q / (pi * D1^2 / 4);
V2 = Q / (pi * D2^2 / 4);
Re1 = (1000 * 0.03 * V1) / 1e-3;
Re2 = (1000 * 0.05 * V2) / 1e-3;
% Resuelve para f1 y f2 utilizando la ecuación simplificada de Colebrook-White
f1 = solve_friction_factor(Re1);
f2 = solve_friction_factor(Re2);
% Cálculo de pérdidas de carga
hL1 = f1 * (L * V1^2) / (D1 * 2 * g);
hL2 = f2 * (L * V2^2) / (D2 * 2 * g);
% Cálculo de la altura de la bomba
hBomba = (zb - za) + hL1 + hL2;
% Comprueba la convergencia
if abs(hBomba - 7) < tolerance
break;
end
% Ajusta el caudal Q en función del error
Q = Q + (7 - hBomba); % Puedes ajustar esta línea según la convergencia
end
% El valor de Q calculado es el caudal deseado
fprintf('El caudal Q es: %.6f m^3/s\n', Q);
% Función para resolver el coeficiente de fricción (f) simplificado de Colebrook-White
% function f = solve_friction_factor(Re)
% Esta función calcula el coeficiente de fricción (f) en función del número de Reynolds (Re)
% Valor inicial de f
f_guess = 0.02; % Puedes ajustar este valor según tus estimaciones iniciales
% Tolerancia para la convergencia
tolerance = 1e-4;
% Bucle para encontrar f utilizando la ecuación simplificada de Colebrook-White
while true
% Cálculo de la función y su derivada
func_value = -2 * log10(2.51 / (Re * sqrt(f_guess)));
func_derivative = -1 / (f_guess * log(10) * sqrt(f_guess) * Re);
% Calcula la corrección delta_f usando el método de Newton-Raphson
delta_f = -func_value / func_derivative;
% Actualiza el valor de f
f_guess = f_guess + delta_f;
% Comprueba la convergencia
if abs(delta_f) < tolerance
break;
end
end
disp f
% El valor de f calculado es el coeficiente de fricción deseado
f = f_guess;
disp(f2_guess)
0 件のコメント
回答 (1 件)
Les Beckham
2023 年 9 月 8 日
移動済み: Image Analyst
2023 年 9 月 8 日
You have the following important line in your code commented out (the definition of the solve_friction_factor() function). Uncomment that and add an end to close out that function.
% function f = solve_friction_factor(Re)
After that, if you step through the code, it will become obvious that there is something wrong with your calculations. You will find that delta_f quickly blows up to Inf, which never is less than 1e-4, so you get stuck in an infinite loop.
You need to double check your equations.
Also, when you post code, please format it as code (select it and press the left hand button in the CODE section of the toolstrip).
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!