Как использоватьsolve_ivp для решения уравнений в частных производных спектральным методом?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использоватьsolve_ivp для решения уравнений в частных производных спектральным методом?

Сообщение Anonymous »


Я хочу использовать спектральный метод для решения уравнений в частных производных. Такие уравнения, формула, начальное условие: 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()
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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