NumPy提供np.polynomial.legendre.leggauss()
函数来计算高斯-勒让德积分的采样点和权重。我试图使用这个函数来获得一个四边形的2D点和权重。我可以使用如下所示的函数:
def gauss2D(n):
x, w = np.polynomial.legendre.leggauss(n)
weights = []
gauss_pts = []
for i in range(n):
for j in range(n):
wts = w[i] * w[j]
weights.append(wts)
g = [x[i], x[j]]
gauss_pts.append(g)
return np.array(weights), np.array(gauss_pts)
它为n=2
集成点输出以下内容:
weights
[1. 1. 1. 1.]
points
[[-0.57735027 -0.57735027]
[-0.57735027 0.57735027]
[ 0.57735027 -0.57735027]
[ 0.57735027 0.57735027]]
如果可能的话,我想通过使用NumPy数组来摆脱for循环,但我的尝试(参见下面的函数)并没有生成正确的结果。
def gauss2Dnumpy(n):
x, w = np.polynomial.legendre.leggauss(n)
weights = np.concatenate((w, w))
gauss_pts = np.zeros((n*2, n))
for i in range(n*2):
for j in range(n):
gauss_pts[i] = x[j], x[j]
return weights, gauss_pts
有没有一种方法可以在不使用for循环的情况下实现这一点?
1条答案
按热度按时间xe55xuns1#
这将是: