我的目标是在2D中制作球体的密度热图。当我使用矩形域时,线下方的绘图代码起作用。但是,我试图将代码用于循环域。球体的半径是1.我到目前为止的代码是:
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
的{{1}}幂次乘以legendre多项式其中参数是legendre多项式的l
。
在python: integrating a piecewise function中,我学会了如何在求和中使用勒让德多项式,但该方法略有不同,对于绘图,我需要一个函数cos(theta)
。
这是绘图代码。
T(x, y)
我在Mathematica中制作了该剧情,以供我最终目标的参考