gpt4 book ai didi

SymPy:如何收集多变量项?

转载 作者:行者123 更新时间:2023-12-02 00:10:04 24 4
gpt4 key购买 nike

我在 sympy 中有一个很长的表达式,看起来像这样:

2𝑤^2𝑥𝑦𝑧 + 3𝑤^2 𝑥𝑧^2 − 4𝑤𝑥𝑦^2 − 5𝑤𝑥𝑦𝑧 + 2𝑤𝑥𝑧^2 − 3𝑥𝑦^2 − 4𝑥𝑦𝑧 − 5𝑥𝑧^2 ...

其中变量是 w、x、y、z 的组合,也可以是 2 的幂。

我想收集项 [x,y,z] 这样我最终得到 w 中的二次多项式作为每个项的系数,例如:

xyz(−0.285𝑤^2 - 1.09⋅10−5𝑤, 1.60⋅10−10) + xy^2(...w^2, ...w, ...) + x^2y(...) + xz^2(...) + ...

当我使用 collect(exp, [x,y,z]) 时,我无法做到这一点; sympy 似乎想要嵌套一些术语:

𝑥(𝑦2(−0.00341083824360158𝑤−2.60668077412341⋅10−8) + 
𝑦𝑧(−0.28569359766975𝑤2−1.09161331685904⋅10−5𝑤−1.60378772636814⋅10−10) + 𝑧2(0.000708269071473656𝑤2+1.72432957139821⋅10−10𝑤−2.29362549750881⋅10−13))

我也尝试过一次收集术语、简化、扩展等多种组合,但都无济于事。非常感谢任何帮助!

谢谢!

最佳答案

我不知道 SymPy 中是否有针对此类事情的现成函数。不过,我喜欢 SymPy 的地方在于,一旦您熟悉了内部结构,它就会赋予您很大的能力来定义这样的基本操作。

这可能会奏效,或者希望至少能提供一个起点:

In [124]: x, y, z, w = symbols('x, y, z, w')                                                                                      

In [125]: expr = 2*w**2*x*y*z + 3*w**2*x*z**2 - 4*w*x*y**2 - 5*w*x*y*z + 2*w*x*z**2 - 3*x*y**2 - 4*x*y*z - 5*x*z**2

In [126]: expr
Out[126]:
2 2 2 2 2 2 2
2⋅w ⋅x⋅y⋅z + 3⋅w ⋅x⋅z - 4⋅w⋅x⋅y - 5⋅w⋅x⋅y⋅z + 2⋅w⋅x⋅z - 3⋅x⋅y - 4⋅x⋅y⋅z - 5⋅x⋅z

In [127]: terms = set(e.as_coeff_Mul()[1] for c in expr.as_poly(w).all_coeffs() for e in Add.make_args(c))

In [128]: new_expr = sum(t * expr.coeff(t) for t in terms)

In [129]: new_expr
Out[129]:
2 ⎛ 2 ⎞ 2 ⎛ 2 ⎞
x⋅y ⋅(-4⋅w - 3) + x⋅y⋅z⋅⎝2⋅w - 5⋅w - 4⎠ + x⋅z ⋅⎝3⋅w + 2⋅w - 5⎠

关于SymPy:如何收集多变量项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59363674/

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