Попытка интегрировать функцию Piecewise
в Sympy выдает ошибку TypeError: can't convert symbols to int
. Я не нашел полезной информации об этой ошибке в Интернете.
Интеграл не должен содержать целых чисел. Я не уверен, почему что-то должно быть преобразовано в int
. Функция в приведенном ниже примере упрощена - мне нужно интегрировать более сложные кусочные функции в зависимости от параметров.
Код:
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