Python 关联勒让德函数
您好,我正在编写Python代码,返回相关的Legendre函数。 在此零件上使用numpy poly1d函数Python 关联勒让德函数,python,numpy,Python,Numpy,您好,我正在编写Python代码,返回相关的Legendre函数。 在此零件上使用numpy poly1d函数 firstTerm = (np.poly1d([-1,0,1]))**(m/2.0) # HELP! 它产生一个错误,因为它只能提升为整数 有没有其他方法可以将所需函数的幂提高到1/2等?不能将poly1d的幂提高到半整数的原因是它不是多项式,因为它包含平方根 虽然原则上你可以自己正交化函数,或者用类似的东西构造函数,但是你最安全的选择是符号数学。嘿,我们已经有了!由于符号数学运算速
firstTerm = (np.poly1d([-1,0,1]))**(m/2.0) # HELP!
它产生一个错误,因为它只能提升为整数
有没有其他方法可以将所需函数的幂提高到1/2等?不能将
poly1d
的幂提高到半整数的原因是它不是多项式,因为它包含平方根
虽然原则上你可以自己正交化函数,或者用类似的东西构造函数,但是你最安全的选择是符号数学。嘿,我们已经有了!由于符号数学运算速度较慢,您可能应该使用sympy.lambdify
将每个函数转换为数字函数:
import sympy as sym
x = sym.symbols('x')
n = 3
m = 1
legfun_sym = sym.functions.special.polynomials.assoc_legendre(n,m,x)
legfun_num = sym.lambdify(x,legfun_sym)
print(legfun_sym)
print(legfun_num)
x0 = 0.25
print(legfun_sym.evalf(subs={x:x0}) - legfun_num(x0))
这张照片
-sqrt(-x**2 + 1)*(15*x**2/2 - 3/2)
<function <lambda> at 0x7f0a091976e0>
-1.11022302462516e-16
-sqrt(-x**2+1)*(15*x**2/2-3/2)
-1.11022302462516e-16
这似乎是有意义的(第一个是
x
处的符号函数,第二个表明lambdify
确实从函数创建了lambda
,最后一个是伪随机点处两个函数的数值差x0=0.25
,在机器精度范围内显然为零).您是否考虑过直接使用勒让德多项式:numpy.polynomies.Legendre模块将多项式转换为勒让德级数。我需要的是相关联的勒让德函数,其中非整数的幂似乎是个问题。您想要的是这些函数吗?我真正想要的是使用numpy获取相关联的勒让德函数。@GuillaumeJacquet不感谢您的修复!我不知道我有Python2的答案,我将不得不彻底检查我以前的帖子,并摆脱这些。。。