购买idc网站服务器,提升自己建设自己的网站,免费建站哪家有,上海微信网站#x1f3af;要点
Python数值和符号计算#xff1a;
振动常微分方程#xff1a;#x1f3af;中心差分求解器#xff0c;绘制移动窗口研究长时间序列。#x1f3af;符号计算离散方程量化误差。#x1f3af;Python数值对比正向欧拉方法#xff0c;反向欧拉方法#xf…要点
Python数值和符号计算
振动常微分方程中心差分求解器绘制移动窗口研究长时间序列。符号计算离散方程量化误差。Python数值对比正向欧拉方法反向欧拉方法克兰克-尼科尔森方法和龙格-库塔法解。数值计算振动能量数值收敛。欧拉-克罗默方法求解器。交错网格法求解器。使用线性/二次函数和符号计算验证常微分方程。线性/二次阻尼求解器和验证函数绘制阻尼正弦函数图。绘制钟摆动态自由体图模拟创建求解器计算。模拟弹性摆。波形运动偏微分方程弹簧波形模拟方程算式转换制定递归算法代码实现数值求解器结果动画演示二次解和敛率的验证函数。示例创建吉他弦一维波形方程数值求解器动画模拟弦振动波形。反射边界的诺依曼条件代码实现一维波形方程验证函数检测结果。可变波速代码实现可变系数。代码实现给定条件下通用一维波形方程求解器。差分方程正弦和余弦波分析代码实现网格离散傅里叶变换计算对应频率。对离散化参数进行泰勒级数展开代码计算数值色散关系代码计算二维数值色散关系并绘制二维数值色散误差结果图。代码解二维线性波形方程矢量化计算函数代码高斯函数绘制波形在正方形中传播。扩散偏微方程代码实现具有边界条件的一维扩散求解器代码验证求解器动画可视化正向欧拉结果。实现前向欧拉算法和稳定条件下一维求解器实现求解器矢量化函数 一维扩散方程隐性方法代码实现反向欧拉法求解器及其矢量化函数。二维和三维扩散方程求解器。异质介质中的扩散离散化后代码实现求解器稀疏矩阵处理。分段恒定介质中扩散的代码实现绘图可视化恒定扩散系数结果。实现稠密系数矩阵求解器数值验证。代码实现稀疏稀疏矩阵计算。雅可比方法代码实现解线性系统。平流方程非线性问题
Python热方程有限差分计算示例
热方程基本上是一个偏微分方程即 ∂ u ∂ t − α ∇ u 0 \frac{\partial u}{\partial t}-\alpha \nabla u0 ∂t∂u−α∇u0 如果我们想用二维笛卡尔求解我们可以这样写上面的热方程 ∂ u ∂ t − α ( ∂ 2 u ∂ x ∂ 2 u ∂ y ) 0 \frac{\partial u}{\partial t}-\alpha\left(\frac{\partial^2 u}{\partial x}\frac{\partial^2 u}{\partial y}\right)0 ∂t∂u−α(∂x∂2u∂y∂2u)0 其中 u u u是我们想要知道的数量 t t t是时间变量 x x x和 y y y是空间变量 α \alpha α是扩散常数。所以基本上我们希望在 x x x 和 y y y 中的任何地方以及随着时间的 t t t 找到解决方案 u u u。现在让我们简单地了解一下有限差分法。有限差分法是一种通过有限差分逼近导数来求解微分方程的数值方法。请记住导数的定义是 f ′ ( a ) lim h → 0 f ( a h ) − f ( a ) h f^{\prime}(a)\lim _{h \rightarrow 0} \frac{f(ah)-f(a)}{h} f′(a)h→0limhf(ah)−f(a) 在有限差分法中我们对其进行近似并去除限制。 因此我们不使用微分和极限符号而是使用 delta 符号即有限差分。 请注意这过于简单化了因为我们必须使用泰勒级数展开并通过假设某些项足够小来推导出它但我们得到了该方法背后的粗略想法。 f ′ ( a ) ≈ f ( a h ) − f ( a ) h f^{\prime}(a) \approx \frac{f(ah)-f(a)}{h} f′(a)≈hf(ah)−f(a) 在有限差分方法中我们将“离散化”空间域和时间间隔 x、y 和 t。我们可以这样写 x i i Δ x y j j Δ y t k k Δ t \begin{aligned} x_ii \Delta x\\ y_jj \Delta y\\ t_kk \Delta t \end{aligned} xiiΔxyjjΔytkkΔt 正如我们所看到的 i 、 j i、j i、j 和 k k k 分别是 x 、 y x、y x、y 和 t t t 的每个差异的步骤。我们想要的是解 u u u即 u ( x , y , t ) u i , j k u(x, y, t)u_{i, j}^k u(x,y,t)ui,jk 请注意 k k k 是上标表示 u u u 的时间步长。我们可以使用有限差分法写出上面的热方程如下所示 u i , j k 1 − u i , j k Δ t − α ( u i 1 , j k − 2 u i , j k u i − 1 , j k Δ x 2 u i , j 1 k − 2 u i , j k u i , j − 1 k Δ y 2 ) 0 \frac{u_{i, j}^{k1}-u_{i, j}^k}{\Delta t}-\alpha\left(\frac{u_{i1, j}^k-2 u_{i, j}^ku_{i-1, j}^k}{\Delta x^2}\frac{u_{i, j1}^k-2 u_{i, j}^ku_{i, j-1}^k}{\Delta y^2}\right)0 Δtui,jk1−ui,jk−α(Δx2ui1,jk−2ui,jkui−1,jkΔy2ui,j1k−2ui,jkui,j−1k)0 如果我们通过 Δ x Δ y \Delta x\Delta y ΔxΔy 排列上面的方程我们得到最终的方程 u i , j k 1 γ ( u i 1 , j k u i − 1 , j k u i , j 1 k u i , j − 1 k − 4 u i , j k ) u i , j k u_{i, j}^{k1}\gamma\left(u_{i1, j}^ku_{i-1, j}^ku_{i, j1}^ku_{i, j-1}^k-4 u_{i, j}^k\right)u_{i, j}^k ui,jk1γ(ui1,jkui−1,jkui,j1kui,j−1k−4ui,jk)ui,jk 其中 γ α Δ t Δ x 2 \gamma\alpha \frac{\Delta t}{\Delta x^2} γαΔx2Δt
对于我们的模型我们取 Δ x 1 \Delta x1 Δx1 和 α 2.0 \alpha2.0 α2.0。现在我们可以使用 Python 代码以数值方式解决这个问题以查看各处的温度用 i i i 和 j j j 表示和随时间变化的温度用 k k k 表示。我们首先导入所有必要的库然后设置边界和初始条件。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimationplate_length 50
max_iter_time 1000alpha 2.0
delta_x 1delta_t (delta_x ** 2)/(4 * alpha)
gamma (alpha * delta_t) / (delta_x ** 2)u np.empty((max_iter_time, plate_length, plate_length))u_initial 0.0u_top 100.0
u_left 0.0
u_bottom 0.0
u_right 0.0u.fill(u_initial)u[:, (plate_length-1):, :] u_top
u[:, :, :1] u_left
u[:, :1, 1:] u_bottom
u[:, :, (plate_length-1):] u_right
我们已经设置了初始条件和边界条件让我们根据上面推导的有限差分方法编写计算函数。
def calculate(u):for k in range(0, max_iter_time-1, 1):for i in range(1, plate_length-1, delta_x):for j in range(1, plate_length-1, delta_x):u[k 1, i, j] gamma * (u[k][i1][j] u[k][i-1][j] u[k][i][j1] u[k][i][j-1] - 4*u[k][i][j]) u[k][i][j]return u让我们准备绘图函数以便我们可以将解对于每个 k可视化为热图。我们使用Matplotlib库它很容易使用。
参阅一计算思维
参阅二亚图跨际