Как использоватьsolve_ivp для решения уравнений в частных производных спектральным методом? ⇐ Python
Как использоватьsolve_ivp для решения уравнений в частных производных спектральным методом?
Я хочу использовать спектральный метод для решения уравнений в частных производных. Такие уравнения, формула, начальное условие: u(t=0,x)=(a^2)*sech(x),u'_t (t=0)=0.
Чтобы решить эту проблему, я использую Python со спектральным методом. Ниже приведен код:
импортировать numpy как np из scipy.integrate importsolve_ivp из scipy.fftpack импортировать разницу как psdiff #правая часть уравнений защита f(t,u): uxx= psdiff(u[N:], period=L,order=2) du1dt=u[:N] du2dt =a**2*uxx dudt=np.append(du1dt,du2dt) вернуть дадт а=1 амин=-40;bмакс=40 L=bmax-амин;N=256 дельта налог=L/N x=np.arange(amin,bmax,deltax) u01 = 2*np.cosh(x)**(-1) u02=np.zeros(N) # у0 начальный = np.append(u01,u02) sola1 =solve_ivp(f, t_span=[0,40],y0=inital,args=(a,)) импортировать matplotlib.pyplot как plt рис, топор = plt.subplots() ax.plot(x,sola1.y[:N,5]) plt.show() Ниже приведен ожидаемый результат
ожидаемый результат.
Мой код Python может работать, но я не могу получить ожидаемый результат и не могу найти проблему. Ниже приведен результат моего кода Python: мой результат
-----------------------------Обновление----------------- ----------------------------- Я также пробую новый код, но все равно не могу решить
импортировать matplotlib.pyplot как plt импортировать numpy как np из scipy.integrate импортировать odeint из scipy.fftpack импортировать разницу как psdiff из цепочки импорта itertools def lambdifide_odes(y,t,a): # uxx =- (1j)**2*k**2*u[:N] u1=y[::2] u2=y[1::2] dudt=np.empty_like(y) du1dt=dudt[::2] du2dt=dudt[1::2] du1dt=u2 uxx=psdiff(u1,order=2, period=L) du2dt=a**2*uxx вернуть дадт а=1 амин=-40;bмакс=40 L=bmax-амин;N=256 дельта налог=L/N x=np.arange(amin,bmax,deltax) u01 = 2*np.cosh(x)**(-1) u02=np.zeros(N) начальный = np.array(список(chain.from_iterable(zip(u01,u02)))) t0=np.linspace(0,40,100) sola1 = odeint(lambdifide_odes,y0=initial,t=t0,args=(a,)) рис, топор = plt.subplots() ax.plot(x,sola1[20,::2]) plt.show()
Я хочу использовать спектральный метод для решения уравнений в частных производных. Такие уравнения, формула, начальное условие: u(t=0,x)=(a^2)*sech(x),u'_t (t=0)=0.
Чтобы решить эту проблему, я использую Python со спектральным методом. Ниже приведен код:
импортировать numpy как np из scipy.integrate importsolve_ivp из scipy.fftpack импортировать разницу как psdiff #правая часть уравнений защита f(t,u): uxx= psdiff(u[N:], period=L,order=2) du1dt=u[:N] du2dt =a**2*uxx dudt=np.append(du1dt,du2dt) вернуть дадт а=1 амин=-40;bмакс=40 L=bmax-амин;N=256 дельта налог=L/N x=np.arange(amin,bmax,deltax) u01 = 2*np.cosh(x)**(-1) u02=np.zeros(N) # у0 начальный = np.append(u01,u02) sola1 =solve_ivp(f, t_span=[0,40],y0=inital,args=(a,)) импортировать matplotlib.pyplot как plt рис, топор = plt.subplots() ax.plot(x,sola1.y[:N,5]) plt.show() Ниже приведен ожидаемый результат
ожидаемый результат.
Мой код Python может работать, но я не могу получить ожидаемый результат и не могу найти проблему. Ниже приведен результат моего кода Python: мой результат
-----------------------------Обновление----------------- ----------------------------- Я также пробую новый код, но все равно не могу решить
импортировать matplotlib.pyplot как plt импортировать numpy как np из scipy.integrate импортировать odeint из scipy.fftpack импортировать разницу как psdiff из цепочки импорта itertools def lambdifide_odes(y,t,a): # uxx =- (1j)**2*k**2*u[:N] u1=y[::2] u2=y[1::2] dudt=np.empty_like(y) du1dt=dudt[::2] du2dt=dudt[1::2] du1dt=u2 uxx=psdiff(u1,order=2, period=L) du2dt=a**2*uxx вернуть дадт а=1 амин=-40;bмакс=40 L=bmax-амин;N=256 дельта налог=L/N x=np.arange(amin,bmax,deltax) u01 = 2*np.cosh(x)**(-1) u02=np.zeros(N) начальный = np.array(список(chain.from_iterable(zip(u01,u02)))) t0=np.linspace(0,40,100) sola1 = odeint(lambdifide_odes,y0=initial,t=t0,args=(a,)) рис, топор = plt.subplots() ax.plot(x,sola1[20,::2]) plt.show()
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как лучше всего решать уравнения в частных производных в Python точно, но быстро
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-