【问题标题】:Sympy: rewrite an expression in terms of a constantSympy:根据常量重写表达式
【发布时间】:2022-01-15 09:21:42
【问题描述】:

我是 Sympy 的新手,如果这个问题有一个明显的答案,我很抱歉。

我想用之前定义的常量重写一个只包含常量的表达式(即没有符号 (?))。

from IPython.display import display
import sympy
sympy.init_printing()

r = sympy.S.GoldenRatio - 1
display(r)
display(1 - r)
display(1 - r**2) # equals r

显示以下表达式:

但我想:

r
1 - r
r

(不确定我是否真的在这里问了两个不同的问题,一个针对结果的前两行,一个针对最后一行。)

【问题讨论】:

    标签: constants sympy substitution


    【解决方案1】:

    以下类型可以帮助您到达那里。由于括号问题,即使对于未计算的表达式,使用 StrPrinter(dict(order='none')).doprint(expr) 打印表达式也效果不佳。

    >>> sr= Symbol('(GoldenRatio - 1)')
    >>> r= S.GoldenRatio - 1
    >>> r.subs(r, sr)
    (GoldenRatio - 1)
    >>> (1-r).subs(r, sr)
    1 - (GoldenRatio - 1)
    >>> nsimplify(1-r**2).subs(r, sr)
      1   v5
    - - + --
      2   2
    >>> nsimplify(1-r**2,r.args).subs(r, sr)
    (GoldenRatio - 1)
    

    或

    >>> nsimplify(1-r**2,[S.GoldenRatio]).subs(r, sr)
    (GoldenRatio - 1)
    

    【讨论】:

    • 感谢您的回答。不幸的是,作为一个同情的新手,我看不出这段代码如何让我接近所需的输出,即用 r(不是?)来表达值。我错过了什么?
    • 好的,我明白了。用sr = Symbol("r") 替换你的第一行就成功了。谢谢!
    • 是的 - 我不知道你想要一个文字 r。
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多