Python光学仿真数值分析怎么求解波动方程绘制波包变化图

  介绍

本篇内容介绍了“Python光学仿真数值分析怎么求解波动方程绘制波包变化图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

波动方程数值解

波动方程是三大物理方程之一,也就是弦振动方程,其特点是时间与空间均为二阶偏导数。其自由空间解便是我们熟知的三角函数形式,也可以写成自然虚指数形式。

一般来说,既然有了精确的解析解,那也就没必要再去做不精确的数值模拟,但数值模拟的好处有两个,一是避免无穷小,从而在思维上更加直观;二是颇具启发性,对于一些解析无解的情况也有一定的处理能力。

对此,我们首先考虑一维波动方程

 Python光学仿真数值分析怎么求解波动方程绘制波包变化图

import  numpy  as  np   import  matplotlib.pyplot  as  plt   def  set_y0 (x, k, L):   ,,,y =, np.zeros_like (x)   ,,,y [x

其形状为

 Python光学仿真数值分析怎么求解波动方程绘制波包变化图

现考虑让这个光波在[0,L]范围内往返传播,在此采用狄利克雷边界条件,取

 Python光学仿真数值分析怎么求解波动方程绘制波包变化图

至此,我们得到了光场的所有信息,原则上可以预测这个波包的所有行为,其迭代过程为

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)

得到结果为

 Python光学仿真数值分析怎么求解波动方程绘制波包变化图

这个图虽然很符合我们的预期,但有些物理过程并不清晰,我们不妨把初始波包设置为只有一个波峰的孤波

def  set_y0 (x, k, L):   ,,,y =, np.zeros_like (x)   ,,,y [x

Python光学仿真数值分析怎么求解波动方程绘制波包变化图