🥥Python物理量和化学量数值计算

关键词

Python | 物理 | 化学 | 方程式 | 求根 | 线性代数 | 曲线拟合 | 微积分 | 微分方程 | 自由落体 | 阻力系数 | 酸碱平衡 | 科尔布鲁克方程 | 穆迪摩擦系数 | 雷诺数 | 摩擦力 | 行变势能 | 胡克定律 | 基尔霍夫电流法则 | 欧姆定律 | 电压电流 | 矩阵 | 热守恒 | 热扩散 | 差分方法 | 对角方程 | 质量守恒 | 物料平衡 | 通风系统 | 化学反应 | 非线性系统 | 牛顿-拉夫森法 | 反应物浓度 | 地震 | 动态力平衡 | 特征值 | 特征向量 | 幅度 | 米氏模型 | 酶催化 | 线性回归 | 溶解氧 | 传质系数 | 太阳黑子 | 功率谱 | 傅里叶定律 | 温跃层 | 温通量 | 多项式 | 温差梯度 | 交流电波形 | 牛顿-科特斯求积规则 | 非正弦波形 | 均方根电流 | 洛特卡-沃尔泰拉模型 | 洛伦兹常微分方程 | 欧拉方法 | 龙格-库塔法 | 时间序列图 | 相平面图 | 数学

要点

  1. Python数值计算以下 物理量数据 化学量数据 关系方程:求根,线性代数方程,曲线拟合,微积分,微分方程

    1. 探索性数据分析自由落体阻力系数及其下落速度。

    2. 根据液体酸碱平衡化学式求解。

    3. 建立科尔布鲁克方程,穆迪摩擦系数和雷诺数关系式,数值解摩擦力。

    4. 根据胡克定律,数值解弹簧行变势能方程式。

    5. 依据基尔霍夫电流法则和欧姆定律,建立电压电流线性代数方程,数值解方程的矩阵形式。

    6. 参考热守恒,建立导体的热扩散微分方程,使用差分方法将其转化为线性代数方程的三对角方程组,以便数值解。

    7. 根据质量守恒在物理系统中的应用,使用物料平衡建立通风系统中气体传递线性代数方程式,数值解矩阵形式方程式。

    8. 针对容器中化学反应,建立非线性系统方程式,使用牛顿-拉夫森法数值求解反应物浓度。

    9. 数值分析地震中,多层建筑物水平方向上动态力平衡关系式,Python数值确定此关系式中的特征值和特征向量,依据特征向量绘制地震幅度。

    10. 米氏模型是描述酶催化化学反应的速度的数学模型,使用线性回归方法数值求解给定数据下具体二阶米氏模型。

    11. 依据溶解氧的传质系数性质,建立数学模型,使用线性回归拟合数据模型。

    12. 使用快速傅里叶变换,数值计算绘制相对太阳黑子数功率谱。

    13. 根据物理层热传递和傅里叶定律,确定温跃层温通量公式,计算样条多项式的系数一阶和二阶导数,从而获得温跃层的厚度和温差梯度。

    14. 根据交流电波形方程,使用牛顿-科特斯求积规则,计算非正弦波形的均方根电流。

    15. 根据捕食者和猎物物种模型:洛特卡-沃尔泰拉模型,建立洛伦兹常微分方程,数值计算和绘制欧拉方法和龙格-库塔法下的时间序列图和相平面图。

Python洛伦兹微分方程示例

探索龙格-库塔方法的一些应用来绘制著名的洛伦兹和罗斯勒系统。

这些方程将被插入到我们的导数函数中,以便我们可以应用 RK4(龙格-库塔四阶)方法。首先,我们首先导入必要的包。

 import numpy as np 
 import matplotlib.pyplot as plt 

然后,我们从将用于这些方程的变量开始。

 sigma = 10.0 
 rho = 28.0 
 beta = 8/3 
 t = 0 
 tf = 40 
 h = 0.01 

设置好变量后,我们现在继续讨论导数函数。

 def derivative(r,t):
     x = r[0]
     y = r[1]
     z = r[2]
     return np.array([sigma * (y - x), x * (rho - z) - y, (x * y) - (beta * z)])

快速回顾一下导数函数。 r 变量用于在数组内设置初始条件。 我们为每个变量分配数组的值,在本例中为三个,然后函数将返回开始时所示的微分方程,但现在具有初始条件。 每次循环经过一次迭代,函数将继续更新新值,这些值将存储在以下数组中。

 time = np.array([]) 
 x = np.array([]) 
 y = np.array([]) 
 z = np.array([]) 
 r = np.array([1.0, 1.0, 1.0]) 

现在,我们的主要部分设置完毕,我们只需继续将所有内容应用到 RK4 循环内,我们最终会得到

 while (t <= tf ):
         time = np.append(time, t)
         z = np.append(z, r[2])
         y = np.append(y, r[1])
         x = np.append(x, r[0])
         k1 = h*derivative(r,t)
         k2 = h*derivative(r+k1/2,t+h/2)
         k3 = h*derivative(r+k2/2,t+h/2)
         k4 = h*derivative(r+k3,t+h)
         r += (k1+2*k2+2*k3+k4)/6
         t = t + h

运行循环后,我们的数组应该填充等量的值,因此现在我们可以继续绘制这些值,以便我们可以使用以下代码了解它们如何生成下面的图表。

 fig, (ax1,ax2,ax3) = plt.subplots(1,3, figsize = (15, 5))
 ax1.plot(x, y)
 ax1.set_title("X & Y")
 ax2.plot(x, z)
 ax2.set_title("X & Z")
 ax3.plot(y, z)
 ax3.set_title("Y & Z")
 plt.show()

现在这些是一些有趣的图表!通过使用不同的希腊变量值,我们可以看到系统行为的变化,其中一些值会产生复杂的图表。

Last updated