三角関数の性質

# 三角関数とは

三角関数は直角三角形の辺の比を指す関数ですが、引数の角度を0°~90°だけでなく、90°~360°やそれ以上の角度、負の角度(逆回りという意味)に拡張するために円を使った定義とがあります。

0°~90°の範囲では同じものを指す定義になっているので、概念は直角三角形で、定義は円で覚えておくと良いと考えています。
また、以下では度数法ではなく弧度法で表します。$\frac \pi 2=90^ \circ , \pi =180^ \circ$ と考えてください。

この記事は、AIの特徴量の調整などちょっとした変換に三角関数を使うのはどうかと思いつくためのメモになります。

## 三角関数の定義

三角関数は次の6つあるので、それぞれ定義していきます。
sin, cos, tanの3つが有名ですが、残り3つはそれらの逆数なので覚えてなくてもsin, cos, tanで簡単に表せるので覚えてなくても差し支えないという性質になります。

正弦：sin (sine)
正割：sec (secant)
正接：tan (tangent)
余弦：cos (cosine)
余割：csc (cosecant)
余接：cot (cotangent)

### 直角三角形による定義

以下のような辺の長さを持つ直角三角形に対しての辺の比を表します。
![直角三角形.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3389082/75cd6fed-6cd2-cbb5-926b-f2f3c6d78075.png)

```math
\begin{eqnarray}
\sin \theta &=& \frac ca \\
\sec \theta &=& \frac ab = \frac {1}{\cos \theta} \\
\tan \theta &=& \frac cb \\
\cos \theta &=& \frac ba \\
\csc \theta &=& \frac ac = \frac {1}{\sin \theta} \\
\cot \theta &=& \frac bc = \frac {1}{\tan \theta} \\
\end{eqnarray}
```
2つの辺の比ということで6通り全てに名前がついています。

### 単位円による定義

単位円とは、半径が1の円を指します。
以下の図のように単位円と $x=1,y=1$ の補助線を使い、角度 $\theta$ の線と単位円との交点を通る接線も補助線として引きます。
そして各交点のx座標やy座標の値を使います。
![三角関数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3389082/6cc24050-a130-1ab5-c7ef-682ea98a6acb.png)

右側の図のように $\frac \pi 2< \theta < \pi$ の範囲では、cos, sec, tan, cot は負の数となります。

以下では sin, cos, tan のみ使用します。

## 覚えておくと便利な性質

以下に書いた性質/定理以外にも例えば正弦定理などたくさんの便利な性質がありますが、AIモデルの作成や業務の中で使ったことのある性質を纏めてみました。

### 加法定理など計算方法についての性質

|番号|数式|補足や使いどころの説明|
|:-:|:-:|:--|
|1|$\sin ^2 \theta + \cos ^2 \theta =1$|実装前に式整理しておくと実装内容が減ることがあります。|
|2|$\sin ( \theta + \alpha )= \cos \alpha \sin \theta + \sin \alpha \cos \theta$|加法定理。偏角が分からないものがあってもsin,cosに分解してしまえばその係数探しだけで済みます。|
|3|$\cos \theta = \sin ( \theta + \frac \pi 2 )$|cosもsinの偏角があるバージョンとして見れるので、2と組み合わせてsinで統一できる|
|4|$\frac{d}{d \theta} \sin \theta = \cos \theta= \sin (\theta + \frac \pi 2)$|微分しても偏角が変わったサイン波|
|5|$\int \sin \theta d \theta =- \cos \theta +C= \sin (\theta - \frac \pi 2) +C$|$C$ は積分定数。積分しても偏角が変わったサイン波|

とりあえずサイン波だと分かってしまえば偏角がどこだろうかという話に落とし込めます。
また、偏角が中途半端な角度だったとしても2の性質から偏角を0度として固定したうえで係数を探すことで対応できます。
AIに結果となる係数を探させることで、具体的な角度 $\alpha$ は分からなくても上手いこと対応できます。

### フーリエ変換など直交性を使った性質

|番号|数式|補足や使いどころの説明|
|:-:|:-:|:--|
|6|$[-\frac T2, \frac T2]$で定義された関数列 $\\{ 1, \sin \frac{2 \pi x}{T}, \cos \frac{2 \pi x}{T} , \sin \frac{4 \pi x}{T}, \cos \frac{4 \pi x}{T}, \cdots, \sin \frac{2 \pi nx}{T}, \cos \frac{2 \pi nx}{T}, \cdots \\}$ は直交する|直交しているので、AIの特徴量に入れるときには独立前提で使える|
|7|$f(x)=\frac{a_0}{2}+ \sum_{n=1}^ \infty \left( a_n \cos \frac{2 \pi nx}{T}+b_n \sin \frac{2 \pi nx}{T} \right)$|$f(x)$ は周期 $T$ の周期関数とした場合のフーリエ級数展開|

周期的なもので書きましたが、周期を無限大にすることで非周期関数にも対応したものがフーリエ変換です。
適当なところで区切って近似式にも出来るので、適当な周期のところまで、もしくは周波数分析をしていくつかピックアップしたものを特徴量に入れてAIの学習をさせることもできます。
イメージとしては、(n-1)次式にしてしまえば、任意のn個の点を通る方程式 $f(x)=a_0+a_1x+a_2x^2+ \cdots +a_{n-1}x^{n-1}$ が作れるのと同じように、 $g(x)=a_0+a_1 \sin \frac{2 \pi x}{T}+b_1 \cos \frac{2 \pi x}{T}+a_2 \sin \frac{4 \pi x}{T}+b_2 \cos \frac{4 \pi x}{T}+ \cdots +a_m \sin \frac{2 \pi mx}{T}+b_m \cos \frac{2 \pi mx}{T}$ (ただし $2m+2 \gt n, T$ は点の定義域の幅) として方程式が作れます。

### その他

|番号|数式|補足や使いどころの説明|
|:-:|:-:|:--|
|8|$f(x)= \sin \frac{2 \pi x}{T}$とすると、 $f(x+T)=f(x)$|任意の $T$ に対してその周期を持つ周期関数にできる|
|9|$f(x)= \cos \frac{2 \pi x}{T}$とすると、 $f(x+T)=f(x)$|任意の $T$ に対してその周期を持つ周期関数にできる|

8,9は7日間ごとだったり、24時間ごとといった特徴量を使いたいときに重宝します。
ただ、1つのみだと周期外のところで同じ値をとってしまうこともあるので、その時は sin, cos を併用して2つの特徴量に分ける対応をすると周期的な特徴量として使用できます。


## 参考資料

https://manabitimes.jp/math/660
https://www.nli-research.co.jp/report/detail/id=65396?site=nli
https://lets-math.com/trigonometric_function_formula/
https://manabitimes.jp/math/1156