見出し画像

高校数学10分プログラミング(数学Ⅰ編 1.2次関数)15日目「絶対値を含む関数のグラフ」解説

マガジンリスト > 数学Ⅰ編 1.2次関数 > 15日目 解説

本日の課題、おつかれさまでした。

絶対値を含む関数のグラフを描くプログラムを作成することができたでしょうか。

解答例

今回の課題であった絶対値を含む関数$${y=(x+1)|x-3|}$$は、絶対値を計算するための関数 abs を用いると、

// 絶対値を含む関数
float absolutefunction(
  float x
){
  return (x+1.0)*abs(x-3.0);
}

と書くことができます。したがって、ソースコード1は

// 絶対値を含む関数のグラフを描く
void setup(){
  size(500,500);
  noLoop();
  float x_range = 10.0; // x軸の表示範囲 -x_rangeからx_rangeまで
  float y_range = 10.0; // y軸の表示範囲 -y_rangeからy_rangeまで 
  setAxes(x_range, y_range); // 座標軸の準備
  
  noFill();
  stroke(0,0,0);
  
  // グラフの定義域
  float x_l = -x_range; // 定義域の左端
  float x_r = x_range; // 定義域の右端
  int plot_num = 200; // グラフを描くための頂点の個数  
  
  // グラフを描画
  float x, y; // 関数の座標
  float X, Y; // キャンバス上の座標 
  beginShape();
  for(int i=0; i<=plot_num; i++){
    x = x_l + (x_r - x_l) / plot_num * i; // 関数のx座標
    y = absolutefunction(x); // 関数の値
    // キャンバス上の座標位置に換算
    X = width / 2.0 / x_range * x;
    Y = height / 2.0 / y_range * y;
    vertex(X, Y);
  }
  endShape();
  
}

// 絶対値を含む関数
float absolutefunction(
  float x
){
  return (x+1.0)*abs(x-3.0);
}

ソースコード2 絶対値を含む関数のグラフを描くプログラム(完成版)

となります。ソースコード2でスケッチ「drawAbsoluteFunction」の 「drawAbsoluteFunction」タブのテキストエディタ部分を書き換えて、実行してみると、図1のように絶対値を含む関数のグラフを描かれます。

図1 絶対値を含む関数のグラフ

解答例2

先程は、絶対値を含む関数を表すために、絶対値を計算する関数 abs を利用しましたが、abs 関数を利用しない方法も紹介しておきます。
今回考える絶対値を含む関数では絶対値記号の中の式は$${x-3}$$となっていますので、

$$
|x-3| = \begin{cases}
x-3 & x \geq 3 \mathrm{のとき} \\
-x+3 & x < 3 \mathrm{のとき}
\end{cases}
$$

と場合分けすることができます。これを利用すると、

$$
y=(x+1)|x-3| = \begin{cases}
x^2-2x-3 & x \geq 3 \mathrm{のとき} \\
-x^2+2x+3 & x < 3 \mathrm{のとき}
\end{cases}
$$

となります。このことから、絶対値を含む関数$${y=(x+1)|x-3|}$$を、if文を利用して以下のように関数化することができます。

// 絶対値を含む関数
float absolutefunction(
  float x
){
  float y;
  if( x >= 3.0 ){
    y = x*x - 2.0*x - 3.0;
  } else {
    y = -x*x + 2.0*x + 3.0;
  }
  return y;
}

ソースコード1にこちらの関数を記述して、実行しても図1と同じグラフが得られますので、実際に試してみてください。


本日は以上です。
次回は、三角比に関連する問題について考えていきたいと思います。

次回もよろしくお願いします。

※今回の課題とその解答例について質問や疑問がある方は、本記事の下部にあるコメント欄からお願いします。

MK’s papa

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