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

如何消元求解仅用A、B、C表示sin(D)、sin(E)的三角联立方程

三角函数联立方程求解方案

问题说明

目前无法求解如下三角函数联立方程:

(1) $\cos(C)=-\sin(B)\sin(D)\cos(E)+\sin(D)\sin(E)\cos(B)$
(2) $-\sin(A)\sin(B)\sin(D)\sin(E)-\sin(A)\sin(D)\cos(B)\cos(E)-\cos(A)\cos(D)=0$

需求为仅使用常量角A、B、C表示$\sin(D)$和$\sin(E)$,原有求解代码运行后结果仍包含$\cos(D)$、$\cos(E)$项,无法消去变量D和E。

原有求解代码如下:

import sympy as sp
from sympy import sin, cos
sp.init_printing()
sp.var('A,B,C,D,E')
eq1=sp.Eq(cos(C),-sin(B)*sin(D)*cos(E)+sin(D)*sin(E)*cos(B))
eq2=sp.Eq(0,-sin(A)*sin(B)*sin(D)*sin(E)-sin(A)*sin(D)*cos(B)*cos(E)-cos(A)*cos(D))
sp.solve ([eq1, eq2], [sin(D), sin(E)]) 

问题原因

原有调用solve时仅指定了sin(D)、sin(E)为求解变量,Sympy不会主动关联三角函数的平方和恒等式,会将cos(D)、cos(E)识别为独立常量处理,因此结果中会保留这两项。

解决方案

方案1:补充约束后用Sympy直接求解

补充$\sin2(D)+\cos2(D)=1$、$\sin2(E)+\cos2(E)=1$两个恒等式约束,将cos(D)、cos(E)也加入求解变量列表即可,修正后代码如下:

import sympy as sp
from sympy import sin, cos, solve
sp.init_printing()
A,B,C,D,E = sp.symbols('A B C D E', real=True)
# 原方程
eq1 = sp.Eq(cos(C), -sin(B)*sin(D)*cos(E) + sin(D)*sin(E)*cos(B))
eq2 = sp.Eq(0, -sin(A)*sin(B)*sin(D)*sin(E) - sin(A)*sin(D)*cos(B)*cos(E) - cos(A)*cos(D))
# 补充三角恒等式约束
eq3 = sp.Eq(sin(D)**2 + cos(D)**2, 1)
eq4 = sp.Eq(sin(E)**2 + cos(E)**2, 1)
# 求解并输出结果
result = solve([eq1, eq2, eq3, eq4], [sin(D), cos(D), sin(E), cos(E)], dict=True)
for res in result:
    print("sin(D) =", res[sin(D)])
    print("sin(E) =", res[sin(E)])
    print("------")

方案2:手动三角化简后求解(结果更简洁)

利用正弦、余弦的差角公式先对原式做化简:

  1. 式1右侧提取公因子$\sin(D)$后,可整理为:$\cos(C) = \sin(D) \cdot \sin(E-B)$
  2. 式2前两项提取公因子后,可整理为:$\sin(A)\sin(D)\cos(E-B) = -\cos(A)\cos(D)$

将上述两个新式子左右两边分别平方后相加,利用$\sin2x+\cos2x=1$消去E相关项,再代入$\cos2(D)=1-\sin2(D)$整理,即可直接得到仅由A、B、C表示的$\sin(D)$,回代后即可求得$\sin(E)$。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:03