【问题标题】:sympy not ignoring unimportant decimals in exponential expressionsympy 不忽略指数表达式中不重要的小数
【发布时间】:2021-11-01 08:28:41
【问题描述】:

我有一个计算一些数学方程式的代码,当我想查看简化的结果时,它不能将2.0 等同于2 内部幂,这是合乎逻辑的,因为一个是浮点数,另一个是整数。但决定是 sympys 将这两个值放在哪里,而不是我的。

这是我的结果中 sympy 没有简化的表达式

from sympy import *

x = symbols('x')

y = -exp(2.0*x) + exp(2*x)
print(simplify(y)) # output is -exp(2.0*x) + exp(2*x)

y = -exp(2*x) + exp(2*x)
print(simplify(y)) # output is 0

y = -2.0*x + 2*x
print(simplify(y)) # output is 0

y = -x**2.0 + x**2
print(simplify(y)) # output is -x**2.0 + x**2

有没有办法解决这个问题?我正在寻找一种方法让 sympy 假设除符号之外的所有内容都是浮点数,并阻止它决定哪个是浮点数或整数。

Gerardo Suarez 之前已经问过这个问题,但没有得到满意的答案。

【问题讨论】:

    标签: python sympy simplify


    【解决方案1】:

    您可以使用另一个 sympy 函数,称为 nsimplify。当我运行您的示例时,它们都返回零:

    from sympy import *
    
    x = symbols("x")
    
    y = -exp(2.0 * x) + exp(2 * x)
    print(nsimplify(y))  # output is 0
    
    y = -exp(2 * x) + exp(2 * x)
    print(nsimplify(y))  # output is 0
    
    y = -2.0 * x + 2 * x
    print(nsimplify(y))  # output is 0
    
    y = -(x ** 2.0) + x ** 2
    print(nsimplify(y))  # output is 0
    

    更新 正如@Shoaib Mirzaei 提到的,您还可以像这样在simplify() 函数中使用rational 参数:

    simplify(y,rational=True)
    

    【讨论】:

    • 我认为正确的答案是在simplify 中添加rational=True。这样,一切都会浮起来,问题就解决了。 simplify(y,rational=True)
    • 是的,这似乎是正确的
    【解决方案2】:

    您可以创建一个自定义函数来预过滤所有内容。我认为这很简单,可以这样完成:

    def is_number(n):
        try:
            float(n)   
    
        except Exception:
            return False
        return True
    
    def type_fixer(x: str):
    
        if is_number(x):
            return float(x)
        
        else:
            return x
    

    【讨论】:

    • 感谢您的回答,我检查了@kziovas 的正确答案。
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2012-10-22
    • 2010-11-16
    相关资源
    最近更新 更多