связанные дифференциальные уравнения
Уравнения имеют форм -факторы, обозначаемые Fxx, Fxy, Fyy и т. Д., Которые интегрированы с размером среднеквадратичных пучков, как показано ниже на изображении. КООФФИКАЦИИ СОЕДИНЕННЫХ ДЕГОТОВОЕ Уравнения
Термины fxx, fxy, fyy, и т. Д. Собственные значения матрицы переноса связанных дифференциальных уравнений, упомянутых выше.
Функция Фактора определяется следующим образом: < /p>
def Fxx(t,x,y,z):
x=x*1000
y=y*1000
z=z*1000
fxx=((x**2+t)**(-5/2))*((y**2+t)**(-1/2))*((gamma**2*z**2+t)**(-1/2))
return fxx*1e15
< /code>
Этот форм -фактор называется внутри функции maxexix ниже, в которой вычисляются элементы одного из столбцов матрицы передачи. < /p>
def Maxexix(a,t,cc,xenv,yenv,zenv):
index=int(((t%lattlen)/lattlen)*steps)
rx=xenv[index]
ry=yenv[index]
rz=zenv[index]
fxz=quad(Fxz,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
fxz=cc*fxz[0]
fxy=quad(Fxy,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
fxy=cc*fxy[0]
fyz=quad(Fyz,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
fyz=cc*fyz[0]
fxx=quad(Fxx,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
fxx=cc*fxx[0]
fyy=quad(Fyy,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
fyy=cc*fyy[0]
fzz=quad(Fzz,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
fzz=cc*fzz[0]
spx=quad(Ix,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
spx=cc*spx[0]
spy=quad(Iy,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
spy=cc*spy[0]
spz=quad(Iz,0,np.inf,args=(rx,ry,rz),limit=100,epsabs=1e-5)
spz=cc*spz[0]
a12=(rx*ry*fxy)
a1=(kmag(t)+((3*e**2)/rx**4)-spx+(3*rx**2*fxx))
a13=(rx*rz*fxz)
a2=(-kmag(t)+((3*e**2)/ry**4)-spy+(3*ry**2*fyy))
a23=(ry*rz*fyz)
a3=(kzmag(t)+(3*(elong/gamma**2)**2/rz**4)-spz+(3*gamma**2*rz**2*fzz))
ax=a[1]
axp=-a1*a[0]-a12*a[2]-(gamma**2*a13)*a[4]
ex=a[3]
exp=-a12*a[0]-a2*a[2]-(gamma**2*a23)*a[4]
ix=a[5]
ixp=-a13*a[0]-a23*a[2]-a3*a[4]
return [ax,axp,ex,exp,ix,ixp]
< /code>
Эта функция интегрирована с использованием odeint следующим образом: < /p>
axsol=odeint(Maxexix,ax0,s,args=(k,rx,ry,rz))
aysol=odeint(Mayeyiy,ay0,s,args=(k,rx,ry,rz))
azsol=odeint(Mizxizyaz,az0,s,args=(k,rx,ry,rz))
bxsol=odeint(Mbxfxjx,bx0,s,args=(k,rx,ry,rz))
bysol=odeint(Mbyfyjy,by0,s,args=(k,rx,ry,rz))
bzsol=odeint(Mjzxjzybz,bz0,s,args=(k,rx,ry,rz))
< /code>
Каждое из этих решений дает 6 элементов одного столбца матрицы переноса 6x6.
Этот Odeint занимает слишком много времени, если он застрял в расчете FormFactors.
Количество шагов для Odeint составляет 500, т.е. о. RX, RY, RZ на 1000 и вытащили знаменатель из каждого кронштейна FXX и заменив 1E6*dt = dt, у меня остался фактор 1E15, который был умножен в команде возврата. Это помогло сходило интеграл, но для решения простого интеграла требуется слишком много времени. 9*500 Quad Commands занимают более 15 минут = 900 секунд.>
Подробнее здесь: https://stackoverflow.com/questions/789 ... ide-odeint
Scipy.integrate.quad затрагивает слишком много времени, чтобы превышать при использовании внутри odeint ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение