Решение уравнения Кортевега

advertisement
Решение уравнения Кортевега-де Фриза на Python
Постановка задачи
«Уравнение Кортевега — де Фриза» — нелинейное уравнение в частных
производных третьего порядка, играющее важную роль в теории нелинейных
волн, в основном гидродинамического происхождения. Впервые было
получено Жозефом Буссинеском в 1877 году, но подробный анализ был
проведён уже Дидериком Кортевегом и Густавом де Фризом в 1895 году.
Уравнение имеет вид:
Код программы
#!/usr/bin/env python
# -*- coding: utf-8 -*import numpy as nu, matplotlib as mat,math as m
import pylab
t1=input("Введите временной слой для построения:")
filename=raw_input("Введите имя файла для сохранения:")
c,dt,N,xm,A,s=(0.00005,0.0004,200,0.5,0.5,0.08)
dj=pylab.array([-2,-1,0,1,2])
jn=pylab.array([0,0,0,0,0])
dx=1./N
xmin = 0.0
xmax = 1.0
xlist = pylab.mlab.frange (xmin, xmax, dx)
pylab.ion()
dtdx1=dt/(2*dx)
dtdx2=c*dt/(2*dx**3)
N1=N-1
v=pylab.array([A*m.exp(-(j*dx-xm)**2/(2*s**2)) for j in xrange(0,N+1)])
for i in xrange(0,100000):
t=i*dt
if t>t1: break
for j in xrange(0,N+1):
if(j==0):
for it in xrange(2,5):
jn[it]=j+dj[it]
jn[0],jn[1]=(N1,N)
elif(j==1):
for it in xrange(1,5):
jn[it]=j+dj[it]
jn[0]=N
elif(j==N-1):
for it in xrange(0,4):
jn[it]=j+dj[it]
jn[4]=0
elif(j==N):
for it in xrange(0,3):
jn[it]=j+dj[it]
jn[3],jn[4]=(0,1)
else:
for it in xrange(0,5):
jn[it]=j+dj[it]
vn1=-dtdx1*v[jn[2]]*(v[jn[3]]-v[jn[1]])
vd=-dtdx2*(v[jn[4]]-2.0*v[jn[3]]+2.*v[jn[1]]-v[jn[0]])
v[j]=v[jn[2]]+vn1+vd
ylist=[v[j] for j in xrange(0,N+1)]
pylab.clf()
pylab.plot (xlist, ylist)
pylab.draw()
pylab.savefig(filename)
Результат
Для временного слоя t1 = 2
Для временного слоя t1 = 10
Используемые библиотеки
1) math – стандартная библиотека математических функций
2) numpy - это расширение языка , добавляющее поддержку больших
многомерных массивов и матриц, вместе с большой библиотекой
высокоуровневых математических функций для операций с этими
массивами.
ссылка: http://www.numpy.org
3) matplotlib(pylab) - библиотека на языке программирования Python
для визуализации данных двумерной (2D) графикой (3D графика также
поддерживается).
ссылка: http://matplotlib.sourceforge.net
Download