Python 同向积分错误:can';t将符号转换为int
尝试在Symphy中集成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(
分段
函数会抛出错误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