Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 同向积分错误:can';t将符号转换为int_Python_Sympy - Fatal编程技术网

Python 同向积分错误:can';t将符号转换为int

Python 同向积分错误:can';t将符号转换为int,python,sympy,Python,Sympy,尝试在Symphy中集成分段函数会抛出错误TypeError:无法将符号转换为int。我没有在网上找到有关此错误的有用信息 积分不应包含任何整数。我不知道为什么任何东西都需要转换为int。下面例子中的函数是简化的-我实际上需要根据参数集成更复杂的分段函数 代码: 将sympy导入为sy h1,h2=符号(“h_1 h_2”,正=真) vy=sy.symbols(“v_Y”,real=True) h1=1.5 h2=0.5 pdfy=sy.分段((h1,(0查看错误,当您调用pdfy.evalf(

尝试在Symphy中集成
分段
函数会抛出错误
TypeError:无法将符号转换为int
。我没有在网上找到有关此错误的有用信息

积分不应包含任何整数。我不知道为什么任何东西都需要转换为
int
。下面例子中的函数是简化的-我实际上需要根据参数集成更复杂的分段函数

代码:

将sympy导入为sy
h1,h2=符号(“h_1 h_2”,正=真)
vy=sy.symbols(“v_Y”,real=True)
h1=1.5
h2=0.5

pdfy=sy.分段((h1,(0查看错误,当您调用
pdfy.evalf(vy)
时,evalf调用dps_to_prec(vy),这需要一个数字作为参数。但是vy是从
sy.符号(“v_Y”,real=True)获得的符号)
。因此,python给出了错误
TypeError:无法将符号转换为int

谢谢-我只添加了
evalf()
,以避免以前的错误。现在无法重现此错误,因此您的解决方案可以正常工作。
import sympy as sy

h1, h2 = sy.symbols("h_1 h_2", positive=True)
vy = sy.symbols("v_Y", real=True)

h1 = 1.5
h2 = 0.5

pdfy = sy.Piecewise((h1, (0<=vy)&(vy<=(1-h2)/h1)), (h2, ((1-h2)/h1<vy)&(vy<=1)), (0,True))
print(pdfy.evalf(0.1))
print(sy.integrate(vy*(pdfy.evalf(vy)),(vy,0.9,1)))
Piecewise((0.e+0, (v_Y >= 0) & (v_Y <= 0.333333333333333)), (0.e+0, (v_Y <= 1) & (v_Y >     0.333333333333333)), (0, True))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-83-69fbacdbf6ac> in <module>
     10 pdfy = sy.Piecewise((h1, (0<=vy)&(vy<=(1-h2)/h1)), (h2, ((1-h2)/h1<vy)&(vy<=1)),         (0,True))
     11 print(pdfy.evalf(0.1))
---> 12 print(sy.integrate(vy*(pdfy.evalf(vy)),(vy,0.9,1)))

~/anaconda3/lib/python3.6/site-packages/sympy/core/evalf.py in evalf(self, n, subs, maxn, chop,     strict, quad, verbose)
   1435         if not evalf_table:
   1436             _create_evalf_table()
-> 1437         prec = dps_to_prec(n)
   1438         options = {'maxprec': max(prec, int(maxn*LG10)), 'chop': chop,
   1439                'strict': strict, 'verbose': verbose}

~/anaconda3/lib/python3.6/site-packages/mpmath/libmp/libmpf.py in dps_to_prec(n)
     65     """Return the number of bits required to represent n decimals
     66     accurately."""
---> 67     return max(1, int(round((int(n)+1)*3.3219280948873626)))
     68 
     69 def repr_dps(n):

~/anaconda3/lib/python3.6/site-packages/sympy/core/expr.py in __int__(self)
    291         from sympy import Dummy
    292         if not self.is_number:
--> 293             raise TypeError("can't convert symbols to int")
    294         r = self.round(2)
    295         if not r.is_Number:

TypeError: can't convert symbols to int