gpt4 book ai didi

python - Sympy 可以通过收集多个项来简化有理表达式吗?

转载 作者:行者123 更新时间:2023-12-04 09:04:21 26 4
gpt4 key购买 nike

给定一个有理表达式 E例如下面的,我希望使用 Sympy 将其简化为看起来像 F 的东西(在下面的第二个 Python 代码块中定义):

import sympy as sp

a, b, c, d, n, t, A, B, C = sp.symbols('a, b, c, d, n, t, A, B, C', real = True)

E = n/(c-b) * ( B - (c-b)/(c-a)*A - (b-a)/(c-a)*B ) * (c-t)/(c-b) + n/(c-b) * ( (d-c)/(d-b)*B + (c-b)/(d-b)*C - B ) * (t-b)/(c-b)

print(sp.pretty( E ))
print(sp.pretty( E.simplify() ))
这打印
           ⎛     B⋅(-c + d)   C⋅(-b + c)⎞             ⎛  A⋅(-b + c)   B⋅(-a + b)    ⎞
n⋅(-b + t)⋅⎜-B + ────────── + ──────────⎟ n⋅(c - t)⋅⎜- ────────── - ────────── + B⎟
⎝ -b + d -b + d ⎠ ⎝ -a + c -a + c ⎠
───────────────────────────────────────── + ─────────────────────────────────────────
2 2
(-b + c) (-b + c)


-n⋅((a - c)⋅(b - t)⋅(-B⋅(b - d) + B⋅(c - d) + C⋅(b - c)) + (b - d)⋅(c - t)⋅(A⋅(b - c) + B⋅(a - b) - B⋅(a - c)))
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2
(a - c)⋅(b - c) ⋅(b - d)
然而,表达式可以——手动——进一步简化,我将其结果标记为 F。 :
F = n/(c-a) * (B - A) * (c-t)/(c-b) + n/(d-b) * (C - B) * (t-b)/(c-b)

print(sp.pretty( F ))
print((F-E).simplify())
这输出
n⋅(-A + B)⋅(c - t)   n⋅(-B + C)⋅(-b + t)
────────────────── + ───────────────────
(-a + c)⋅(-b + c) (-b + c)⋅(-b + d)


0
我研究了各种选项,包括 factor() , collect()apart() , 但这些似乎都没有产生与 F 具有相同结构的表达式.有关如何进行的任何指示?
另外,我想知道 Sympy 的 pretty-print 功能是否可以通过某种方式调整到
  • 保持分子和分母中变量的原始顺序(例如 B - A 而不是 -A + B )。目前,在大多数情况下,订单是颠倒的,前导减号看起来相当难看。
  • 将复合分数显示为简单分数的产物(例如 a/b c/d 而不是 ac/bd ),尽管在某些情况下,在哪里/如何“拆分”此类复合分数当然可能是模棱两可的。
  • 最佳答案

    这里的情况是你有一个 Add的两个术语。可以使用 factor 分别简化每个术语但是每个取消的因素都不同,因此调用 factor总的来说Add未能找到可能的取消。
    考虑到这一点,我们需要小心处理 Add 的条款。我们可以通过访问 .args 独立完成:

    In [122]: E.func(*(factor(term) for term in E.args))
    Out[122]:
    n⋅(A - B)⋅(-c + t) n⋅(B - C)⋅(-b + t)
    ────────────────── - ──────────────────
    (a - c)⋅(b - c) (b - c)⋅(b - d)
    变量的顺序实际上是由打印机在显示表达式时确定的,不一定与 args 的内部顺序相同,也不一定与您创建表达式时使用的顺序相同。调用 signsimp虽然可以规范化表达式中的减号
    In [123]: signsimp(_)
    Out[123]:
    n⋅(A - B)⋅(c - t) n⋅(B - C)⋅(b - t)
    - ───────────────── + ─────────────────
    (a - c)⋅(b - c) (b - c)⋅(b - d)

    关于python - Sympy 可以通过收集多个项来简化有理表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63486338/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com