07 января 2008

Matplotlib

А это решение краевой задачи для уравнения теплопроводности. Симпатично, не правда ли?











Для построения этой поверхности необходимы:
вектор аргументов x vX, вектор аргументов t vT, двумерный массив значений функции vY (y(t,x)).

X,Y = meshgrid(vT,vX) # из двух векторов создаются два двумерных массива
Z = zeros((K, N), float) # двумерный массив из нулей

fig=figure()
ax = p3.Axes3D(fig)

# поверхность
for i in xrange(N):
     for j in xrange(K):
         Z[j,i] = u(X[j,i],Y[j,i])

ax.plot_wireframe(X,Y,Z) # построение поверхности в виде проволочной сетки

ax.set_xlabel('T')
ax.set_ylabel('X')
ax.set_zlabel('U')
show()


При этом кое-что добавилось в инклуды:
from numpy import *
from pylab import *
import math
import matplotlib.axes3d as p3


Поясню, что делает функция meshgrid:
>>> from numpy import *
>>> vX = arange(0,5)
>>> vX
array([0, 1, 2, 3, 4])
>>> vY = arange(0,3)
>>> vY
array([0, 1, 2])
>>> X,Y = meshgrid(vX,vY)
>>> X
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
>>> Y
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2]])

Комментариев нет: