当前位置: 首页>>代码示例>>Python>>正文


Python Mul.atoms方法代码示例

本文整理汇总了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
开发者ID:TeddyBoomer,项目名称:wxgeometrie,代码行数:104,代码来源:custom_functions.py


注:本文中的sympy.Mul.atoms方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。