- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
在下面的程序中,SymPy 似乎不理解被积函数是乘积的导数。有没有办法让它返回u*v ? import sympy x = sympy.symbols('x', real=True) u = symp
我有两个单变量函数,f(x)和 g(x) ,我想替换 g(x) = y重写 f(x)正如一些 f2(y) . 这是一个有效的简单示例: In [240]: x = Symbol('x') In [24
我需要以字符串的形式接受用户输入,将其解析为一个 sympy 表达式,然后求解一个变量。大多数用户允许的函数与 sympy 函数匹配,除了 log2(x) 等同于 sympy 的 log(x, 2)。
当 Function 出现在方程中或者是要求解的目标时,sympy 的 solve 函数似乎无法求解某些方程。 为了解决这个问题,我想创建一个通用函数,它会自动用同名的 Symbol 替换表达式中的
尽管 radsimp函数看起来正是我想要的: from sympy import radsimp, sqrt, symbols v1, v2 = symbols('v1 v2') radsimp(1
在动态系统中,我的基值都是时间的函数,d(t)。我使用 d = Function('d')(t) 创建变量 d,其中 t = S('t') 显然,d 的导数(变化率,如速度等)很常见。但是 diff(
我有各种涉及 UndefinedFunction 实例的 SymPy 表达式: f = Function('f') g = Function('g') e = f(x) / g(x) 如何获取出现在此
我试图使用 sympy 解决斐波那契数列的递推关系。我得到了一个与教科书不同的答案。不知道我哪里弄错了。 我的同情码 from sympy import * f=Function('f') var('
我设置了 Anaconda 2.0.0 (Win 64)。 它有 SymPy 0.7.5。 我将 Spyder(Anaconda 附带的 2.3.0rc)配置为使用符号数学: 工具 > 首选项 > i
我是 sympy 的新手,并且正在学习它。我正在浏览堆栈交换中关于使用 sympy 符号求解具有初始条件的微分方程组的文档和问题。 我有一个简单的 ODE-s 系统 ( dV/dt ) = -(
x,i,n = symbols("x i n") summation(x,(i,1,n)) 我如何制作 x由 i 索引? 最佳答案 没有数字上限,它不会做任何事情,但除此之外,您可以使用类似函数的表达
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
我正在尝试在 Jupyter 笔记本中使用 sympy 以可重复的方式记录和执行一系列数学计算。 如果我定义以下内容: from sympy import * init_printing() x, y
当我打字时 >python > from sympy import * > x=symbols('x') > integrate(1/4/sin(1/3*x),x) 输出是 0.375*log(cos
如果我们知道变量满足某个方程,是否可以简化 SymPy 中的表达式?例如,在 Mathematica 中我们可以这样写: Simplify[a+b-c, a+b==c] 当然,在这种情况下可以解决 a
在 sympy 中,如何声明一个对子函数中的多个变量具有多个限制的 Piecewise 函数? 这是我的背景和尝试: from sympy import Piecewise, Symbol, exp
我想使用 sympy 求解以下简单方程 2^(x-y)=1 其中 x 和 y 是 +ve 整数 我的预期结果是 x=y 当我尝试使用 sympy 求解时 x = Symbol('x') y = Sym
我有一个表达式列表,例如 4.0*x[0] + 5.0*x[10] + 1 = 0我想根据 [4.0, 0, 0, ..., 5.0, ... , 1] 等系数将它们转换为向量。原因是我的一些方程可能
当我打字时 >python > from sympy import * > x=symbols('x') > integrate(1/4/sin(1/3*x),x) 输出是 0.375*log(cos
我想对 SU(2) 的一般矩阵进行计算,即我有一个 a,b=symbols('a,b') m=Matrix([[a,b],[-conjugate(b), conjugate(a)]]) 经过一些计算,
我是一名优秀的程序员,十分优秀!