Scipy.integrate.quad затрагивает слишком много времени, чтобы превышать при использовании внутри odeintPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Scipy.integrate.quad затрагивает слишком много времени, чтобы превышать при использовании внутри odeint

Сообщение Anonymous »

связанные дифференциальные уравнения
Уравнения имеют форм -факторы, обозначаемые 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»