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

SymPy trigsimp函数化简二次型旋转判别式结果异常求助

问题:SymPy trigsimp化简失败,无法验证二次型判别式的旋转不变性

我尝试用SymPy验证二次型 (ax^2 + bxy + cy^2) 的判别式 (b^2 - ac) 在旋转变换下的不变性,但发现trigsimp函数化简含三角函数乘积和的表达式时出现错误。

编写的Python脚本如下:

import sympy as sp

# 定义变量和参数
x, y, theta = sp.symbols('x y theta', real=True)
a, b, c = sp.symbols('a b c', real=True)

# 原二次型
Q_original = a*x**2 + 2*b*x*y + c*y**2

# 旋转变换公式
x_rot = x*sp.cos(theta) - y*sp.sin(theta)
y_rot = x*sp.sin(theta) + y*sp.cos(theta)

# 代入旋转后的坐标
Q_rotated = Q_original.subs({x: x_rot, y: y_rot})

# 展开旋转后的二次型
Q_rotated_expanded = sp.expand(Q_rotated)

# 合并同类项以提取新系数
Q_rotated_collected = sp.collect(Q_rotated_expanded, [x**2, x*y, y**2])

# 提取旋转后的系数
a_rot = Q_rotated_collected.coeff(x**2, 1)
b_rot = Q_rotated_collected.coeff(x*y, 1) / 2  # 因为原形式是2*b*x*y
c_rot = Q_rotated_collected.coeff(y**2, 1)

# 计算原形式和旋转形式的判别式
discriminant_original = b**2 - a*c
discriminant_rotated = b_rot**2 - a_rot*c_rot
print(f"discriminant_rotated: {discriminant_rotated}\n")

# 用trigsimp化简旋转后的判别式
discriminant_rotated_simplified = sp.trigsimp(discriminant_rotated)
print(f"discriminant_rotated_simplified: {discriminant_rotated_simplified}\n")

# 检查判别式是否相等
are_equal = sp.trigsimp(discriminant_original - discriminant_rotated_simplified) == 0
print(f"are_equal: {are_equal}")

运行后,discriminant_rotated_simplified 的输出结果为:

(-a*c + b**2)*cos(theta)**4 

但正确结果应该是 (b^2 - ac)(即 -a*c + b**2)。


解决方案

问题出在直接对未展开的discriminant_rotated使用trigsimp,SymPy无法识别其中可消去的三角函数项。需要先展开判别式,再进行化简,或者直接使用更通用的simplify函数:

修改后的化简代码

# 方式1:先展开判别式再用trigsimp
discriminant_rotated_expanded = sp.expand(discriminant_rotated)
discriminant_rotated_simplified = sp.trigsimp(discriminant_rotated_expanded)

# 方式2:直接使用simplify函数(更通用)
discriminant_rotated_simplified = sp.simplify(discriminant_rotated)

替换原代码中的化简步骤后,discriminant_rotated_simplified会正确输出 -a*c + b**2,此时are_equal也会返回True。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 02:53:13