Моя цель - сделать график плотности плотности тепла сферы в 2D. Код построения под строкой работает, когда я использую прямоугольные домены. Тем не менее, я пытаюсь использовать код для круговой области. Радиус сферы 1. код, который я до сих пор:Python: график плотности тепла в диске
from pylab import *
import numpy as np
from matplotlib.colors import LightSource
from numpy.polynomial.legendre import leggauss, legval
xi = 0.0
xf = 1.0
numx = 500
yi = 0.0
yf = 1.0
numy = 500
def f(x):
if 0 <= x <= 1:
return 100
if -1 <= x <= 0:
return 0
deg = 1000
xx, w = leggauss(deg)
L = np.polynomial.legendre.legval(xx, np.identity(deg))
integral = (L * (f(x) * w)[None,:]).sum(axis = 1)
c = (np.arange(1, 500) + 0.5) * integral[1:500]
def r(x, y):
return np.sqrt(x ** 2 + y ** 2)
theta = np.arctan2(y, x)
x, y = np.linspace(0, 1, 500000)
def T(x, y):
return (sum(r(x, y) ** l * c[:,None] *
np.polynomial.legendre.legval(xx, identity(deg)) for l in range(1, 500)))
T(x, y)
должна равняться сумме c
коэффициенты раз радиуса в зависимости от x
и y
к l
времени мощности полинома Лежандра где аргумент из полинома legendre равен cos(theta)
.
В python: integrating a piecewise function я научился использовать полиномы Лежандра в суммировании, но этот метод несколько отличается, и для построения графика мне нужна функция T(x, y)
.
Это код построения.
densityinterpolation = 'bilinear'
densitycolormap = cm.jet
densityshadedflag = False
densitybarflag = True
gridflag = True
plotfilename = 'laplacesphere.eps'
x = arange(xi, xf, (xf - xi)/(numx - 1))
y = arange(yi, yf, (yf - yi)/(numy - 1))
X, Y = meshgrid(x, y)
z = T(X, Y)
if densityshadedflag:
ls = LightSource(azdeg = 120, altdeg = 65)
rgb = ls.shade(z, densitycolormap)
im = imshow(rgb, extent = [xi, xf, yi, yf], cmap = densitycolormap)
else:
im = imshow(z, extent = [xi, xf, yi, yf], cmap = densitycolormap)
im.set_interpolation(densityinterpolation)
if densitybarflag:
colorbar(im)
grid(gridflag)
show()
Я сделал сюжет в Mathematica для справки о том, что моя конечная цель
Я думаю, что это интересный вопрос, но так, как формулировка настолько завернута в полиномы Лежандра и т. Д., Трудно понять, что вы действительно спрашиваете. Вы просто хотите знать, как сделать тепловую карту на диске? Это кажется интересным. Если это так, возможно, вы можете удалить этот вопрос и задать другой вопрос, который фокусируется именно на этом. – tom10
@ tom10 Я хотел бы знать, как сделать карту тепла на диске. Кроме того, я не совсем понимаю, как я буду применять суммирование полиномов Лежандра, так как я только что научился использовать его и не полностью понял его настройку. – dustin
Может быть, «тепловая карта на диске» и «обеспечить суммирование полиномов Лежандра», возможно, лучше, чем отдельные вопросы? – tom10