sympy 将分数与变量分开

问题描述 投票:0回答:3

使用 sympy 如何将分数与变量分开

Mul(Fraction(3,5), Pow(K, Integer(2)))


     2          
  3⋅K         
 ──── 
   5          

to 

               
 3  2      
 ─ K
 5 

我知道这个简化版本还不错,但是当我有很大的方程时,它会变得混乱

sympy
3个回答
1
投票

我不太熟悉漂亮的打印或 LaTeX 打印,但我设法想出了一些东西。将

UnevaluatedExpr
放入
Mul
的每个参数中:

from sympy import *
from fractions import Fraction

K = symbols("K")
expr1 = Mul(UnevaluatedExpr(Fraction(3,5)), UnevaluatedExpr(Pow(K, Integer(2))))
expr2 = Mul(UnevaluatedExpr(pi/5), UnevaluatedExpr(Pow(K, Integer(2))))
expr3 = ((UnevaluatedExpr(S(1)*3123456789/512345679) * UnevaluatedExpr(Pow(K, Integer(2)))))
pprint(expr1)
pprint(expr2)
pprint(expr3)

产品:

     2
3/5⋅K 

π  2
─⋅K 
5   

1041152263  2
──────────⋅K 
170781893   

我找不到一种方法让它为斜线分数打印堆叠分数

3/5
。不过,较长的分数似乎有效。但是,如果您在 LaTeX 中打印,文档建议使用类似
latex(expr1, fold_frac_powers=False)
的内容来纠正此问题。

太糟糕了,我找不到一个优雅的解决方案,例如将

init_printing(div_stack_symbols=False)
放在文档顶部。


0
投票

要详细说明Maelstrom的答案,您需要做两件事才能使这项工作按您的意愿进行:

  1. 创建您想要的单独分数作为其自己的表达式。
  2. 防止表达式与其他表达式组合时分子或分母被修改。

Maelstrom 展示的内容是可行的,但它比实际需要的要复杂得多。这是一个更干净的解决方案:

from sympy import *

K = symbols("K")

# Step 1: make the fraction

# This seems to be a weird workaround to prevent fractions from being broken
# apart. See the note after this code block.
lh_frac = UnevaluatedExpr(3) / 5

# Step 2: prevent the fraction from being modified

# Creating a new multiplication expression will normally modify the involved
# expressions as sympy sees fit. Setting evaluate to False prevents that.
expr = Mul(lh_frac , Pow(K, 2), evaluate=False)

pprint(expr)

给出:

3  2
-*K 
5   

重要提示:

执行

lh_frac = UnevaluatedExpr(3) / 5
并不是通常创建涉及 2 个数字的分数的方式。 通常,你会这样做:

lh_frac = Rational(3, 5)

sympy文档所示。然而,这给我们现在的用例带来了不想要的输出:

   2
3*K 
----
 5  

这个结果让我感到惊讶;将

evaluate
设置为
False
内的
Mul
应该足以完成我们想要的操作。我对此有一个悬而未决的问题


0
投票

详细阐述之前的答案使用

sympify
而不是
UnevaluatedExpr

from sympy import *
lh_frac = sympify("3/5", evaluate=False)
expr = Mul(lh_frac, Pow(a, Integer(2)), evaluate=False)
pprint(expr)
# 3  2
# ─⋅a 
# 5 

稍后可以评估表达式

expr*5
#    2
# 3⋅a 
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.