見出し画像

高校数学をプログラミングで解く(数学II編)「3-8 和と積の公式」


はじめに

今回は、数学IIで学ぶ「和と積の公式」について、積→和の公式や和→積の公式を確かめるプログラムを作成します。

和と積の公式

まず、加法定理の応用として、積→和の公式、和→積の公式について解説しておきます。

積→和の公式

記事『高校数学をプログラミングで解く(数学II編)「3-6 加法定理」』で説明した加法定理により次の公式が得られます。

$$
\sin \alpha \cos \beta = \frac{1}{2} \{ \sin ( \alpha + \beta ) + \sin ( \alpha-\beta ) \}
$$

$$
\cos \alpha \sin \beta = \frac{1}{2} \{ \sin ( \alpha + \beta ) - \sin ( \alpha-\beta ) \}
$$

$$
\cos \alpha \cos \beta = \frac{1}{2} \{ \cos ( \alpha + \beta ) + \cos ( \alpha-\beta ) \}
$$

$$
\sin \alpha \sin \beta = -\frac{1}{2} \{ \cos ( \alpha + \beta ) - \cos ( \alpha-\beta ) \}
$$

和→積の公式

上の等式で$${\alpha + \beta = A, \ \alpha - \beta = B}$$とおくと、下の等式が得られます。

$$
\sin A + \sin B = 2 \sin \frac{A+B}{2} \cos \frac{A-B}{2}
$$

$$
\sin A - \sin B = 2 \cos \frac{A+B}{2} \sin \frac{A-B}{2}
$$

$$
\cos A + \cos B = 2 \cos \frac{A+B}{2} \cos \frac{A-B}{2}
$$

$$
\cos A - \cos B = -2 \sin \frac{A+B}{2} \sin \frac{A-B}{2}
$$

積→和の公式を確かめる

今回、以下の問題で積→和の公式が成り立っているであろうことを確かめるプログラムを作成します。

問題1
以下の値を積→和の公式を用いない場合(積)と用いる場合(和)とで求め、それらの値を比較せよ。
(1) $${ \sin 45^{\circ} \cos 15^{\circ} }$$
(2) $${ \cos 45^{\circ} \sin 15^{\circ} }$$
(3) $${ \cos 45^{\circ} \cos 15^{\circ} }$$
(4) $${ \sin 45^{\circ} \sin 15^{\circ} }$$

プログラム

では、積→和の公式を確かめるためのプログラムを作成します。

// 積→和の公式を確かめる問題
void setup(){

  // 2つの角度(ラジアン)
  float alpha = radians(45.0);
  float beta = radians(15.0);

  // 左辺の値と右辺の値を格納する変数
  float lhs, rhs;
  
  // (1) sin 45°cos 15°
  lhs = sin( alpha ) * cos( beta );
  rhs = ( addition_theorem_sin(alpha, beta) 
        + addition_theorem_sin(alpha, -beta) ) / 2.0;
  println("(1)積:", lhs, ",和:", rhs);

  // (2) cos 45°sin 15°
  lhs = cos( alpha ) * sin( beta );
  rhs = ( addition_theorem_sin(alpha, beta) 
        - addition_theorem_sin(alpha, -beta) ) / 2.0;
  println("(2)積:", lhs, ",和:", rhs);
  
  // (3) cos 45°cos 15°
  lhs = cos( alpha ) * cos( beta );
  rhs = ( addition_theorem_cos(alpha, beta) 
        + addition_theorem_cos(alpha, -beta) ) / 2.0;
  println("(3)積:", lhs, ",和:", rhs);

  // (4) sin 45°sin 15°
  lhs = sin( alpha ) * sin( beta );
  rhs = -( addition_theorem_cos(alpha, beta) 
        - addition_theorem_cos(alpha, -beta) ) / 2.0;
  println("(4)積:", lhs, ",和:", rhs);

}

// sin(α+β)の公式
float addition_theorem_sin(
  float alpha, // 1つ目の角度(ラジアン)
  float beta   // 2つ目の角度(ラジアン)
){
  return sin(alpha)*cos(beta)+cos(alpha)*sin(beta);
}

// cos(α+β)の公式
float addition_theorem_cos(
  float alpha, // 1つ目の角度(ラジアン)
  float beta   // 2つ目の角度(ラジアン)
){
  return cos(alpha)*cos(beta)-sin(alpha)*sin(beta);
}

ソースコード1 積→和の公式を確かめるプログラム

ソースコード1では、積→和の公式の右辺に出てくる$${\sin ( \alpha \pm \beta ), \cos ( \alpha \pm \beta )}$$に、記事『高校数学をプログラミングで解く(数学II編)「3-6 加法定理」』で作成したスケッチ「check_addition_theorem」の中の addition_theorem_sin 関数、addition_theorem_cos 関数を再利用しています。

ソースコード1を、Processingの開発環境ウィンドウを開いて(スケッチ名を「check_prod2sum_formula」としています)、テキストエディタ部分に書いて実行します。

図1 スケッチ「check_prod2sum_formula」の実行結果

図1のように、コンソールに問題1の左辺(積)の値と右辺(和)の値とが出力されます。

(1)積: 0.68301266 ,和: 0.68301266
(2)積: 0.1830127 ,和: 0.18301268
(3)積: 0.68301266 ,和: 0.68301266
(4)積: 0.1830127 ,和: 0.18301268

これらの結果を見ると、それぞれの問題の積と和との値は丸め誤差の範囲内で一致していることがわかります。なお、問題1の場合、右辺には$${\sin 60^{\circ}, \cos 60^{\circ}, \sin 30^{\circ}, \cos 30^{\circ}}$$と、その値が簡単に分かるものになっていますので、それを用いて検算することができます。一度行ってみてください。

和→積の公式を確かめる

次に、以下の問題で和→積の公式が成り立っているであろうことを確かめるプログラムを作成します。

問題2
以下の値を和→積の公式を用いない場合(和)と用いる場合(積)とで求め、それらの値を比較せよ。
(1) $${ \sin 75^{\circ} + \sin 15^{\circ} }$$
(2) $${ \sin 75^{\circ} - \sin 15^{\circ} }$$
(3) $${ \cos 75^{\circ} + \cos 15^{\circ} }$$
(4) $${ \cos 75^{\circ} - \cos 15^{\circ} }$$

プログラム

では、和→積の公式を確かめるためのプログラムを作成します。

// 和→積の公式を確かめる問題
void setup(){

  // 2つの角度(ラジアン)
  float A = radians(75.0);
  float B = radians(15.0);

  // 左辺の値と右辺の値を格納する変数
  float lhs, rhs;
  
  // (1) sin 75°+ sin 15°
  lhs = sin( A ) + sin( B );
  rhs = 2.0 * addition_theorem_sin(A/2.0, B/2.0)
        * addition_theorem_cos(A/2.0, -B/2.0);
  println("(1)和:", lhs, ",積:", rhs);

  // (2) sin 75°- sin 15°
  lhs = sin( A ) - sin( B );
  rhs = 2.0 * addition_theorem_cos(A/2.0, B/2.0)
        * addition_theorem_sin(A/2.0, -B/2.0);
  println("(2)和:", lhs, ",積:", rhs);
  
  // (3) cos 75°+ cos 15°
  lhs = cos( A ) + cos( B );
  rhs = 2.0 * addition_theorem_cos(A/2.0, B/2.0)
        * addition_theorem_cos(A/2.0, -B/2.0);
  println("(3)和:", lhs, ",積:", rhs);

  // (4) cos 75°- cos 15°
  lhs = cos( A ) - cos( B );
  rhs = -2.0 * addition_theorem_sin(A/2.0, B/2.0)
        * addition_theorem_sin(A/2.0, -B/2.0);
  println("(4)和:", lhs, ",積:", rhs);

}

// sin(α+β)の公式
float addition_theorem_sin(
  float alpha, // 1つ目の角度(ラジアン)
  float beta   // 2つ目の角度(ラジアン)
){
  return sin(alpha)*cos(beta)+cos(alpha)*sin(beta);
}

// cos(α+β)の公式
float addition_theorem_cos(
  float alpha, // 1つ目の角度(ラジアン)
  float beta   // 2つ目の角度(ラジアン)
){
  return cos(alpha)*cos(beta)-sin(alpha)*sin(beta);
}

ソースコード2 和→積の公式を確かめるプログラム

ソースコード2でも、和→積の公式の右辺に出てくる

$$
\sin \frac{A \pm B}{2} = \sin \left( \frac{A}{2} \pm \frac{B}{2} \right)
$$

$$
\cos \frac{A \pm B}{2} = \cos \left( \frac{A}{2} \pm \frac{B}{2} \right)
$$

に、記事『高校数学をプログラミングで解く(数学II編)「3-6 加法定理」』で作成したスケッチ「check_addition_theorem」の中の addition_theorem_sin 関数、addition_theorem_cos 関数を再利用しています。

ソースコード2を、Processingの開発環境ウィンドウを開いて(スケッチ名を「check_sum2prod_formula」としています)、テキストエディタ部分に書いて実行します。

図2 スケッチ「check_sum2prod_formula」の実行結果

図2のように、コンソールに問題2の左辺(和)の値と右辺(積)の値とが出力されます。

(1)和: 1.2247448 ,積: 1.2247449
(2)和: 0.70710677 ,積: 0.70710677
(3)和: 1.2247449 ,積: 1.2247448
(4)和: -0.7071067 ,積: -0.7071068

これらの結果を見ると、それぞれの問題の和と積との値は丸め誤差の範囲内で一致していることがわかります。なお、問題2の場合、右辺には$${\sin 45^{\circ}, \cos 45^{\circ}, \sin 30^{\circ}, \cos 30^{\circ}}$$と、その値が簡単に分かるものになっていますので、それを用いて検算することができます。一度行ってみてください。

まとめ

今回は、数学IIで学ぶ「和と積の公式」について、積→和の公式や和→積の公式を確かめるプログラムを作成します。比較的簡単だったのではないでしょうか。
三角関数の和と積の公式は、数学の問題でよく利用することがありますが、これらの公式を覚えておく必要はありません。記事『高校数学をプログラミングで解く(数学II編)「3-7 加法定理の応用」』のところで説明した、2倍角の公式や半角の公式と同様に、加法定理からこれらの公式を簡単に導くことができるからです。ただ、加法定理からこれらの公式を導出する方法についてはなれておいてください。

参考文献

改訂版 教科書傍用 スタンダード 数学II(数研出版、ISBN9784410209369)

この記事が気に入ったらサポートをしてみませんか?