本文整理汇总了Python中sympy.Mul.atoms方法的典型用法代码示例。如果您正苦于以下问题:Python Mul.atoms方法的具体用法?Python Mul.atoms怎么用?Python Mul.atoms使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sympy.Mul
的用法示例。
在下文中一共展示了Mul.atoms方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: positif
# 需要导入模块: from sympy import Mul [as 别名]
# 或者: from sympy.Mul import atoms [as 别名]
#.........这里部分代码省略.........
if len(liste_constantes) == len(arg.args) - 1 and len(liste_ln) == 1:
expression += ln(liste_ln[0].args[0] ** Add(*liste_constantes)) - arg
## print "Resultat 1er passage:", expression
# Deuxième passage : ln(X1)+ln(X2)+b>0 <=> X1*X2-exp(-b)>0
for arg in args:
if isinstance(arg, ln) and hasattr(arg, "has_any_symbols") and arg.has(variable):
liste_ln.append(arg)
elif not hasattr(arg, "has_any_symbols") or not arg.has(variable):
liste_constantes.append(arg)
if liste_ln and len(liste_ln) + len(liste_constantes) == len(args):
# ln(X1)+ln(X2)+b>0 <=> X1*X2-exp(-b)>0
contenu_log = Mul(*(logarithme.args[0] for logarithme in liste_ln))
contenu_cst = exp(-Add(*liste_constantes))
return ens_def * positif(contenu_log - contenu_cst, variable, strict=strict)
# Exponentielle
# Résolution de a*exp(f(x)) + b > 0
if getattr(expression, "is_Add", False):
a_ = Wild("a")
b_ = Wild("b")
X_ = Wild("X")
match = expression.match(a_ * exp(X_) + b_)
if match is not None:
a = match[a_]
b = match[b_]
X = match[X_]
if a != 0 and not a.has(variable) and not b.has(variable):
if _is_pos(b):
if _is_pos(a):
return ens_def
elif _is_neg(a):
# l'ensemble de définition ne change pas
return positif(-X + ln(-b / a), variable, strict=strict)
elif _is_neg(b):
if _is_pos(a):
return positif(X - ln(-b / a), variable, strict=strict)
elif _is_neg(a):
return vide
# Cas très particulier : on utilise le fait que exp(x)>=x+1 sur R
if getattr(expression, "is_Add", False):
expr = expression
changements = False
for arg in expr.args:
if isinstance(arg, exp):
changements = True
expr += arg.args[0] + 1 - arg
if changements and (ens_def - positif(expr, variable, strict=strict) == vide):
return ens_def
# Sommes contenant des logarithmes :
if getattr(expression, "is_Add", False):
# Cas très particulier : on utilise le fait que ln(x)<=x-1 sur ]0;+oo[
expr = expression
changements = False
for arg in expr.args:
if isinstance(arg, ln):
changements = True
expr += arg.args[0] + 1 - arg
if changements:
try:
## print "S458475", -expr
non_positif = positif(-expr, variable, strict=not strict) # complementaire
(ens_def - positif(expr, variable, strict=not strict) == vide)
if ens_def - non_positif == vide:
return vide
except NotImplementedError:
pass
# Somme contenant des logarithmes : si aucune autre méthode n'a fonctionné, on tente ln(a)+ln(b)>0 <=> a*b>1 (pour a>0 et b>0)
expr = Mul(*(exp(arg) for arg in expression.args)) - 1
try:
return ens_def * positif(expr, variable, strict=strict)
except NotImplementedError:
pass
## print "Changement de variable."
# En dernier recours, on tente un changement de variable :
tmp2 = Symbol("_tmp2", real=True)
# changements de variables courants : x², exp(x), ln(x), sqrt(x), x³ :
for X in (variable ** 2, variable ** 3, exp(variable), ln(variable), sqrt(variable)):
expr = expression.subs(X, tmp2)
# Si la nouvelle variable apparait une seule fois,
# le changement de variable produirait une récurrence infinie !
if variable not in expr.atoms() and count_syms(expr, X) > 1:
## print "nouvelle variable:", X
solution_temp = positif(expr, tmp2, strict=strict)
solution = vide
for intervalle in solution_temp.intervalles:
sol = R
a = intervalle.inf
b = intervalle.sup
if a != -oo:
sol *= positif(X - a, variable, strict=strict)
if b != oo:
sol *= positif(b - X, variable, strict=strict)
solution += sol
return ens_def * solution
raise NotImplementedError