如何使用 UliEngineering 在 Python 中计算 Henderson-Hasselbalch pH

你可以使用 UliEngineering Python 库,通过 Henderson-Hasselbalch 方程轻松计算 pH:

henderson_hasselbalch_pH.py
from UliEngineering.Chemistry import henderson_hasselbalch_pH

# 计算醋酸缓冲液的 pH(pKa=4.76,比例=1)
ph = henderson_hasselbalch_pH(4.76, 1.0)
print(f"pH (pKa=4.76, 比例=1): {ph:.2f}")

# 计算比例为 10(共轭碱更多)时的 pH
ph = henderson_hasselbalch_pH(4.76, 10.0)
print(f"pH (pKa=4.76, 比例=10): {ph:.2f}")

示例输出

henderson_hasselbalch_pH_output.txt
pH (pKa=4.76, 比例=1): 4.76
pH (pKa=4.76, 比例=10): 5.76

Henderson-Hasselbalch 方程将缓冲溶液的 pH 与弱酸的 pKa 以及共轭碱与弱酸的比例联系起来。这对于缓冲液配制、理解酸碱平衡以及预测生化与化学体系中 pH 随组成的变化至关重要。

Henderson-Hasselbalch pH 曲线图

pH 通过以下公式计算:$\text{pH} = \text{p}K_a + \log_{10}\left(\frac{[\text{A}^-]}{[\text{HA}]}\right)$,其中 $\text{p}K_a$ 为酸解离常数,$[\text{A}^-]$ 为共轭碱浓度,$[\text{HA}]$ 为弱酸浓度。当比例等于 1 时,pH 等于 pKa。

上图以对数刻度展示了三种不同缓冲体系的 pH 与共轭碱/弱酸比例的关系。注意当比例等于 1(由虚线标出)时,pH 等于 pKa。这表明 pH 与比例的对数之间呈线性关系,斜率为 1。该图展示了如何根据弱酸的 pKa,通过改变缓冲液组成可预测地调节 pH。

相关文章


绘图生成脚本

plot_henderson_hasselbalch_ph.py
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
import sys
sys.path.insert(0, '/home/uli/dev/UliEngineering')

from UliEngineering.Chemistry.Henderson import henderson_hasselbalch_pH

# 用于绘图的比例范围(对数刻度)
ratio = np.logspace(-3, 3, 200)  # 0.001 到 1000

# 创建图形
plt.figure(figsize=(10, 6))

# 计算不同 pKa 值对应的 pH
pKa_values = [4.76, 7.2, 9.25]
colors = ['blue', 'green', 'red']
labels = ['Acetate (pKa=4.76)', 'Phosphate (pKa=7.2)', 'Ammonia (pKa=9.25)']

for pKa, color, label in zip(pKa_values, colors, labels):
    pH = pKa + np.log10(ratio)
    plt.plot(ratio, pH, label=label, color=color, linewidth=2)

plt.xscale('log')
plt.xlabel('Conjugate Base / Weak Acid Ratio', fontsize=12)
plt.ylabel('pH', fontsize=12)
plt.title('Henderson-Hasselbalch pH vs Buffer Ratio', fontsize=14, fontweight='bold')
plt.legend(loc='upper left', fontsize=10)
plt.grid(True, alpha=0.3)

# 标记比例 = 1(pH = pKa)
plt.axvline(x=1.0, color='black', linestyle='--', linewidth=2, label='Ratio = 1 (pH = pKa)')
plt.legend(loc='upper left', fontsize=10)

plt.tight_layout()
plt.savefig('henderson_hasselbalch_ph_plot.svg', format='svg', dpi=300)

Check out similar posts by category: Chemistry, Python