英文:
Code producing incorrect numbers in Heat Exchange Simulation in Python
问题
我正在编写一个热交换模拟程序。应该产生的数值为T_hot_out = 65,T_cold_out = 35,A = 22.26。
以下是我一直在使用的代码。
# 问题 4
import numpy as np
# 从文本中获取(原始设计假设)
T_cold_out0 = 35
T_hot_out0 = 65
# 从表 1 中获取
T_hot_in = 160.0
T_cold_in = 20.0
Cp_hot = 5.2
Cp_cold = 2.6
w_hot = 1.0
k = 0.05
l = 0.002
# 从问题 2 中获取
w_cold = 5.555555
A_design = 22.26
def integrate(f, x0, x1, N):
h = (x1 - x0) / (N-1)
xvalues = np.linspace(x0,x1,N)
yvalues = f(xvalues)
F = np.zeros(N)
for i in range (1,N):
F[i] = h/2 * (yvalues[i-1]+yvalues[i])+F[i-1]
return xvalues,F
def bisection(f, y, x0, x1, eps, max_iter=1000):
x1_n = x1
x0_n = x0
T = (x1+x0) / 2.0
f_T = f(T)
for i in range(max_iter):
T_n = (x0_n+x1_n)/2
f_T_n = f(T_n)
error = f_T_n - y
if abs(error) <= eps:
break
elif error > 0:
x0_n = T_n
x1_n = x1_n
elif error < 0:
x0_n = x0_n
x1_n = T_n
return T_n, error, (abs(error)<=eps)
def h_hot(T_n):
return 0.9*(1+0.015*(T_n-70))
def h_cold(T_n):
return 3.0*(1+0.02*(T_n-40))
def h_overall(T_cold, T_hot):
return 1/((h_hot(T_hot))**-1 + (h_cold(T_cold))**-1 +(k/l)**-1)
# 方程(2)使用 h_hot() 和 h_cold()
def T_hot(T_cold, T_hot_out):
return T_hot_out + ((Cp_cold*w_cold)/(Cp_hot*w_hot))*(T_cold - T_cold_in) # 来自问题 3
def T_cold_out(T_hot_out):
return T_cold_in + (Cp_hot*w_hot)/(Cp_cold*w_cold)*(T_hot_in-T_hot_out) # 类似于 T_hot()
def A(T_hot_out):
def f2(T_cold):
return ((Cp_cold*w_cold)/h_overall(T_cold, T_hot(T_cold, T_hot_out)))*(1/(T_hot(T_cold, T_hot_out)-T_cold)) # 来自方程(9)
T_cold, area = integrate(f2,T_cold_in,T_cold_out(T_hot_out), 1000)
return area[-1]
T_hot_out, err, success = bisection(A, A_design, T_cold_in, T_hot_in, 0.001, max_iter=1000)
if not success:
print("二分法失败!")
print("T_hot_out = {:.2f} (而不是{:.2f})".format(T_hot_out, T_hot_out0))
print("T_cold_out = {:.2f} (而不是{:.2f})".format(T_cold_out(T_hot_out), T_cold_out0))
print("A = {:.2f} (误差 = {:.4e})".format(A(T_hot_out), A(T_hot_out) - A_design))
希望这可以帮助你解决代码中的问题。
英文:
I am coding a heat exchange simulation. The values that should be producced are T_hot_out = 65, T_cold_out = 35, and A = 22.26.
The following is the code I've been using. It prints T_hot_out = 36.9 and T_cold_out = 64.32. No error is raised, so I'm confused on where the computational error is coming from and how to fix it.
#problem 4
import numpy as np
# from text (original design assumptions)
T_cold_out0 =35
T_hot_out0 = 65
# from Table 1
T_hot_in = 160.0
T_cold_in = 20.0
Cp_hot = 5.2
Cp_cold = 2.6
w_hot = 1.0
k = 0.05
l = 0.002
# from problem 2
w_cold = 5.555555
A_design = 22.26
def integrate(f, x0, x1, N):
h = (x1 - x0) / (N-1)
xvalues = np.linspace(x0,x1,N)
yvalues = f(xvalues)
F = np.zeros(N)
for i in range (1,N):
F[i] = h/2 * (yvalues[i-1]+yvalues[i])+F[i-1]
return xvalues,F
def bisection(f, y, x0, x1, eps, max_iter=1000):
x1_n = x1
x0_n = x0
T = (x1+x0) / 2.0
f_T = f(T)
for i in range(max_iter):
T_n = (x0_n+x1_n)/2
f_T_n = f(T_n)
error = f_T_n - y
if abs(error) <= eps:
break
elif error > 0:
x0_n = T_n
x1_n = x1_n
elif error < 0:
x0_n = x0_n
x1_n = T_n
return T_n, error, (abs(error)<=eps)
def h_hot(T_n):
return 0.9*(1+0.015*(T_n-70))
def h_cold(T_n):
return 3.0*(1+0.02*(T_n-40))
def h_overall(T_cold, T_hot):
return 1/((h_hot(T_hot))**-1 + (h_cold(T_cold))**-1 +(k/l)**-1)
# equation (2) using h_hot() and h_cold()
def T_hot(T_cold, T_hot_out):
return T_hot_out + ((Cp_cold*w_cold)/(Cp_hot*w_hot))*(T_cold - T_cold_in) # from problem 3
def T_cold_out(T_hot_out):
return T_cold_in + (Cp_hot*w_hot)/(Cp_cold*w_cold)*(T_hot_in-T_hot_out) # similar to T_hot()
def A(T_hot_out):
def f2(T_cold):
return ((Cp_cold*w_cold)/h_overall(T_cold, T_hot(T_cold, T_hot_out)))*(1/(T_hot(T_cold, T_hot_out)-T_cold)) # from equation (9)
T_cold, area = integrate(f2,T_cold_in,T_cold_out(T_hot_out), 1000)
return area[-1]
T_hot_out, err, success = bisection(A, A_design, T_cold_in, T_hot_in, 0.001, max_iter=1000)
if not success:
print("Bisection has failed!")
print("T_hot_out = {:.2f} (instead of {:.2f})".format(T_hot_out, T_hot_out0))
print("T_cold_out = {:.2f} (instead of {:.2f})".format(T_cold_out(T_hot_out), T_cold_out0))
print("A = {:.2f} (error = {:.4e})".format(A(T_hot_out), A(T_hot_out) - A_design))
答案1
得分: 1
你的 T_hot_out 和 T_cold_out 值似乎在某个时候被交换了,而且似乎有一个四舍五入错误。
英文:
It seems like your T_hot_out and T_cold_out values are being switched at some point, and it also seems like you have a rounding error somewhere.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论