欢迎光临散文网 会员登陆 & 注册

用python模拟高度多模非线性光学系统中的热化

2021-04-07 22:57 作者:アリェス  | 我要投稿

import numpy as np
import math
import matplotlib.pyplot as plt
import random

Z=200
N=20*Z
dz=Z/N
z=np.linspace(0,Z,N+1)

L=20
N=L**2
k1=1
k2=1.5

H=np.diag(k2*np.ones((N-1)), 1)+k2*np.diag(np.ones((N-1)), -1)+k1*np.diag(np.ones((N-L)),L)+k1*np.diag(np.ones((N-L)),-L)  #哈密顿矩阵

w, v = np.linalg.eig(H)
idx_sorted = np.argsort(w)
V=v[:, idx_sorted]   #特征向量
W=w[idx_sorted]


a=np.zeros([L+2,L+2,len(z)],dtype=complex)  #a_mn
psi=np.zeros([L**2,len(z)],dtype=complex)   #光矢量
c2=np.zeros([L**2,len(z)])  #算出ci0的平方

xuan=(W>=1)*(W<=2)
c2[xuan,0]=1
for i in range(L**2):
   psi[:,0]+=np.sqrt(c2[i,0])*V[:,i]*np.exp(1j*2*np.pi*random.random())    #初始条件


#把psi转成amn
a[1:(L+1),1:(L+1),0]=psi[:,0].reshape(L,L)


for i in range(len(z)-1):
   s1=np.zeros([L+2,L+2],dtype=complex)     #必须设定类型为复数
   s2=np.zeros([L+2,L+2],dtype=complex)
   s3=np.zeros([L+2,L+2],dtype=complex)
   s4=np.zeros([L+2,L+2],dtype=complex)
   for m9 in range(L):
       m=m9+1
       for n9 in range(L):
           n=n9+1
           s1[m,n]=1j*(k1*(a[m-1,n,i]+a[m+1,n,i])+k2*(a[m,n-1,i]+a[m,n+1,i])+abs(a[m,n,i])**2*a[m,n,i])

   for m9 in range(L):
       m=m9+1
       for n9 in range(L):
           n=n9+1
           s2[m,n]=1j*(k1*(a[m-1,n,i]+s1[m-1,n]*dz/2+a[m+1,n,i]+s1[m+1,n]*dz/2)\
                       +k2*(a[m,n-1,i]+s1[m,n-1]*dz/2+a[m,n+1,i]+s1[m,n+1]*dz/2)\
                       +abs(a[m,n,i]+s1[m,n]*dz/2)**2*(a[m,n,i]+s1[m,n]*dz/2))

   for m9 in range(L):
       m=m9+1
       for n9 in range(L):
           n=n9+1
           s3[m,n]=1j*(k1*(a[m-1,n,i]+s2[m-1,n]*dz/2+a[m+1,n,i]+s2[m+1,n]*dz/2)\
                       +k2*(a[m,n-1,i]+s2[m,n-1]*dz/2+a[m,n+1,i]+s2[m,n+1]*dz/2)\
                       +abs(a[m,n,i]+s2[m,n]*dz/2)**2*(a[m,n,i]+s2[m,n]*dz/2))

   for m9 in range(L):
       m=m9+1
       for n9 in range(L):
           n=n9+1
           s4[m,n]=1j*(k1*(a[m-1,n,i]+s3[m-1,n]*dz+a[m+1,n,i]+s3[m+1,n]*dz)\
                       +k2*(a[m,n-1,i]+s3[m,n-1]*dz+a[m,n+1,i]+s3[m,n+1]*dz)\
                       +abs(a[m,n,i]+s3[m,n]*dz)**2*(a[m,n,i]+s3[m,n]*dz))

   for m9 in range(L):
       m=m9+1
       for n9 in range(L):
           n=n9+1
           a[m,n,i+1]=a[m,n,i]+1/6*(s1[m,n]+2*s2[m,n]+2*s3[m,n]+s4[m,n])*dz

           # a[m,n,i+1]=a[m,n,i]+1j*(k1*(a[m-1,n,i]+a[m+1,n,i])+k2*(a[m,n-1,i]+a[m,n+1,i])+abs(a[m,n,i])**2*a[m,n,i])*dz



for i in range(len(z)-1):
   psi[:,i+1]=a[1:(L+1),1:(L+1),i+1].ravel()    #从1开始赋值,0已经有了
   for j in range(L**2):
       c2[j,i+1]=abs(np.dot(V[:,j],psi[:,i+1]))**2




plt.figure()
plt.subplot(321)
plt.plot(W,c2[:,0])
plt.subplot(322)
plt.plot(W,c2[:,round(40/dz)])
plt.subplot(323)
plt.plot(W,c2[:,round(80/dz)])
plt.subplot(324)
plt.plot(W,c2[:,round(120/dz)])
plt.subplot(325)
plt.plot(W,c2[:,round(160/dz)])
plt.subplot(326)
plt.plot(W,c2[:,round(200/dz)])

plt.show()

用python模拟高度多模非线性光学系统中的热化的评论 (共 条)

分享到微博请遵守国家法律