Sympy также имеет функцию, которая вычисляет числовые веса и квадратурные точки для Гаусса-Лежандра согласно документации .Эта функция может давать результаты для любой желаемой точности.Но если вы настаиваете на символических результатах, тогда, пока n
в известном целом числе, следующая функция может выполнить работу:
import sympy as sp
sp.init_printing()
x = sp.Symbol('x')
def gauss_legendre(n,x):
Pnx = sp.legendre(n,x)
Pp = sp.diff(Pnx,x)
xi = sp.solve( Pnx, x )
wi = [ sp.simplify(2/(1 - xj**2)/(Pp.subs(x,xj))**2) for xj in xi ]
return xi, wi
В качестве теста, для n = 5
это дает
, что соответствует результатам Википедии .