巷では、機械学習とかディープ・ラーニングとか、AI関連の勢いが凄まじいですね、どうもボクです。意味もなく、AIっぽい画像を貼り付けましたが、すみません、今回、AIとはまったく関係ない話です。
だが、しかし!
深層学習ではそれぞれにタグ付けをした大量のデータセットが必要だが、これが制約になり、医療などの分野への応用を難しくしている。一方、ベンジオは翻訳ツールなどは進化したが、テクノロジーが実際に言語を理解しているわけではないという点に言及した。
3人ともこうした問題をどう解決すべきかはわからないという。ただ、AI分野において次のチューリング賞に値するようなブレイクスルーを起こしたければ、現在のメインストリームには背を向けたほうがいいようだ。ベンジオは「深層学習という現在の流行を追うべきではない」とアドヴァイスしていた。
⇧ 「深層学習」に待ったが入ったと...まぁ、レベルが高すぎてよく分からんけども。
とはいえ、高校数学ぐらいは、思い出さねば...と思ったけど、サッパリ思い出せんということで、少しづつ 復讐 じゃなくて、復習していきますか。
sinθ,cosθ,tanθ って
三角関数っちゅうやつですね。
ちなみに、かの有名な科学雑誌「Newton」にて
⇧ 別冊で『三角関数』について特集されとるようです。
なにはともあれ、
Wikipediaさ~ん
三角関数(さんかくかんすう、英: trigonometric function)とは、平面三角法における、角の大きさと線分の長さの関係を記述する関数の族および、それらを拡張して得られる関数の総称である。鋭角を扱う場合、三角関数の値は対応する直角三角形の二辺の長さの比であり、三角関数は三角比とも呼ばれる。三角法に由来する三角関数という呼び名のほかに、後述する単位円を用いた定義に由来する円関数(えんかんすう、英: circular function)という呼び名がある。
三角関数には以下の6つがある。
⇧ え~っと...いきなりの展開というか、sin(サイン)・cos(コサイン)・tan(タンジェント)以外にも、なんかおるのね...
直角三角形において、1 つの鋭角の大きさが決まれば、三角形の内角の和は 180°であることから他の 1 つの鋭角の大きさも決まり、3 辺の比も決まる。ゆえに、角度に対して辺比の値を与える関数を考えることができる。
∠C を直角とする直角三角形 ABC において、それぞれの辺の長さを AB = h, BC = a, CA = b と表す(図を参照)。∠A = θ に対して三角形の辺の比 h : a : b が決まることから、
という 6 つの値が定まる。それぞれ正弦(sine; サイン)、正割(secant; セカント)、正接(tangent; タンジェント)、余弦(cosine; コサイン)、余割(cosecant; コセカント)、余接(cotangent; コタンジェント)と呼び、まとめて三角比と呼ばれる。
⇧ 記憶の中のサイン・コサイン・タンジェントのリズム感が強すぎて、他の3つの存在が忘却の彼方なのですが...というか、まったく記憶にないけど...
単位円による定義
2 次元ユークリッド空間 R2 における単位円 {x(t)}2 + {y(t)}2 = 1 上の点を A = (x(t), y(t)) とする。反時計回りを正の向きとして、原点と円周を結ぶ線分 OA と x 軸のなす角の大きさ ∠xOA を媒介変数 t として選ぶ。このとき実変数 t に対する三角関数は以下のように定義される。
これらは順に正弦関数 (sine function)、余弦関数 (cosine function)、正接関数(tangent function) と呼ばれる。さらにこれらの逆数として以下の 3 つの関数が定義される。
これらは順に余割関数 (cosecant function)、正割関数 (secant function)、余接関数 (cotangent function) と呼ばれ、sin, cos, tan と合わせて三角関数と総称される。特に csc, sec, cot は割三角関数(かつさんかくかんすう)と呼ばれることがある。
⇧ 逆数らしい...
まぁ、何ていうか、まったく覚えてないことが再認識されたという...
なんで、単位円が必要かというと、
⇧ 「0 < θ < 90°」以外の場合も考慮してのことらしい。単位円になると、座標の概念とかが絡んでくる感じですかね。
⇧ プログラミングにおいて、どこで使われるの?的なことについては、上記サイト様が詳しいです。
三角形の面積
三角形の面積って、
「底辺 × 高さ × 1/2」って教わったじゃないですか?
こいつを、三角関数を使うと、
「底辺 × 斜辺 × sinθ × 1/2」になるという...
ホワッツ?
⇧ 上記サイト様が詳しいです。
まぁ、何ていうか、
⇧ 上記の内容が、どうして成り立つのかっていう説明は一切ないのだが、問答無用でそういうもんだからって思い込むしかないのかしら。
私は、頭が悪いんで、何故に、高さを斜辺で割るとsinθ になるのかっていう説明が欲しいんだけど。
まぁ、なんで、いまさら三角関数かと言いますと、
⇧ 上記サイト様の問題にトライしていて、何か、三角関数の知識とか無いと厳しそうな気がした次第でして。
周の長さとかも問題で出てくるんで、
⇧ 上記サイト様で説明のある、余弦定理とかの知識もいると...
というわけで、Eclipseで、適当なJavaプロジェクト、クラスを作成で。
んで、コーディングはこんな感じに。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Triangle { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { String[] strArr = br.readLine().split("\\s"); int a = Integer.parseInt(strArr[0]); // 底辺 int b = Integer.parseInt(strArr[1]); // 斜辺 int C = Integer.parseInt(strArr[2]); // 斜辺と底辺に挟まれた角度 double h = b * Math.sin(Math.toRadians(C)); // 高さ double S = a * h / 2; // 三角形の面積 // 三角形の周の長さ double L = a + b + Math.sqrt(a * a + b * b -2 * a * b * Math.cos(Math.toRadians(C))); System.out.println(S); System.out.println(L); System.out.println(h); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } }
んで、実行。
入力値は、
⇧ 半角スペースで区切った3つの値ですね。
まぁ、何ていうか、数学の知識が無いと解けないような問題が出てくるとか、文系のあたしにゃ、キツいんですわ...と言っても三角関数なんて使う業務に参画することは無い気がしますが、三角関数だけに参画関すうることなく...... ...
By the way、数学ガールシリーズで、三角関数も取り上げてるようですね。
数学も勉強せねばですかね(涙)
今回はこのへんで。