You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy中如何将x,y六次多元多项式整理为含(x²+y²)幂次的形式

解决方案

核心原因

直接调用collect(eqn, x**2+y**2)无效的核心原因是Sympy默认的collect逻辑只会匹配可完全表示为(x**2+y**2)幂次乘积的项,对于包含x或y奇次幂的交叉项不会自动做代数变形归并,需要先通过变量替换完成变形后再收集。

实现代码

通过引入中间变量r_sq = x**2 + y**2,将所有y**2替换为r_sq - x**2,展开后再按r_sq的幂次收集,最后替换回原表达式即可得到你需要的格式:

import sympy as sp

# 定义符号和原方程
x, y, a, b, c, d, e, f, g = sp.symbols('x y a b c d e f g')
# 示例原方程,可替换为你自己的六次方程
eqn = a*x**6 + b*x**5*y + c*x**4*y**2 + d*x**3*y**3 + e*x**2*y**4 + f*x*y**5 + g*y**6

# 定义中间变量
r_sq = sp.symbols('r_sq')

# 替换所有y²为r_sq - x²,展开表达式
eqn_replaced = sp.expand(eqn.subs(y**2, r_sq - x**2))
# 按r_sq的幂次收集项
eqn_collected = sp.collect(eqn_replaced, r_sq)
# 替换回x²+y²得到最终格式
eqn2 = eqn_collected.subs(r_sq, x**2 + y**2)

# 打印验证结果
sp.pprint(eqn2)

进阶适配(兼容更高次y幂)

如果方程中存在y**4、y**5等高次幂项,可以用递归替换的方法自动处理所有y的≥2次幂,不用手动逐个替换:

def replace_y_high_power(expr):
    if expr.is_Pow and expr.base == y and expr.exp >= 2:
        exp = expr.exp
        if exp % 2 == 0:
            return (r_sq - x**2) ** (exp // 2)
        else:
            return y * (r_sq - x**2) ** ((exp - 1) // 2)
    return expr

# 替换、展开、收集的逻辑和之前一致
eqn_replaced = sp.expand(eqn.replace(replace_y_high_power))
eqn_collected = sp.collect(eqn_replaced, r_sq)
eqn2 = eqn_collected.subs(r_sq, x**2 + y**2)

最终得到的eqn2就是你要求的A*(x**2+y**2)**3 + B*(x**2+y**2)**2 + C*(x**2+y**2) + D格式,其中A、B、C、D均为仅包含x、y的表达式。


内容的提问来源于stack exchange,提问作者Nicholas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:06:03