如何在python中解决这个不等式?递归错误:获取对象的str时超过了最大递归深度



我试图得到这个不等式中可接受值的区间:

12/300 < 0.45*sympy.sqrt(Ro/(2*f*x))

其中在代码中计算CCD_ 1。

我想要x的间隔。我怎样才能拿到它?

#Introduzindo as variaveis
P = 50
Vin = 300
Vout = 12
f = 50000
DVout = 0.05
D = 0.45
Ts = 1/f
#Programa
import numpy as np
import sympy
from sympy import *
Ro = Vout**2/P
a = Vout/Vin
x = Symbol('x')
q = solve_univariate_inequality(a <= D*sympy.sqrt(Ro/(2*f*x)), x, S.Reals)

错误:

RecursionError                            Traceback (most recent call last)
<ipython-input-53-6eeaca6392d4> in <module>
19 # # var('x')
20 x = Symbol('x')
---> 21 q = solve_univariate_inequality(a <= D*sympy.sqrt(Ro/(2*f*x)), x, S.Reals)
22 # solvify(D*sympy.sqrt(Ro/(2*f*x)), x, S.Reals)
23 # # solvify(D*sympy.sqrt(Ro/(2*f*x), x))
12 frames
... last 9 frames repeated, from the frame below ...
/usr/local/lib/python3.7/dist-packages/sympy/solvers/solveset.py in _solveset(f, symbol, domain, _check)
1060                         result += _solve_radical(equation,
1061                                                  symbol,
-> 1062                                                  solver)
1063                     elif equation.has(Abs):
1064                         result += _solve_abs(f, symbol, domain)
RecursionError: maximum recursion depth exceeded while getting the str of an object

您使用的是什么版本的SymPy?我尝试了当前版本(1.11(,得到了:

In [1]: #Introduzindo as variaveis
...: P = 50
...: Vin = 300
...: Vout = 12
...: f = 50000
...: DVout = 0.05
...: D = 0.45
...: Ts = 1/f
...: 
...: #Programa
...: import numpy as np
...: import sympy
...: from sympy import *
...: 
...: Ro = Vout**2/P
...: a = Vout/Vin
...: 
...: x = Symbol('x')
...: q = solve_univariate_inequality(a <= D*sympy.sqrt(Ro/(2*f*x)), x, S.Reals)
In [2]: q
Out[2]: x ≤ 0.003645 ∧ 0 < x

最新更新