🍠Python重力弹弓流体晃动微分方程模型和交直流电阻电容电路
Python | 热层 | 大气层 | 运动轨迹 | 弹射角度 | 耦合微分方程 | 电磁 | 螺旋运动 | 重力弹弓 | 流体晃动 | 微分方程 | 模型 | 双摆运动 | 非线性 | 相空图 | 绝热 | 无粘流 | 流体力学 | 自由表面 | 简谐运动 | 化学 | 物理模型 | 交流 | 直流 | 电阻电容
🎯要点
🎯计算地球大气层中热层金属坠物运动轨迹 | 🎯计算炮弹最佳弹射角度耦合微分方程 | 🎯计算电磁拉莫尔半径螺旋运动 | 🎯计算航天器重力弹弓运动力学微分方程 | 🎯计算双摆的混沌运动非线性微分方程,绘制相空图 | 🎯计算绝热和无粘流流体力学微分方程 | 🎯计算容器流体晃动自由表面简谐运动数学模型 | 🎯计算化学物质的伦纳德-琼斯势物理模型 | 🎯分析直流交流电阻电容电路
📜欧拉法 | 本文 - 用例
📜Python | C# | MATLAB 库卡机器人微分运动学 | 欧拉-拉格朗日动力学 | 混合动力控制
📜Python | C++ | MATLAB机器人正逆向运动学动力学求解器及算法
📜Python烟雾液体弹性力微分模拟 | 出租车往返速度微分计算
🍇Python欧拉法
令 为显式定义的一阶常微分方程。也就是说, 是一个函数,它返回给定时间和状态值的状态的导数或变化。另外,令 为区间 的数字网格,间距为。不失一般性,我们假设 ,并且对于某个正整数 。
在 附近的线性近似为
还可以写为:
这个公式称为显式欧拉公式,它允许我们在给定 S\left(t_j\right) 状态的情况下计算 状态的近似值。从给定的初始值开始,我们可以使用这个公式对状态进行积分直到;这些 值是微分方程解的近似值。显式欧拉公式是解决初值问题最简单、最直观的方法。在任何状态,它在该状态下使用F“指向”下一个状态,然后朝该方向移动的距离。尽管有更复杂和更准确的方法来解决这些问题,但它们都具有相同的基本结构。因此,我们明确列举了使用显式欧拉公式解决初始值问题的步骤。
假设我们有一个函数 计算 ,一个数值网格 ,区间 ,初始状态值。我们可以使用以下步骤计算 中每个 的 。
将 存储在数组 中。
计算
将 存储在中
计算
将存储在 中。
...
计算
将 存储在中
是初始值问题的近似解
当使用具有这种结构的方法时,我们称该方法集成了常微分方程的解。
初始条件为的微分方程有精确解 。使用显式欧拉公式,以 0.1 为增量,在 0 和 1 之间近似求解此初始值问题。绘制近似解和精确解之间的差异。
代码处理:
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-poster')
%matplotlib inline
f = lambda t, s: np.exp(-t)
h = 0.1
t = np.arange(0, 1 + h, h)
s0 = -1
s = np.zeros(len(t))
s[0] = s0
for i in range(0, len(t) - 1):
s[i + 1] = s[i] + h*f(t[i], s[i])
plt.figure(figsize = (12, 8))
plt.plot(t, s, 'bo--', label='Approximate')
plt.plot(t, -np.exp(-t), 'g', label='Exact')
plt.title('Approximate and Exact Solution \
for Simple ODE')
plt.xlabel('t')
plt.ylabel('f(t)')
plt.grid()
plt.legend(loc='lower right')
plt.show()
在上图中,我们可以看到每个点都是基于前一个点以线性方式进行的近似。从初始值,我们最终可以得到数值网格上解的近似值。如果我们对 h=0.01 重复该过程,我们会得到更好的近似解:
h = 0.01
t = np.arange(0, 1 + h, h)
s0 = -1
s = np.zeros(len(t))
s[0] = s0
for i in range(0, len(t) - 1):
s[i + 1] = s[i] + h*f(t[i], s[i])
plt.figure(figsize = (12, 8))
plt.plot(t, s, 'b--', label='Approximate')
plt.plot(t, -np.exp(-t), 'g', label='Exact')
plt.title('Approximate and Exact Solution \
for Simple ODE')
plt.xlabel('t')
plt.ylabel('f(t)')
plt.grid()
plt.legend(loc='lower right')
plt.show()
显式欧拉公式之所以被称为“显式”,是因为它只需要处的信息来计算处的状态。也就是说, 可以根据我们拥有的值(即 和)显式地编写。隐式欧拉公式可以通过在周围取 的线性近似并在处计算来导出:
这个公式很奇特,因为它要求我们知道 才能计算 !不过,有时候我们可以用这个公式来近似求解初值问题。在详细介绍如何使用隐式欧拉公式解决这些问题之前,我们先给出另一个隐式公式,称为梯形公式,它是显式和隐式欧拉公式的平均值:
为了说明如何求解这些隐式解,请再次考虑已简化为一阶的摆方程。
Last updated
Was this helpful?