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

要点

  1. Python数值计算以下 物理量数据化学量数据 关系方程:求根,线性代数方程,曲线拟合,微积分,微分方程
    1. 探索性数据分析自由落体阻力系数及其下落速度。
    2. 根据液体酸碱平衡化学式求解。
    3. 建立科尔布鲁克方程,穆迪摩擦系数和雷诺数关系式,数值解摩擦力。
    4. 根据胡克定律,数值解弹簧行变势能方程式。
    5. 依据基尔霍夫电流法则和欧姆定律,建立电压电流线性代数方程,数值解方程的矩阵形式。
    6. 参考热守恒,建立导体的热扩散微分方程,使用差分方法将其转化为线性代数方程的三对角方程组,以便数值解。
    7. 根据质量守恒在物理系统中的应用,使用物料平衡建立通风系统中气体传递线性代数方程式,数值解矩阵形式方程式。
    8. 针对容器中化学反应,建立非线性系统方程式,使用牛顿-拉夫森法数值求解反应物浓度。
    9. 数值分析地震中,多层建筑物水平方向上动态力平衡关系式,Python数值确定此关系式中的特征值和特征向量,依据特征向量绘制地震幅度。
    10. 米氏模型是描述酶催化化学反应的速度的数学模型,使用线性回归方法数值求解给定数据下具体二阶米氏模型。
    11. 依据溶解氧的传质系数性质,建立数学模型,使用线性回归拟合数据模型。
    12. 使用快速傅里叶变换,数值计算绘制相对太阳黑子数功率谱。
    13. 根据物理层热传递和傅里叶定律,确定温跃层温通量公式,计算样条多项式的系数一阶和二阶导数,从而获得温跃层的厚度和温差梯度。
    14. 根据物理学中功和能量转换关系,建立功和力的关系式 W = ∫ x 0 x n F x cos ⁡ θ x d x W=\int_{x_0}^{x_n} F x \cos \theta x d x W=x0xnFxcosθxdx,数值计算积分最佳估计值。
    15. 根据交流电波形方程,使用牛顿-科特斯求积规则,计算非正弦波形的均方根电流。
    16. 根据捕食者和猎物物种模型:洛特卡-沃尔泰拉模型,建立洛伦兹常微分方程,数值计算和绘制欧拉方法和龙格-库塔法下的时间序列图和相平面图。

Python洛伦兹微分方程示例

探索龙格-库塔方法的一些应用来绘制著名的洛伦兹和罗斯勒系统。
d x d t = σ ( y − x ) d y d t = x ( ρ − z ) − y d z d t = x y − β z \begin{aligned} &\frac{d x}{d t}=\sigma(y-x)\\ &\frac{d y}{d t}=x(\rho-z)-y\\ &\frac{d z}{d t}=x y-\beta z \end{aligned} dtdx=σ(yx)dtdy=x(ρz)ydtdz=xyβz
这些方程将被插入到我们的导数函数中,以便我们可以应用 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()

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

参阅一:计算思维
参阅二:亚图跨际
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值