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)
引用格式
Juan Guillermo (2025). PRJECT (https://ww2.mathworks.cn/matlabcentral/fileexchange/182415-prject), MATLAB Central File Exchange. 检索时间: .
MATLAB 版本兼容性
              创建方式
              R2025b
            
            
              兼容任何版本
            
          平台兼容性
Windows macOS Linux标签
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!| 版本 | 已发布 | 发行说明 | |
|---|---|---|---|
| 1.0.0 |  | 
