見出し画像

高校数学10分プログラミング(数学Ⅱ編 4.指数関数と対数関数)2日目「指数関数のグラフを描く」

マガジンリスト > 数学Ⅱ編 4.指数関数と対数関数 > 2日目 課題

おはようございます。

本日は、高校数学10分プログラミング(数学II編 4.指数関数と対数関数)の2日目です。

本日の課題は、指数関数のグラフを描くプログラムを作成することです。


指数関数

$$
y=a^r \ (a >0, \ a \neq 1)
$$

① 定義域は実数全体、値域は正の数全体
② $${ a>1 }$$のとき $${x}$$の値が増加すると$${y}$$の値も増加

$$
p < q \Leftrightarrow a^p < a^q
$$

 $${0 < a < 1}$$のとき $${x}$$の値が増加すると$${y}$$の値は減少

$$
p < q \Leftrightarrow a^p > a^q
$$

③ グラフは点$${(0,1), \ (1,a)}$$を通り、$${x}$$軸が漸近線

図1 指数関数のグラフ


課題

次の関数のグラフを描くプログラムを作成してください。

(1) $${ y = 2^x + 3 }$$
(2) $${ y = 2^{x-3} }$$
(3) $${ y = 8 \cdot 2^x }$$
(4) $${ y = \frac{2^{-x}}{4} }$$


ヒント

アルゴリズム設計

指数関数は、pow 関数を利用することができます。

pow(p, r);

p:べき乗の底 float型
r:べき指数 float型
返り値:$${p^r}$$の値 float型

たとえば、課題(1)の$${y=2^x+3}$$は、

float y = pow(2.0,x)+3.0;

と記述することができます。
なお、今回のプログラムでは、指数関数を一般化して

$$
y = Aa^x+B \ \ (A,B,a\mathrm{は実数で}、A \neq 0, a >0 )
$$

の形にして、これら$${A,B,a}$$を引数とした指数関数のグラフを描くための関数 draw_exponential_function を準備し、draw_exponential_function 関数を setup 関数内で呼び出すことでグラフを描くようにします(以下のソースコード1を参照)。


プログラム

キャンバス上に座標軸を描く関数 setAxes を利用して指数関数のグラフを描くためのスケッチ「drawExponentialFunctions」を準備しました。以下の zip ファイルをダウンロードして展開または解凍してご利用ください。

展開または解凍して得られるスケッチ「drawExponentialFunctions」の中のpdeファイル「drawExponentialFunctions.pde」をダブルクリックしてスケッチ「drawExponentialFunctions」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「drawExponentialFunctions」タブを選択すると、そのテキストエリアに以下のソースコードが書かれています。

float x_range = 10.0; // x軸の表示範囲 -x_rangeからx_rangeまで
float y_range = 10.0; // y軸の表示範囲 -y_rangeからy_rangeまで 

void setup(){
  size(500,500);
  noLoop();

  setAxes(x_range, y_range); // 座標軸の準備
  
  noFill();
  
  // (1) y=2^x + 3(黒色)
  stroke(0,0,0);  
  float A
  float B
  float a
  draw_exponential_function(A, B, a);
  
  // (2) y=2^{x-3}(赤色)
  stroke(255,0,0);
  A =
  B =
  a =
  draw_exponential_function(A, B, a);
  
  // (3) y=8・2^x(緑色)
  stroke(0,255,0);
  A =
  B =
  a =
  draw_exponential_function(A, B, a);

  // (4) y=2^x / 4(青色)
  stroke(0,0,255);
  A =
  B =
  a =
  draw_exponential_function(A, B, a);

}

// 指数関数のグラフy = A a^x + Bを描く関数
void draw_exponential_function(
  float A, // 指数関数の係数 
  float B, // 指数関数の漸近線
  float a  // 底
){
  // グラフの定義域
  float x_min = -x_range;
  float x_max = x_range;
  int plot_num = 200; // グラフを描くための頂点の個数  
  
  // グラフを描画
  float x, y; // 関数の座標
  float X, Y; // キャンバス上の座標 
  beginShape();
  for(int i=0; i<=plot_num; i++){
    x = x_min + (x_max - x_min) / plot_num * i; // 指数関数上の点のx座標
    y = A * pow(a,x) + B; // 指数関数上の点のyの値
    // キャンバス上の座標位置に換算
    X = width / 2.0 / x_range * x;
    Y = height / 2.0 / y_range * y;
    vertex(X, Y);
  }
  endShape();

}

ソースコード1 スケッチ「drawExponentialFunctions」の 「drawExponentialFunctions」タブに書かれているコード

このソースコード1は未完成です。各課題の式を$${y = A a^x + B}$$の形に書き換えて、各係数の変数 A, B, a の値を算出し、setup 関数内に記述してプログラムを完成させてください。
最後に、実行ボタンを押すと、キャンバス上に座標軸とともに課題の指数関数のグラフが描かれるはずです。


それでは、よろしくお願いします。

MK's papa


いいなと思ったら応援しよう!