数学 / 三角函数 · 从角到波 / 和差角公式与二倍角公式 待审核 10 / 13
cos(α ± β) · 2α

和差角公式与二倍角公式

前两页的恒等式都在同一个角内部(见 同角三角函数的基本关系)或同一个角的对称像之间打转(见 诱导公式与终边的对称)。要把两个互不相关的角联系起来,需要一件新的几何事实:单位圆上两点之间的距离,只由它们的角度之差决定。

1 · 两条等长的弦

α\alphaβ\beta 的终边与单位圆分别交于 Pα(cosα, sinα)P_\alpha(\cos\alpha,\ \sin\alpha)Pβ(cosβ, sinβ)P_\beta(\cos\beta,\ \sin\beta)。把整个图形绕原点旋转 β-\beta 度:PαP_\alpha 落到 PαβP_{\alpha-\beta} 处,PβP_\beta 落到 P0(1, 0)P_0(1,\ 0) 处。旋转是刚体运动,弦长不变,于是同一段长度有两种算法:

PαPβ2=(cosαcosβ)2+(sinαsinβ)2=22(cosαcosβ+sinαsinβ)|P_\alpha P_\beta|^2 = (\cos\alpha - \cos\beta)^2 + (\sin\alpha - \sin\beta)^2 = 2 - 2(\cos\alpha\cos\beta + \sin\alpha\sin\beta)
PαβP02=(cos(αβ)1)2+sin2(αβ)=22cos(αβ)|P_{\alpha-\beta} P_0|^2 = (\cos(\alpha-\beta) - 1)^2 + \sin^2(\alpha-\beta) = 2 - 2\cos(\alpha-\beta)

两处展开都用到了平方关系。令两式相等,约掉常数与系数即得:

定理 1.1(差角余弦) 对任意角 α\alphaβ\betacos(αβ)=cosαcosβ+sinαsinβ\cos(\alpha - \beta) = \cos\alpha\cos\beta + \sin\alpha\sin\beta

推导只依赖两件事:交点落在单位圆上,以及旋转保持距离。两者对任意角都成立,所以这条等式不需要分象限讨论,也不要求 α\alphaβ\beta 是锐角。

图 1-1 · 单位圆上 α\alphaβ\betaα±β\alpha \pm \beta 的三条终边,以及选余弦时出现的两条等长弦。可调两个角与和差开关,读数并排给出直接求值、公式合成与「把函数当加性的」错答。

2 · 由差角余弦派生的一族

其余公式都是定理 1.1 的推论,工具只有诱导公式与商数关系。把 β\beta 换成 β-\beta,右端的 sinβ\sin\beta 变号,得到和角余弦;把余弦的角写成 π/2\pi/2 减一个角再换族,得到正弦的两条;正切的两条则由商数关系通分,分子分母同除 cosαcosβ\cos\alpha\cos\beta 而来。六个等式合称和差角公式

公式 右端 来历
cos(αβ)\cos(\alpha - \beta) cosαcosβ+sinαsinβ\cos\alpha\cos\beta + \sin\alpha\sin\beta 定理 1.1
cos(α+β)\cos(\alpha + \beta) cosαcosβsinαsinβ\cos\alpha\cos\beta - \sin\alpha\sin\beta 上式中 ββ\beta \to -\beta
sin(α+β)\sin(\alpha + \beta) sinαcosβ+cosαsinβ\sin\alpha\cos\beta + \cos\alpha\sin\beta cos(π/2αβ)\cos(\pi/2 - \alpha - \beta) 换族
sin(αβ)\sin(\alpha - \beta) sinαcosβcosαsinβ\sin\alpha\cos\beta - \cos\alpha\sin\beta 上式中 ββ\beta \to -\beta
tan(α+β)\tan(\alpha + \beta) tanα+tanβ1tanαtanβ\dfrac{\tan\alpha + \tan\beta}{1 - \tan\alpha\tan\beta} 正弦除以余弦后约分
tan(αβ)\tan(\alpha - \beta) tanαtanβ1+tanαtanβ\dfrac{\tan\alpha - \tan\beta}{1 + \tan\alpha\tan\beta} 上式中 ββ\beta \to -\beta

正切那两条比前四条脆:右端要求 tanα\tan\alphatanβ\tan\betatan(α±β)\tan(\alpha \pm \beta) 三者都有意义,任一个角落在 π/2+kπ\pi/2 + k\pi 上就用不了。前四条没有这类限制。

警示 · 三角函数不是加性映射,sin(α+β)\sin(\alpha + \beta)sinα+sinβ\sin\alpha + \sin\beta 之间没有等号。这个错答能偏多远是量出来的:在 α, β[0°, 180°]\alpha,\ \beta \in [0°,\ 180°]181×181181 \times 181 个整数格点上,sinα+sinβsin(α+β)|\sin\alpha + \sin\beta - \sin(\alpha+\beta)| 的最大值是 2.598076211353316,即 33/23\sqrt{3}/2,取在 α=β=120°\alpha = \beta = 120° 处。正弦的值域宽度只有 22,错答的偏差却超过 2.592.59

3 · 正切公式在直角处的假结果

α+β=π/2\alpha + \beta = \pi/2tan(α+β)\tan(\alpha + \beta) 无意义,代数上的表现是分母 1tanαtanβ1 - \tan\alpha\tan\beta 为零。看上去可以拿「分母为零」当判据,实测不行。

警示 · 双精度下这个分母不为零。Math.tan(Math.PI / 4) 算出的是 0.9999999999999999 而非 11,于是 1tan45°tan45°1 - \tan 45° \tan 45° 等于 2.220446049250313e-16,恰好是 Number.EPSILON;照公式算出的 tan90°\tan 90°9007199254740991,也就是 25312^{53} - 1,一个看着完全正常的整数。换 30°+60°30° + 60° 那一组,分母是 3.3306690738754696e-16,结果 6933745219159076。所以判定极点必须按角来判(isTanPole 检查角是否落在 90°+k180°90° + k \cdot 180° 上),等分母报零是等不到的。

这件事把「公式的适用条件」与「实现的失效方式」分了开:适用条件由数学给出,而实现给出的不是报错,是一个量级正常、符号也正常的假结果。图 1-1 在选正切且两角之和为直角时会把左右两端的这种分歧显示出来。

4 · 二倍角与降幂

在和角公式里令 β=α\beta = \alpha,右端的两项合并,得到二倍角公式sin2α=2sinαcosα\sin 2\alpha = 2\sin\alpha\cos\alphacos2α=cos2αsin2α\cos 2\alpha = \cos^2\alpha - \sin^2\alphatan2α=2tanα/(1tan2α)\tan 2\alpha = 2\tan\alpha / (1 - \tan^2\alpha)

余弦那条有三种等价写法。用平方关系把 sin2α\sin^2\alphacos2α\cos^2\alpha 换掉,得 cos2α=2cos2α1=12sin2α\cos 2\alpha = 2\cos^2\alpha - 1 = 1 - 2\sin^2\alpha。三式数值相同,用处不同:算出的量是 cosα\cos\alpha 就取第二式,是 sinα\sin\alpha 就取第三式,都能少开一次平方。

把后两式反解出平方项,得到降幂公式 sin2α=(1cos2α)/2\sin^2\alpha = (1 - \cos 2\alpha)/2cos2α=(1+cos2α)/2\cos^2\alpha = (1 + \cos 2\alpha)/2。它把二次式换成一次式,代价是角翻倍。半角公式是同一件事换个写法,把 α\alpha 换成 α/2\alpha/2 即得,符号由 α/2\alpha/2 所在象限裁决。

公式两端在浮点下并不逐位相等。左端只调一次 Math.sin,右端要做四次乘法与一次加减。以 1° 为步长扫遍 α, β[360°, 360°]\alpha,\ \beta \in [-360°,\ 360°]721×721721 \times 721 个格点,正弦与余弦四条和差角公式两端的最大偏差是 2.6645352591003757e-15,合 1212Number.EPSILON,取在 α=359°\alpha = -359°β=353°\beta = -353° 处。这个界是量出来的,换一个 Math.sin 实现就可能变,trig.test.ts 里那条断言写的是「不超过 1212 ulp」。

5 · 参考文献

  1. List of trigonometric identities. Wikipedia. 和差角、二倍角与降幂公式的完整清单。https://en.wikipedia.org/wiki/List_of_trigonometric_identities
  2. Proofs of trigonometric identities. Wikipedia. 差角余弦的距离法证明与其他几种证法。https://en.wikipedia.org/wiki/Proofs_of_trigonometric_identities
  3. Trigonometric Addition Formulas. Wolfram MathWorld. 六条和差角公式与它们的复数形式来源。https://mathworld.wolfram.com/TrigonometricAdditionFormulas.html
  4. Rotation matrix. Wikipedia. 平面旋转矩阵的两行恰是和角公式的两个分量。https://en.wikipedia.org/wiki/Rotation_matrix
  5. Ptolemy's theorem. Wikipedia. 托勒密定理,和角公式在历史上的另一条来路。https://en.wikipedia.org/wiki/Ptolemy%27s_theorem
  6. Machine epsilon. Wikipedia. Number.EPSILON 的含义与 ulp 的口径。https://en.wikipedia.org/wiki/Machine_epsilon