You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python拟合Arrhenius方程求解A、B参数?

求解阿伦尼乌斯方程拟合酵母活性数据的问题解决

需要拟合阿伦尼乌斯方程 (k_{gas}=Ae^{(-B/(RT))}) 求解参数A和B(T为开尔文温度,A单位为mL/min),最终外推0℃至35℃的速率函数分析酵母活性。但多次尝试拟合均得到偏差极大的直线结果,相关原始数据与尝试代码如下:

原始数据绘图代码

import matplotlib.pyplot as plt
import numpy as np
import scipy as scipy

temperature = np.array([20,25,30,33,35,37,40,45])                  # 单位:℃
prod_rate = np.array([6.9,9.9,21.2,26.1,32.9,30.4,18.8,18.5])/30   # 单位:mL/min

plt.plot(temperature,prod_rate,'ok')
plt.ylabel('Production (mL/min)')
plt.xlabel('Temperature (C)')

首次拟合尝试代码

import matplotlib.pyplot as plt
import numpy as np
import scipy as scipy

def arrhenius(T, A, B):
    R = 8.314  # Gas constant, J/(mol·K)
    return A * np.exp(-B / (R * T))

temperature = np.array([20,25,30,33,35,37,40,45])                  # 单位:℃
prod_rate = np.array([6.9,9.9,21.2,26.1,32.9,30.4,18.8,18.5])/30   # 单位:mL/min

plt.plot(temperature, prod_rate, 'ok')
plt.ylabel('Production (mL/min)')
plt.xlabel('Temperature (C)')

popt, pcov = curve_fit(arrhenius, temperature, prod_rate)
print(popt)

A_optimal, B_optimal = popt
fitted_curve = arrhenius(temperature, A_optimal, B_optimal)

plt.plot(temperature, prod_rate, 'ok', label='Data')
plt.plot(temperature, fitted_curve, '-r', label='Fitted Curve')
plt.ylabel('Production (mL/min)')
plt.xlabel('Temperature (°C)')
plt.legend()
plt.show()

print("Optimal value for A:", A_optimal, "mL/min")
print("Optimal value for B:", B_optimal)

转开尔文后的拟合代码

import matplotlib.pyplot as plt
import numpy as np
import scipy as scipy
from scipy.optimize import curve_fit

def arrhenius(T, A, B):
    R = 8.314  # Gas constant, J/(mol·K)
    return A * np.exp(-B / (R * T))

temperature = np.array([20,25,30,33,35,37,40,45])  
temperature_K = temperature + 273.15                # 转换为开尔文
prod_rate = np.array([6.9,9.9,21.2,26.1,32.9,30.4,18.8,18.5])/30   # 单位:mL/min

plt.plot(temperature_K, prod_rate, 'ok')
plt.ylabel('Production (mL/min)')
plt.xlabel('Temperature (C)')

popt, pcov = curve_fit(arrhenius, temperature_K, prod_rate)
print(popt)

A_optimal, B_optimal = popt
fitted_curve = arrhenius(temperature_K, A_optimal, B_optimal)

plt.plot(temperature_K, prod_rate, 'ok', label='Data')
plt.plot(temperature_K, fitted_curve, '-r', label='Fitted Curve')
plt.ylabel('Production (mL/min)')
plt.xlabel('Temperature (°C)')
plt.legend()
plt.show()

print("Optimal value for A:", A_optimal, "mL/min")
print("Optimal value for B:", B_optimal)

问题原因分析

  1. 模型适用范围错误:标准阿伦尼乌斯方程描述温度升高反应速率单调上升的过程,但酵母活性是钟型曲线——温度超过35℃后酶变性导致活性下降,这部分数据完全不符合阿伦尼乌斯模型,用全部数据拟合会干扰优化器找到正确的指数趋势。
  2. 缺少初始参数猜测:curve_fit默认初始参数为[1,1],与真实解差距极大,容易陷入局部最优,最终拟合出无意义的直线。

修正方案与代码

核心修正点

  • 仅使用35℃及以下的有效数据(符合阿伦尼乌斯模型的温度区间)
  • 为curve_fit提供合理的初始参数猜测,引导优化器找到正确解
  • 生成0℃至35℃的外推曲线,满足分析需求

修正后代码

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

def arrhenius(T, A, B):
    R = 8.314  # 气体常数,J/(mol·K)
    return A * np.exp(-B / (R * T))

# 筛选35℃及以下的有效数据
temp_c_valid = np.array([20,25,30,33,35])
temp_k_valid = temp_c_valid + 273.15
prod_rate_valid = np.array([6.9,9.9,21.2,26.1,32.9])/30  # mL/min

# 设置初始参数猜测:A略大于最大产率,B取酶促反应典型活化能范围
p0 = [2, 10000]
popt, pcov = curve_fit(arrhenius, temp_k_valid, prod_rate_valid, p0=p0)

A_opt, B_opt = popt
print(f"最优A值: {A_opt:.2f} mL/min")
print(f"最优B值: {B_opt:.2f} J/mol")

# 生成0℃到35℃的外推区间
extrapolate_c = np.linspace(0, 35, 100)
extrapolate_k = extrapolate_c + 273.15
extrapolate_rate = arrhenius(extrapolate_k, A_opt, B_opt)

# 绘图展示
plt.figure(figsize=(8,5))
# 全部实验数据点
all_temp_c = np.array([20,25,30,33,35,37,40,45])
all_rate = np.array([6.9,9.9,21.2,26.1,32.9,30.4,18.8,18.5])/30
plt.scatter(all_temp_c, all_rate, color='k', label='全部实验数据')
# 用于拟合的有效数据点
plt.scatter(temp_c_valid, prod_rate_valid, color='blue', s=100, label='拟合用有效数据')
# 拟合曲线与外推结果
plt.plot(extrapolate_c, extrapolate_rate, 'r-', label='阿伦尼乌斯拟合+外推')

plt.xlabel('温度 (℃)')
plt.ylabel('产气速率 (mL/min)')
plt.legend()
plt.grid(True)
plt.show()

结果说明

  • 拟合得到的A、B符合酶促反应的典型参数范围,曲线能准确贴合35℃以下的活性上升趋势
  • 外推的0℃至35℃速率函数可直接用于分析低温到最适温度区间的酵母活性
  • 37℃及以上数据因酶变性偏离模型,禁止纳入阿伦尼乌斯拟合

内容的提问来源于stack exchange,提问作者bob micheal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:16:08