人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Python光學仿真數(shù)值分析求解波動方程繪制波包變化圖

發(fā)布日期:2021-12-22 13:52 | 文章來源:源碼之家

波動方程數(shù)值解

波動方程是三大物理方程之一,也就是弦振動方程,其特點是時間與空間均為二階偏導數(shù)。其自由空間解便是我們熟知的三角函數(shù)形式,也可以寫成自然虛指數(shù)形式。

一般來說,既然有了精確的解析解,那也就沒必要再去做不精確的數(shù)值模擬,但數(shù)值模擬的好處有兩個,一是避免無窮小,從而在思維上更加直觀;二是頗具啟發(fā)性,對于一些解析無解的情況也有一定的處理能力。

對此,我們首先考慮一維波動方程

import numpy as np
import matplotlib.pyplot as plt
def set_y0(x,k,L):
 y = np.zeros_like(x)
 y[x<L] = np.sin(k*x[x<L])*np.sin(np.abs(x[x<L]*np.pi/L))
 return y
if __name__ == "__main__":
 x = np.linspace(0,10,1000)
 k = np.pi*2/1.064
 L = 5
 y = set_y0(x,k,L)
 plt.plot(x,y)
 plt.show()

其形狀為

現(xiàn)考慮讓這個光波在 [ 0 , L ] 范圍內(nèi)往返傳播,在此采用Dirichlet邊界條件,取

至此,我們得到了光場的所有信息,原則上可以預測這個波包的所有行為,其迭代過程為

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 in range(2,len(t)):
  y[n] = 2*y[n-1] - y[n-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是隨時間變化的參量,現(xiàn)有的matplotlib.pyplot已經(jīng)無法滿足我們繪制動態(tài)圖片的需求,所以引入animation來進行繪制,其代碼為

import matplotlib.animation as animation
#輸入時間,自變量,因變量,圖題標記
def drawGif(t,x,ys,mark="time="):
 tAxis = np.linspace(0,len(t)-1,100).astype(int)
 fig = plt.figure()
 ax = fig.add_subplot(111,xlim=(0,10),ylim=(-1.5,1.5))
 ax.grid()
 line, = ax.plot([],[],lw=0.2)
 time_text = ax.text(0.1,0.9,'',transform=ax.transAxes)
 def init():
  line.set_data([],[])
  time_text.set_text("")
  return line, time_text
 def animate(i):
  y = ys[i]
  line.set_data(x,y)
  time_text.set_text(mark+str(t[i]))
  return line, time_text
 # 動態(tài)圖繪制命令
 # 輸入分別為畫圖窗口,動畫函數(shù),動畫函數(shù)輸入變量,延時,初始函數(shù)
 ani = animation.FuncAnimation(fig, animate, tAxis,
  interval=200, init_func=init)
 #通過imagemagick引擎來保存gif
 ani.save('wave.gif',writer='imagemagick')
 plt.show()
if __name__ == "__main__":
 x = np.linspace(0,10,1000)
 t = np.linspace(0,12,2041)
 k = np.pi*2/1.064
 L = 5
 y = wave1d(x,t,k,L)
 drawGif(t,x,y)

得到結(jié)果為

這個圖雖然很符合我們的預期,但有些物理過程并不清晰,我們不妨把初始波包設(shè)置為只有一個波峰的孤波

def set_y0(x,k,L):
 y = np.zeros_like(x)
 y[x<L] = np.sin(np.abs(x[x<L]*np.pi/L))
 return y

其圖像為

我們可以清晰地看到,正弦波通過腔壁后,其震動方向發(fā)生了變化,此即半波損失。

以上就是Python光學仿真數(shù)值分析求解波動方程繪制波包變化圖的詳細內(nèi)容,更多關(guān)于Python數(shù)值分析求解波動方程繪制波包變化圖的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部