1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| import numpy as np import sympy import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
arguement = [0.44,0.975,0.0235, None,0]
alpha = 2.47 F = 100 xF,xD,xW,R,q = arguement
def yq(x, q): if q == 1: pass else: return q/(q-1)*x -1/(q-1)*xF
def yp(x): y = alpha*x / (1+(alpha-1)*x) return y
def xp(y): x = y/(alpha - (alpha -1)*y) return x
R_min = 1/(alpha - 1)*(alpha*xD/xF - (1-xD)/1-xF) - 1 R = R_min * 1.5
R_min = 1/(alpha - 1)*(alpha/xF - alpha*(1-xD)/1-xF) parameter = [xF,xD,xW,R,q] print('R:{}'.format(R))
def yj(x): y = R/(R+1)*x + xD/(R+1) return y
A = sympy.Matrix([[1,1],[xD,xW]]) b = sympy.Matrix([F,xF*F]) D,W = A.solve(b) L = R*D
def yt(x): y = (L + q*F)/(L + q*F -W)*x - W/(L + q*F -W)*xW return y
x = np.linspace(0,1,50) yq1 = [yq(xi, q) for xi in x] yp1 = yp(x) yj1 = yj(x) yt1 = yt(x)
xq = ((R+1)*xF + (q-1)*xD)/(R+q) yq = (xF*R + q*xD)/(R+q)
yn = [xD] xn = []
while xp(yn[-1])>xW: xn.append(xp(yn[-1])) if xn[-1]>xq: yn.append(yj(xn[-1])) else: yn.append(yt(xn[-1])) else: xn.append(xp(yn[-1])) print('N_T = {}'.format(len(xn))) count = sum(1 for x in xn if x > xq) print(f"大于 {xq} 的元素个数是:{count}")
yn_r = [round(i,3) for i in yn] xn_r = [round(i,3) for i in xn]
print('塔板上的平衡点,经过四舍五入的结果:') print('yn_r={}'.format(yn_r)) print('xn_r={}'.format(xn_r))
xnt = [xD] ynt = [xD] for n,i in enumerate(xn): xnt.append(i) ynt.append(yn[n]) xnt.append(i) if i >= xq: ynt.append(yj(i)) else: ynt.append(yt(i))
fig, ax = plt.subplots(1, 1, figsize=(9, 9)) ax.set_xlim(0,1) ax.set_ylim(0,1)
ax.plot(x,x,ls=':',label='对角线',color="black") ax.plot(x,yq1,label='q线') ax.plot(x,yp1,label='平衡线',color="black") ax.plot(x,yj1,label='精馏操作线') ax.plot(x,yt1,label='提馏操作线') ax.plot(xn,yn,label='塔板操作平衡点',ls=':',marker='+',markersize=10) ax.plot(xnt,ynt,label='图解法—理论塔板',ls=':',color="red")
ax.plot(xD,xD,marker='.',markersize=10) ax.plot(xW,xW,marker='.',markersize=10) ax.plot(xq,yq,marker='.',markersize=10)
ax.annotate('W点',xy=(xW,xW),xytext=(xW+0.06,xW),arrowprops=dict(arrowstyle='->')) ax.annotate('D点',xy=(xD,xD),xytext=(xD,xD-0.06),arrowprops=dict(arrowstyle='->')) ax.annotate("Q点", xy=(xq, yq), xytext=(xq, yq - 0.05), arrowprops=dict(arrowstyle="->"))
ax.spines["top"].set_linewidth(2)
ax.spines["bottom"].set_linewidth(2)
ax.spines["left"].set_linewidth(2)
ax.spines["right"].set_linewidth(2)
ax.text(x=0.6, y=0.4, s="所需理论板数:%d" % (len(xn) - 1)) ax.text(x=0.6, y=0.3, s="进料板是第%d层" % (count+1)) ax.legend() plt.show()
|