Python和C++数学物理计算分形热力学静电学和波动方程

25 篇文章 0 订阅
22 篇文章 0 订阅

🎯要点

  1. 🎯数学逻辑和代码计算或可视化:🖊向下递归确定球面贝塞尔函数 | 🖊蒙特卡罗法模拟随机游走和放射性粒子衰减 | 🖊梯形规则积分算法 | 🖊高斯求积算法 | 🖊冯诺依曼拒绝(方法)生成加权随机分布 | 🖊牛顿-拉夫森搜索逐步搜索弦上两个质量矩阵问题解 | 🖊二分算法求解 | 🖊牛顿-拉夫森方法 | 🖊横截面的样条拟合 | 🖊最小二乘法拟合数据和抛物线 | 🖊四阶龙格库塔法常微分方程求解器 | 🖊亚当斯-巴什福斯-莫尔顿方法常微分方程求解器 | 🖊Numerov 算法求解束缚态能量的一维时间无关薛定谔方程 | 🖊龙格库塔算法求解束缚态能量的一维时间无关薛定谔方程 | 🖊求解空气阻力的抛射运动以及分析无摩擦情况 | 🖊离散傅里叶计算复数和实数 | 🖊快速傅里叶滤波和绘图 | 🖊莫莱小波计算连续小波变换 | 🖊金字塔算法计算离散小波变换。
  2. 🎯连续非线性动态计算和可视化:🖊生成逻辑图的分叉图 | 🖊增长函数逻辑图分叉图的李亚普诺夫系数 | 🖊增长函数逻辑图香农熵 | 🖊计算物种竞争 Lotka-Volterra 模型。
  3. 🎯分形和统计增长模型:🖊三维模拟蕨类植物的生长 | 🖊模拟矿物形成枝晶 | 🖊模拟二维元胞自动机 | 🖊相干噪声随机图转换为山形图像。
  4. 🎯热力学和费曼路径积分:🖊一维伊辛链的大都会算法 | 🖊模拟二维伊辛模型,计算态密度并从中计算内能 | 🖊费曼路径积分确定基态概率,使用大都会算法模拟经典轨迹 | 🖊费曼路径积分计算量子粒子在引力场中的路径。
  5. 🎯分子动力学:🖊维尔莱算法模拟二维分子动力。
  6. 🎯有限差分静电学:🖊求解拉普拉斯方程电势。
  7. 🎯时间步进热流:🖊有限差分求解热方程,绘制三维图 | 🖊克兰克-尼科尔森方法求一维时间热方程。
  8. 🎯波动方程:🖊动画模拟弦时间波动 | 🖊数值解振动膜的波动 | 🖊量子包和电磁。

🍇Python振荡器角频率振幅条件计算

振荡器模型数学定义,给出坐标 x x x 作为时间 t t t 函数的方程:
x = A cos ⁡ ( ω t + ϕ ) x=A \cos (\omega t+\phi) x=Acos(ωt+ϕ)
我们想要详细了解当变量 t t t 的值更改时会发生什么:

  • 我们选择从初始时刻 t = 0 t=0 t=0 开始增加 t t t 的值。
  • 我们计算 x x x​坐标的值。
  • 我们在图表中显示了点状物体在不同时刻的位置。
import numpy as np
import matplotlib.pyplot as plt

omega = 2*np.pi / 10   
A = 0.15       
phi = 0        

t = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.7, 6.3, 7.1, 7.7, 8.2, 8.7])   # time (s)
x = A * np.cos(omega*t + phi)
y = np.zeros(len(t)) 

fig = plt.figure(1, (14, 3))
ax = fig.add_subplot(111)

plt.plot(x, y, 'o')
plt.axhline(color = 'gray')
plt.axvline(color = 'cyan')
plt.xlim(-0.2, 0.2)
ax.set_xlabel('x (m)', fontsize = 14)

for i, time in enumerate(t):
    #print(i, time)
    x_coord = A * np.cos(omega*time + phi)
    time = str(time)+' s'
    ax.annotate(time, xy = (x_coord, 0.01), xycoords = 'data', rotation = 90, fontsize = 11 )

在此图中,我们可以读取时间值,并在 t t t 值不断增加时跟踪物体的位置。同时显示在许多不同时刻占据的位置,我们将获得轨迹图。

坐标 x x x 值的图形给出了笛卡尔平面 t O x t O x tOx 中位置与时间 t t t 的函数关系,即 x x x - t t t 曲线。

T = 2 * np.pi / omega
t = np.linspace(0, 3*T, 101)
x = A * np.cos(omega* t)

plt.figure(2)
plt.plot(t, x, '-', color = 'blue', linewidth = 3)
plt.xlabel('time $t$ (s)', fontsize = 14)
plt.ylabel(' $x$ (m)', fontsize = 14)
plt.axhline(color = 'gray')
plt.axvline(color = 'gray')
plt.axvline(x = T)
plt.axvline(x = 2 * T)

print()
print ('period T = ', T, 's')
print()
period T =  10.0 s

我们选择两个不同的角频率值,并在同一图中同时显示两条相应的 x − t x-t xt 曲线:

omega = 0.628
T = 2*np.pi/omega
t = np.linspace(0, 2 * T, 101)
x = A * np.cos(omega*t)
omega1 = 1.2

x_star = A * np.cos(omega1*t)

plt.figure(3)
plt.plot(t, x, '-', color = 'blue', linewidth = 3)
plt.plot(t, x_star, '--', color = 'orange', linewidth = 3)
plt.xlabel('time $t$ (s)')
plt.ylabel(' $x$ (m)')
plt.axhline(color = 'gray')
plt.axvline(color = 'gray')

变量之间的关系:

角频率 ω \omega ω,周期: T = 2 π ω T=\frac{2 \pi}{\omega} T=ω2π,频率: f = 1 T ω = 2 π f \begin{gathered}f=\frac{1}{T} \\ \omega=2 \pi f\end{gathered} f=T1ω=2πf

我们在同一图中比较了选择两个不同的幅度值而获得的 x − t x-t xt 曲线,同时保持固定的角频率(和初始相位)。

omega = 0.628
T = 2*np.pi/omega
t = np.linspace(0, 2 * T, 101)
x = A * np.cos(omega*t)
A1 = 0.10
x_star = A1 * np.cos(omega*t)

plt.figure(4)
plt.plot(t, x, '-', color = 'blue', linewidth = 3)
plt.plot(t, x_star, linestyle = 'dotted', color = 'green', linewidth = 3)
plt.axhline(color = 'gray')
plt.xlabel('time  $t$ (s)')
plt.ylabel(' $x$ (m)')

我们比较对应于初始相位的两个不同值的 x − t x-t xt 曲线,以指定幅度和角频率的值。

T = 2 * np.pi / omega
t = np.linspace(0, 2 * T, 101)
x = A * np.cos(omega*t)

phi = np.pi/2

x_star = A * np.cos(omega*t + phi)

#z = x + x_star

plt.figure(5)
plt.plot(t, x, '-', color = 'blue', linewidth = 3)
plt.plot(t,x_star, linestyle = 'dashdot', color = 'lime', linewidth = 3)
#plt.plot(t, z, '-', color = 'yellow', linewidth = 5)
plt.axhline(color = 'gray')
plt.xlabel('time  $t$ (s)')
plt.ylabel(' $x$ (m)')
plt.axvline(color = 'gray')
plt.axvline(x = T, color = 'cyan')

运动方程

根据瞬时速度 v = d x / d t v=d x / d t v=dx/dt 的定义,可以得出:
v = d d t [ A cos ⁡ ( ω t + ϕ ) ] = − A ω sin ⁡ ( ω t + ϕ ) v=\frac{d}{d t}[A \cos (\omega t+\phi)]=-A \omega \sin (\omega t+\phi) v=dtd[Acos(ωt+ϕ)]=Aωsin(ωt+ϕ)
因此,速度值也在最大值 v max ⁡ = + A ω v_{\max }=+A \omega vmax=+Aω 和最小值 v min ⁡ = − A ω v_{\min }=-A \omega vmin=Aω 之间振荡,并且具有表征速度变化的相同周期。相对于时间协调 x x x

参阅一:计算思维

参阅二:亚图跨际

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一个非常强大的编程语言,可以用来计算分形维数。分形维数是描述分形对象复杂度的一个指标,可以帮助我们了解和分析自然界中的复杂结构。 要计算分形维数,首先需要定义一个分形对象。通常,分形对象是一个具有自相似性的图形,即无论怎样放大或缩小,都可以看到相似的图形结构。常见的分形图像有科赫雪花、曼德勃罗集合等。 使用Python进行分形维数的计算可以通过以下步骤完成: 1. 导入所需的库,例如matplotlib、numpy等。 2. 定义分形对象的初始状态,可以使用图片、数学公式或图形绘制函数等方法。 3. 根据分形对象的定义,使用递归或迭代的方法进行图形的生成。每次迭代都会对图形进行细分或变形,并按照一定规则生成新的图形。可以通过循环的方式重复迭代,直到得到满足要求的图形。 4. 计算分形维数。分形维数一般通过盒计数法进行计算。即将生成的分形对象放入不同大小的盒子中,统计盒子中包含的分形点的数量,然后根据盒子的大小与盒子中的点数之间的关系,计算分形维数。 通过编写Python程序,我们可以定义分形对象的生成过程,并结合盒计数法计算分形维数。这样,我们就能够使用Python精确地计算分形对象的维数,并通过可视化的方式展示出来。 总之,Python是一种非常适合计算分形维数的编程语言,通过其强大的功能和丰富的库,我们可以轻松地计算和分析各种复杂的分形结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值