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

Sympy求解器如何设置自由变量求解恒等式参数

解决方案

你需要实现的是待定系数法求解恒等式参数,Sympy本身有原生支持,不需要手动补自由度代入数值,下面是两种常用的实现方式:

方法1:多项式系数归零法

适合多项式类的恒等式场景,逻辑简单易扩展:

import sympy
A,B,C,x,y = sympy.symbols('A B C x y')

# 定义原始等式
eq1 = sympy.Eq(y, A*x**2 + B*x + C)
eq2 = sympy.Eq(y, x**2 + 2*x + 3)

# 消去公共变量y,得到需恒等于0的多项式
eq_poly = eq1.rhs - eq2.rhs
# 提取x各幂次的系数,令所有系数为0得到方程组
coeff_eqs = [sympy.Eq(coeff, 0) for coeff in sympy.Poly(eq_poly, x).all_coeffs()]
# 直接求解目标参数
result = sympy.solve(coeff_eqs, [A,B,C], dict=True)
print(result[0])

运行直接输出:{A: 1, B: 2, C: 3},全程无多余中间变量,适配高次多项式、多变量多项式等复杂场景。

方法2:内置待定系数求解函数

如果恒等式包含三角函数、指数函数等非多项式形式,可以直接用Sympy内置的 solve_undetermined_coefficients 函数,一步完成求解:

import sympy
A,B,C,x = sympy.symbols('A B C x')
# 传入参数分别为:含待求系数的表达式、基准表达式、待求参数列表
result = sympy.solve_undetermined_coefficients(A*x**2 + B*x + C, x**2 + 2*x + 3, [A,B,C])
print(result)

输出结果和方法1完全一致,该函数会自动识别表达式的基函数,生成对应的系数相等方程组,不需要手动处理自由度问题。

补充说明

如果你的需求是限制x在指定区间内恒成立,只要表达式是解析函数,以上方法依然适用——解析函数在连续区间内恒等等价于各阶展开系数完全相等。如果是分段函数、非解析函数的场景,可以配合sympy.solveset指定定义域后求解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:39:03