Решение уравнения Кортевега-де Фриза на 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