PRJECT

INTER
1 Download
Updated 28 Oct 2025

View License

import numpy as np
import matplotlib.pyplot as plt
# Datos proporcionados
m_h = 0.8 # kg/s, caudal másico de aceite
cp_h = 2.0 * 1000 # J/kg·K, capacidad calorífica del aceite
T_h_i = 150 # °C, temperatura de entrada del aceite
m_c = 1.5 # kg/s, caudal másico de agua
cp_c = 4.18 * 1000 # J/kg·K, capacidad calorífica del agua
T_c_i = 30 # °C, temperatura de entrada del agua
U = 600 # W/m²·K, coeficiente global de transferencia de calor
A_s = 5.0 # m², área de transferencia de calor
print("ANÁLISIS DE INTERCAMBIADOR DE CALOR DE CONTRAFLUJO")
print("=" * 50)
# Cálculo de capacidades térmicas
C_h = m_h * cp_h # W/K
C_c = m_c * cp_c # W/K
print(f"Capacidad térmica del aceite (C_h): {C_h:.0f} W/K")
print(f"Capacidad térmica del agua (C_c): {C_c:.0f} W/K")
# Identificar C_min y C_max
C_min = min(C_h, C_c)
C_max = max(C_h, C_c)
cr = C_min / C_max # relación de capacidades
print(f"\nCapacidad mínima (C_min): {C_min:.0f} W/K")
print(f"Capacidad máxima (C_max): {C_max:.0f} W/K")
print(f"Relación de capacidades (cr): {cr:.3f}")
# Cálculo de NTU
NTU = U * A_s / C_min
print(f"\nNúmero de Unidades de Transferencia (NTU): {NTU:.3f}")
# Cálculo de efectividad para contraflujo
if cr == 1:
epsilon = NTU / (1 + NTU)
else:
numerador = 1 - np.exp(-NTU * (1 - cr))
denominador = 1 - cr * np.exp(-NTU * (1 - cr))
epsilon = numerador / denominador
print(f"Efectividad (ε): {epsilon:.3f}")
# Cálculo de Q_max
Q_max = C_min * (T_h_i - T_c_i)
print(f"\nCalor máximo transferible (Q_max): {Q_max:.0f} W")
# Cálculo de la tasa de transferencia de calor
Q = epsilon * Q_max # W
print(f"Tasa de transferencia de calor real (Q): {Q:.0f} W ({Q/1000:.1f} kW)")
# Cálculo de temperaturas de salida
T_h_o = T_h_i - Q / C_h
T_c_o = T_c_i + Q / C_c
print(f"\nTEMPERATURAS DE SALIDA:")
print(f"Temperatura de salida del aceite (Th,o): {T_h_o:.2f} °C")
print(f"Temperatura de salida del agua (Tc,o): {T_c_o:.2f} °C")
# GRÁFICA 1: Efectividad vs NTU para diferentes cr
print(f"\nGENERANDO GRÁFICAS...")
NTU_vec = np.linspace(0, 5, 100) # Vector NTU de 0 a 5
cr_vec = [0, 0.2, 0.4, 0.6, 0.8, 1] # Diferentes valores de cr
epsilon_contra = np.zeros((len(NTU_vec), len(cr_vec))) # Matriz para almacenar efectividad
for i, cr_val in enumerate(cr_vec):
for j, NTU_val in enumerate(NTU_vec):
if cr_val == 1:
epsilon_contra[j, i] = NTU_val / (1 + NTU_val) # Para cr=1, fórmula especial
else:
numerador = 1 - np.exp(-NTU_val * (1 - cr_val))
denominador = 1 - cr_val * np.exp(-NTU_val * (1 - cr_val))
epsilon_contra[j, i] = numerador / denominador
plt.figure(figsize=(10, 6))
for i, cr_val in enumerate(cr_vec):
plt.plot(NTU_vec, epsilon_contra[:, i], label=f'cr={cr_val}')
plt.xlabel('Número de Unidades de Transferencia (NTU)')
plt.ylabel('Efectividad (ε)')
plt.title('Efectividad vs NTU para Intercambiador de Contraflujo')
plt.legend(loc='lower right')
plt.grid(True, alpha=0.3)
# Marcar el punto de operación
plt.plot(NTU, epsilon, 'ro', markersize=10, label='Punto de Operación')
plt.annotate(f'NTU={NTU:.3f}\nε={epsilon:.3f}',
xy=(NTU, epsilon),
xytext=(NTU+0.5, epsilon-0.1),
arrowprops=dict(arrowstyle='->', color='red'))
plt.tight_layout()
plt.show()
# GRÁFICA 2: Q vs NTU para nuestro cr específico
Q_vec = np.zeros(len(NTU_vec))
for j, NTU_val in enumerate(NTU_vec):
if cr == 1:
epsilon_temp = NTU_val / (1 + NTU_val)
else:
numerador = 1 - np.exp(-NTU_val * (1 - cr))
denominador = 1 - cr * np.exp(-NTU_val * (1 - cr))
epsilon_temp = numerador / denominador
Q_vec[j] = epsilon_temp * Q_max
plt.figure(figsize=(10, 6))
plt.plot(NTU_vec, Q_vec/1000, 'b-', linewidth=2) # Convertir a kW
plt.xlabel('Número de Unidades de Transferencia (NTU)')
plt.ylabel('Tasa de Transferencia de Calor Q (kW)')
plt.title(f'Tasa de Transferencia de Calor vs NTU para cr={cr:.3f}')
plt.grid(True, alpha=0.3)
# Marcar el punto de operación
plt.plot(NTU, Q/1000, 'ro', markersize=10, label='Punto de Operación')
plt.annotate(f'NTU={NTU:.3f}\nQ={Q/1000:.1f} kW',
xy=(NTU, Q/1000),
xytext=(NTU+0.5, Q/1000-10),
arrowprops=dict(arrowstyle='->', color='red'))
plt.legend()
plt.tight_layout()
plt.show()
# GRÁFICA 3: Perfil de temperaturas a lo largo del intercambiador
print(f"\nGENERANDO PERFIL DE TEMPERATURAS...")
# Simular el perfil a lo largo del intercambiador
longitud = np.linspace(0, 1, 100) # Longitud adimensional
T_h_profile = np.zeros(len(longitud))
T_c_profile = np.zeros(len(longitud))
for i, L in enumerate(longitud):
# Para contraflujo, las temperaturas varían exponencialmente
A_eff = A_s * L # Área efectiva hasta el punto L
# Usar ecuaciones de variación de temperatura para contraflujo
if C_h != C_c:
T_h_profile[i] = T_h_i - (Q / C_h) * (1 - np.exp(-U * A_eff * (1/C_h - 1/C_c))) / (1 - (C_h/C_c) * np.exp(-U * A_eff * (1/C_h - 1/C_c)))
T_c_profile[i] = T_c_i + (Q / C_c) * (1 - np.exp(-U * A_eff * (1/C_h - 1/C_c))) / (1 - (C_h/C_c) * np.exp(-U * A_eff * (1/C_h - 1/C_c)))
else:
# Caso cuando C_h = C_c
T_h_profile[i] = T_h_i - (T_h_i - T_c_i) * (U * A_eff) / (C_h + U * A_eff)
T_c_profile[i] = T_c_i + (T_h_i - T_c_i) * (U * A_eff) / (C_h + U * A_eff)
plt.figure(figsize=(10, 6))
plt.plot(longitud, T_h_profile, 'r-', linewidth=2, label='Aceite (Caliente)')
plt.plot(longitud, T_c_profile, 'b-', linewidth=2, label='Agua (Fría)')
plt.xlabel('Longitud Adimensional del Intercambiador')
plt.ylabel('Temperatura (°C)')
plt.title('Perfil de Temperaturas a lo largo del Intercambiador de Contraflujo')
plt.legend()
plt.grid(True, alpha=0.3)
# Marcar temperaturas de entrada y salida
plt.annotate(f'Entrada: {T_h_i}°C', xy=(0, T_h_i), xytext=(0.1, T_h_i+10),
arrowprops=dict(arrowstyle='->', color='red'))
plt.annotate(f'Salida: {T_h_o:.1f}°C', xy=(1, T_h_o), xytext=(0.7, T_h_o-10),
arrowprops=dict(arrowstyle='->', color='red'))
plt.annotate(f'Entrada: {T_c_i}°C', xy=(0, T_c_i), xytext=(0.1, T_c_i-10),
arrowprops=dict(arrowstyle='->', color='blue'))
plt.annotate(f'Salida: {T_c_o:.1f}°C', xy=(1, T_c_o), xytext=(0.7, T_c_o+10),
arrowprops=dict(arrowstyle='->', color='blue'))
plt.tight_layout()
plt.show()
# RESUMEN FINAL
print("\n" + "=" * 60)
print("RESUMEN FINAL DEL ANÁLISIS")
print("=" * 60)
print(f"Efectividad del intercambiador: {epsilon:.3f} ({epsilon*100:.1f}%)")
print(f"Tasa de transferencia de calor: {Q/1000:.1f} kW")
print(f"Temperatura de salida del aceite: {T_h_o:.1f} °C")
print(f"Temperatura de salida del agua: {T_c_o:.1f} °C")
print(f"Diferencia de temperatura del aceite: {T_h_i - T_h_o:.1f} °C")
print(f"Diferencia de temperatura del agua: {T_c_o - T_c_i:.1f} °C")
print("=" * 60)

Cite As

Juan Guillermo (2025). PRJECT (https://au.mathworks.com/matlabcentral/fileexchange/182415-prject), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2025b
Compatible with any release
Platform Compatibility
Windows macOS Linux
Tags Add Tags

Community Treasure Hunt

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

Start Hunting!
Version Published Release Notes
1.0.0