Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关联勒让德函数_Python_Numpy - Fatal编程技术网

Python 关联勒让德函数

Python 关联勒让德函数,python,numpy,Python,Numpy,您好,我正在编写Python代码,返回相关的Legendre函数。 在此零件上使用numpy poly1d函数 firstTerm = (np.poly1d([-1,0,1]))**(m/2.0) # HELP! 它产生一个错误,因为它只能提升为整数 有没有其他方法可以将所需函数的幂提高到1/2等?不能将poly1d的幂提高到半整数的原因是它不是多项式,因为它包含平方根 虽然原则上你可以自己正交化函数,或者用类似的东西构造函数,但是你最安全的选择是符号数学。嘿,我们已经有了!由于符号数学运算速

您好,我正在编写Python代码,返回相关的Legendre函数。 在此零件上使用numpy 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的答案,我将不得不彻底检查我以前的帖子,并摆脱这些。。。