介绍
本篇内容介绍了“Python光学仿真数值分析怎么求解波动方程绘制波包变化图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
波动方程数值解
波动方程是三大物理方程之一,也就是弦振动方程,其特点是时间与空间均为二阶偏导数。其自由空间解便是我们熟知的三角函数形式,也可以写成自然虚指数形式。
一般来说,既然有了精确的解析解,那也就没必要再去做不精确的数值模拟,但数值模拟的好处有两个,一是避免无穷小,从而在思维上更加直观;二是颇具启发性,对于一些解析无解的情况也有一定的处理能力。
对此,我们首先考虑一维波动方程
import numpy as np import matplotlib.pyplot  as plt def set_y0 (x, k, L): ,,,y =, np.zeros_like (x) ,,,y [x其形状为
现考虑让这个光波在[0,L]范围内往返传播,在此采用狄利克雷边界条件,取
至此,我们得到了光场的所有信息,原则上可以预测这个波包的所有行为,其迭代过程为
def wave1d (x, t, k, L): ,,,dx =, x [1] - x [0] ,,,dt =, t [1] - t [0] ,,,d2 =, (dt/dx) * * 2 ,,,y =, np.zeros ((len (t) len (x))) ,,,y [0,:],=, set_y0 (x, k, L) ,,,y [1:],=, set_y0 (x-dt, k, L) ,,,for n 拷贝范围(2,len (t)): ,,,,,,,y [n],=, 2 * y (n - 1),安康;y[2],安康;d2 * 2 * y (n - 1) ,,,,,,,y (n, 1:), +=, d2 * y [n - 1, 1): ,,,,,,,y (n: 1), +=, d2 * y [n - 1, 1:] ,,,,,,,#边界条件 ,,,,,,,y (n, 0),=0 ,,,,,,,y [n, 1],=, 0,,, ,,,return y由于y y y是随时间变化的参量,现有的<代码> matplotlib。pyplot> 代码已经无法满足我们绘制动态图片的需求,所以引入<代码> 代码>动画来进行绘制,其代码为
import matplotlib.animation as 动画 #输入时间,自变量,因变量,图题标记 def drawGif (t, x, y,马克=?笆奔?: ,,,tAxis =, np.linspace (-1100 0, len (t)) .astype (int) ,,,fig =, plt.figure () ,,,ax =, fig.add_subplot(111年,xlim=(0, 10), ylim=(-1.5, 1.5)) ,,,ax.grid () ,,,,,=,ax.plot ([] [], lw=0.2) ,,,time_text =, ax.text(0.1, 0.9, & # 39; & # 39;,变换=ax.transAxes) ,,,def init (): ,,,,,,,line.set_data ([], []) ,,,,,,,time_text.set_text (“”) ,,,,,,,return ,, time_text ,, ,,,def 动画(我): ,,,,,,,y =, y[我] ,,,,,,,line.set_data (x, y) ,,,,,,,time_text.set_text (mark + str (t[我])) ,,,,,,,return 行,time_text ,,,#,动态图绘制命令 ,,,#,输入分别为画图窗口,动画函数、动画函数输入变量,延时,初始函数 ,,,ani =, animation.FuncAnimation(无花果,动画,,出租车, ,,,,,,,间隔=200,,init_func=init) ,,,#通过imagemagick引擎来保存gif ,,,ani.save (& # 39; wave.gif& # 39;,作家=& # 39;imagemagick # 39;) ,,,plt.show () if __name__ ==,“__main__": ,,,x =, np.linspace (0, 1000) ,,,t =, np.linspace (0, 2041) ,,,k =np.pi * 2/1.064 ,,,L =5 ,,,y =, wave1d (x, t, k, L) ,,,drawGif (t, x, y)得到结果为
这个图虽然很符合我们的预期,但有些物理过程并不清晰,我们不妨把初始波包设置为只有一个波峰的孤波
def set_y0 (x, k, L): ,,,y =, np.zeros_like (x) ,,,y [xPython光学仿真数值分析怎么求解波动方程绘制波包变化图