反应动力学参数拟合与停留时间分布函数 |
您所在的位置:网站首页 › 反应动力学方程 › 反应动力学参数拟合与停留时间分布函数 |
目录
1 非线性回归Python实现方法1.1 多项式拟合 polyfit()1.2 非线性拟合 curve_fit()
2 应用实例2.1 拟合活化能2.1.1 实验方法与原理2.1.2 结果与讨论2.1.3 附录:基于Python实现
2.2 非理想反应器停留时间分布拟合2.2.1 引言2.2.2 研究方法2.2.3 结果与讨论
1 非线性回归Python实现方法
在很多领域中往往需要对实验数据(或者调查数据)通过某种方程进行拟合,得到方程中的关键参数。在统计、物理、化学、生物等领域都是非常常见的方法。 非线性方程是指方程中存在非线性项,例如 e x e^x ex, ln x \ln x lnx, x 3 x^3 x3, sin x \sin x sinx等项时,求解过程通过人工计算很难得到准确的解。 1.1 多项式拟合 polyfit()Python的numpy库中的函数polyfit()能够拟合一元多项式 y = a 1 x m + a 2 x m − 1 + . . . + a m x + a m + 1 y = a_1 x^m + a_2 x^{m-1} +...+ a_m x + a_{m+1} y=a1xm+a2xm−1+...+amx+am+1numpy.polyfit()专门用于拟合这种形式的多项式,看下面的例子 import numpy as np import matplotlib.pyplot as plt # 生成数据 x = np.linspace(0, 5, 100) y = np.exp(x) # 方差初始容器,辅助内容 i_range = [i for i in range(3,10)] rsds = [] # 拟合并绘制不同项数多项式 for i in i_range: p = np.polyfit(x, y, i, full=True) y_hat = np.polyval(p[0], x) rsds.append(p[1]) plt.plot(x, y_hat, lw=2, label=str(i)) # 绘制原始数据 plt.plot(x[::10], y[::10], 'r*', ms=20, label='exp(x)') plt.legend() # 字体大小设置 font = {'size':22} plt.xlabel('x', font) plt.ylabel('y', font) plt.tick_params(labelsize=19) plt.show() # 绘制方差图 plt.plot(i_range, np.log10(rsds), '-o') plt.xlabel('n', font) plt.ylabel(r'$\lg \sigma^2$', font) plt.tick_params(labelsize=19)
curve_fit()是scipy.optimize的函数,用于拟合已知形式的函数,接下来还是看个例子。仍然以 y = exp ( x ) y=\exp(x) y=exp(x)为例说明,通过随机数函数增加生成一些噪音,使噪音范围为[-0.2, 0.2),然后分别用curve_fit()和polyfit()拟合并对比。用下面的函数拟合,a和n为待拟合参数。 y = a exp ( n x ) y = a\exp(nx) y=aexp(nx) 代码如下: from scipy.optimize import curve_fit import numpy as np import matplotlib.pyplot as plt from random import random # 生成数据 x = np.linspace(0, 5, 100) y = np.exp(x) # 随机函数生成噪音 eps = 0.4*np.array([random() for i in range(len(x))]) - 0.2 y = y * (1 + eps) # 拟合函数形式 def f(x, a, n): return a*np.exp(n*x) # 非线性拟合 popt,pcov = curve_fit(f, x, y) y_hat_c = f(x, popt[0], popt[1]) # 多项式拟合 p = np.polyfit(x, y, 6) y_hat_p = np.polyval(p, x) # 绘制图像 plt.plot(x, y, 'o', label='y') plt.plot(x, y_hat_c, 'r', lw=2, label='curve_fit') plt.plot(x, y_hat_p, 'k--', lw=2, label='polyfit_6') # 设置字体 font = {'size':22} plt.xlabel('x', font) plt.ylabel('y', font) plt.tick_params(labelsize=19) plt.legend(fontsize=20)
对于光催化反应甲醛反应,其动力学方程可表示为
r
=
d
c
A
d
t
=
k
0
exp
(
−
E
R
T
)
c
A
m
r = \frac{dc_A}{dt} = k_0\exp(-\frac{E}{RT})c_A^m
r=dtdcA=k0exp(−RTE)cAm 分离变量后得
d
c
A
c
A
m
=
k
0
exp
(
−
E
R
T
)
\frac{dc_A}{c_A^m} = k_0\exp(-\frac{E}{RT})
cAmdcA=k0exp(−RTE) 根据m取值的不同,浓度与时间的变化规律可分为三种形式的函数
c
A
(
t
)
=
c
0
−
k
0
exp
(
−
E
R
T
)
t
,
m
=
0
ln
c
A
(
t
)
=
ln
c
0
−
k
0
exp
(
−
E
R
T
)
t
,
m
=
1
[
c
A
(
t
)
]
1
−
m
=
c
0
1
−
m
−
(
1
−
m
)
k
0
exp
(
−
E
R
T
)
t
,
m
≠
0
,
1
c_A(t) = c_0 - k_0\exp(-\frac{E}{RT})t,\ m=0\\ \ln c_A(t) = \ln c_0 - k_0\exp(-\frac{E}{RT})t,\ m=1\\ [c_A(t)]^{1-m} = c_0^{1-m} - (1-m)k_0\exp(-\frac{E}{RT})t,\ m\neq 0,1
cA(t)=c0−k0exp(−RTE)t, m=0lncA(t)=lnc0−k0exp(−RTE)t, m=1[cA(t)]1−m=c01−m−(1−m)k0exp(−RTE)t, m=0,1 通过实验测得浓度随时间的变化规律cA(t),根据不同的动力学模型对数据进行拟合。 从实验数据初步判断m≠0,接下来将使用模型2和模型3对实验数据进行拟合。
ln
r
=
m
ln
c
0
+
ln
k
0
−
E
/
R
T
\ln r = m\ln c_0 + \ln k_0 - E/RT
lnr=mlnc0+lnk0−E/RT 反应速率的表达式更为统一,对反应速率方程取对数后得到的方程形式更简洁,因此为减少在拟合过程中不必要的误差,可使用速率方程进行拟合,计算过程见附录,拟合结果如下。 非理想反应器内流体存在返混现象,因此流体微元在反应器中的停留时间并不是完全相同的,而存在与反应器特性有关的概率分布,称为停留时间分布。停留时间分布对于认识反应器传质过程与评估反应器生产能力等都有重要参考价值。 停留时间分布的测试方法分为两类:阶跃法和脉冲法。阶跃法是指在某一时刻突然改变稳定运行的反应器入口的探针物质浓度,通过监测不同时间后出口处探针物质浓度的变化规律,直接得到离散的停留时间分布F(t)。脉冲法是指在某一瞬间,从入口注入一定量探针物质,通过监测出口浓度,直接得到停留时间分布密度E(t)。 停留时间分布规律通常呈“S”型曲线,F(t)的最大值为1,因此可使用S型函数表示F(t),其中b,c为拟合参数。将实验数据通过S函数拟合得到停留时间分布的连续函数。 F ( t ) = 1 1 + b exp ( − c t ) F(t) = \frac{1}{1+b\exp(-ct)} F(t)=1+bexp(−ct)1 因此,进一步可解算停留时间分布密度函数E(t),其形式可表示为如下方程: E ( t ) = d F ( t ) d t = b c exp ( − c t ) ( 1 + b exp ( − c t ) ) 2 E(t) = \frac{dF(t)}{dt} = \frac{bc\exp(-ct)}{(1+b\exp(-ct))^2} E(t)=dtdF(t)=(1+bexp(−ct))2bcexp(−ct) 平均停留时间则可表示为如下: t ˉ = ∫ 0 ∞ t E ( t ) d t = ln ( b + 1 ) c \bar t = \int_0^\infty tE(t) dt = \frac{\ln (b+1)}{c} tˉ=∫0∞tE(t)dt=cln(b+1) 停留时间分布的方差表示为: σ t 2 = ∫ 0 ∞ ( t − t ˉ ) 2 E ( t ) d t = ∫ 0 ∞ t 2 E ( t ) d t − t ˉ 2 \sigma^2_t = \int_0^\infty (t-\bar t)^2E(t)dt = \int_0^\infty t^2E(t)dt - \bar t^2 σt2=∫0∞(t−tˉ)2E(t)dt=∫0∞t2E(t)dt−tˉ2 2.2.3 结果与讨论表 1 阶跃法测定停留时间分布实验数据 t/s0152535455565758595Cout/(kg m-3)00.51.02.04.05.56.57.07.77.7(1)通过离散方法计算得到=50.58,σt2=341.54。 (2)通过拟合S型函数得到停留时间分布函数: F ( t ) = 1 1 + 63.5564 exp ( − 0.0916 t ) F(t) = \frac{1}{1+63.5564\exp(-0.0916t)} F(t)=1+63.5564exp(−0.0916t)1 停留时间分布密度函数: E ( t ) = 5.8218 exp ( − 0.0916 t ) ( 1 + 63.5564 exp ( − 0.0916 t ) ) 2 E(t) = \frac{5.8218\exp(-0.0916t)}{(1+63.5564\exp(-0.0916t))^2} E(t)=(1+63.5564exp(−0.0916t))25.8218exp(−0.0916t) 平均停留时间: t ˉ = ln ( 63.5564 + 1 ) 0.0916 = 45.50 \bar t = \frac{\ln (63.5564+1)}{0.0916} = 45.50 tˉ=0.0916ln(63.5564+1)=45.50 停留时间分布方差:
σ
t
2
=
364.60
\sigma_t^2 = 364.60
σt2=364.60 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |