見出し画像

高校数学をプログラミングで解く(数学I編)「1-8 絶対値を含む関数のグラフ」


はじめに

今回は、数学Iで学ぶ「絶対値を含む関数のグラフ」について、絶対値記号の中の式を符号によって場合分けする方法と絶対値関数absを利用する方法の2通りで、絶対値を含む関数のグラフを描くプログラムを作成します。

絶対値を含む関数

今回は、絶対値を含む関数

$$
y=(x+1)|x-3|
$$

のグラフを描くことを考えていきます。

絶対値を含む関数のグラフを描く

絶対値を含む関数のグラフを描くプログラムを作成する方法は大きく2通り考えることができます。1つは、絶対値記号の中の式を符号によって場合分けする方法で絶対値を含む関数をif文を利用して作成してグラフを描きます。もう1つは、絶対値関数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の関数を利用して、絶対値を含む関数のグラフを描いてみます。そのプログラムは記事『高校数学をプログラミングで解く(数学I編)「1-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
){
  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;
}

ソースコード2 絶対値を含む関数のグラフ(場合分けを利用)

スケッチ「drawAbsoluteFunction」を準備し、その「drawAbsoluteFunction」フォルダに「setAxes.pde」ファイルをコピーして、ソースコード2を、「drawAbsoluteFunction」タブのテキストエディタ部分に書いて実行すると、図1のように、実行ウィンドウのキャンバスに絶対値を含む関数のグラフが描かれます。

図1 絶対値を含む関数のグラフ(場合分けを利用)

絶対値関数absを利用する方法

次に、絶対値関数absを利用する方法で考えてみます。プログラミング言語Processsingでは、絶対値を計算するための関数「abs」があります。

abs(n);

この関数の引数と返り値は以下のようになっています。

n:数値 float型 または int型
返り値:絶対値 float型 または int型

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

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

ソースコード3 絶対値を含む関数(abs関数を利用)

絶対値を含む関数のグラフを描く(abs関数を利用)

では、ソースコード3の関数を利用して、絶対値を含む関数のグラフを描いてみます。ソースコード2の絶対値を含む関数をソースコード3で置き換えるだけで作成できます。

// 絶対値を含む関数のグラフを描く
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);
}

ソースコード4 絶対値を含む関数のグラフ(abs関数を利用)

スケッチ「drawAbsoluteFunction2」を準備し、その「drawAbsoluteFunction2」フォルダに「setAxes.pde」ファイルをコピーして、ソースコード4を、「drawAbsoluteFunction2」タブのテキストエディタ部分に書いて実行すると、図2のように、実行ウィンドウのキャンバスに絶対値を含む関数のグラフが描かれます。図1と同じです。

図2 絶対値を含む関数のグラフ(abs関数を利用)

練習問題

次の関数のグラフをかけ。
(1) $${y = | x^2-2x-3| }$$
(2) $${y = |x-2|+x}$$
(3) $${y = |x+1|+|x-2|}$$

ぜひ、 絶対値記号の中の式を符号によって場合分けする方法と絶対値関数absを利用する方法の両方でグラフを描いてみて同じ結果となるか確認してみてください。

まとめ

今回は、数学Iで学ぶ「絶対値を含む関数のグラフ」について、絶対値記号の中の式を符号によって場合分けする方法と絶対値関数absを利用する方法の2通りで、絶対値を含む関数のグラフを描くプログラムを作成しました。
いずれの方法でも絶対値を含む関数のグラフを描くことができますので、どちらの方法を選んでもよいですが、プログラムとしては、abs関数を利用する方が関数化がシンプルになりますし、間違いも少ないでしょう。
ただ、絶対値の場合分けは、絶対値を含む関数を用いた数学の問題で利用せざるを得ない方法でもあるので、やはりどちらでも考えることができるようにしておきましょう。

参考文献

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

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