Python 属性错误:';poly1d';对象没有属性';是可交换的';
我正在尝试集成函数Python 属性错误:';poly1d';对象没有属性';是可交换的';,python,sympy,polynomials,integrate,Python,Sympy,Polynomials,Integrate,我正在尝试集成函数I,它包含勒让德多项式leg\u f: import math import numpy as np from mpmath import * from sympy import * from scipy.special import legendre n = 3 c = lambda h_c,z,R : (z**2+h_c**2)**0.5 c_supp = lambda h_c,z,R : (z**2+h_c**2)**(-n) x = lambda h_x,z
I
,它包含勒让德多项式leg\u f
:
import math
import numpy as np
from mpmath import *
from sympy import *
from scipy.special import legendre
n = 3
c = lambda h_c,z,R : (z**2+h_c**2)**0.5
c_supp = lambda h_c,z,R : (z**2+h_c**2)**(-n)
x = lambda h_x,z,R : -4*R*(R-h_x)/c(h_x,z,R)**2
leg_f = lambda h_l,z,R : legendre(n-1,(1-0.5*x(h_l,z,R))/(1-x(h_l,z,R))**0.5)
f_f_symb = lambda h_v,z,R : hyper((n, 0.5), (1), (-4*R*(R-h_v)/(z**2+h_v**2)))
I = lambda h_i,z_i,R_i : c_supp(h_i,z_i,R_i)*(1-x(h_i,z_i,R_i))**(-n/2)*leg_f(h_i,z_i,R_i)
h_i,z_i,R_i = symbols('h_i z_i R_i')
int_result = integrate(I(h_i,z_i,R_i), (z_i, 0, np.inf))
但是我得到了错误
Traceback (most recent call last):
File "test.py", line 99, in <module>
int_result = integrate(I(h_i,z_i,R_i), (z_i, 0, np.inf))
File "/Users/Library/Python/2.7/lib/python/site-packages/sympy/integrals/integrals.py", line 1276, in integrate
integral = Integral(*args, **kwargs)
File "/Users/Library/Python/2.7/lib/python/site-packages/sympy/integrals/integrals.py", line 75, in __new__
obj = AddWithLimits.__new__(cls, function, *symbols, **assumptions)
File "/Users/Library/Python/2.7/lib/python/site-packages/sympy/concrete/expr_with_limits.py", line 389, in __new__
obj.is_commutative = function.is_commutative # limits already checked
AttributeError: 'poly1d' object has no attribute 'is_commutative'
回溯(最近一次呼叫最后一次):
文件“test.py”,第99行,在
int_result=integrate(I(h_I,z_I,R_I),(z_I,0,np.inf))
文件“/Users/Library/Python/2.7/lib/Python/site packages/sympy/integrals/integrals.py”,第1276行,在integrate中
积分=积分(*args,**kwargs)
文件“/Users/Library/Python/2.7/lib/Python/site packages/sympy/integrals/integrals.py”,第75行,在新的__
obj=AddWithLimits.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
文件“/Users/Library/Python/2.7/lib/Python/site packages/sympy/concrete/expr_with_limits.py”,第389行,新文件__
obj.is_可交换=函数.is_可交换#限制已检查
AttributeError:“poly1d”对象没有属性“是可交换的”
有什么问题吗?在Symphy中集成此类功能是否正确 我可以看到您的代码存在一些问题:
legendre
函数。Symphy有自己的legendre
函数,当您从Symphy import*编写时,该函数将被导入。此外,如果您对符号结果感兴趣,则根本不应该使用SciPy或NumPy
0.5
的十进制数。相反,您应该使用Rational(1,2)
,它是表示分数1/2
的SymPy对象oo
,而不是使用NumPy的inf
from sympy import *
n = 3
c = lambda h_c,z,R : (z**2+h_c**2)**Rational(1,2)
c_supp = lambda h_c,z,R : (z**2+h_c**2)**(-n)
x = lambda h_x,z,R : -4*R*(R-h_x)/c(h_x,z,R)**2
leg_f = lambda h_l,z,R : legendre(n-1,(1-Rational(1,2)*x(h_l,z,R))/(1-x(h_l,z,R))**Rational(1,2))
I = lambda h_i,z_i,R_i : c_supp(h_i,z_i,R_i)*(1-x(h_i,z_i,R_i))**(-n*Rational(1,2))*leg_f(h_i,z_i,R_i)
h_i,z_i,R_i = symbols('h_i z_i R_i')
int_result = integrate(I(h_i,z_i,R_i), (z_i, 0, inf))
不幸的是,尽管Symphy无法快速集成您拥有的功能。你的被积函数是这样的
经过简化后,它变得更容易在眼睛上,但SymPy似乎陷入了试图计算这个积分
除非符号结果是绝对必要的,否则我建议对这个问题进行数值积分