見出し画像

高校数学10分プログラミング(数学Ⅰ編 1.2次関数)9日目「開いた定義域での最大値と最小値を計算する」解説

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

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

開いた定義域での2次関数の最大値と最小値を計算するプログラムを作成することができたでしょうか。

解答例

開いた定義域での2次関数の最大値と最小値を計算するプログラムは以下のソースコード2のようになります。

// 開いた領域での2次関数の最大値と最小値を計算する
void setup(){

  // 2次関数の係数
  float a = 1.0;
  float b = 0.0;
  float c = 0.0;  

  // 定義域
  float x_l = -2.0; // 定義域の左端
  float x_r = 3.0; // 定義域の右端
  int plot_num = 200; // 定義域を分割するための個数  
  
  float x, y; // 関数の座標
  float y_max = MIN_FLOAT; // 最大値 float型の最大値で初期化
  float x_max = 0.0; // 関数が最大値を取るときのxの値  
  float y_min = MAX_FLOAT; // 最小値 float型の最大値で初期化
  float x_min = 0.0; // 関数が最小値を取るときのxの値   

  // 2次関数の最大値と最小値を計算する処理
  for(int i=0; i<=plot_num; i++){
    x = x_l + (x_r - x_l) / plot_num * i; // 関数のx座標
    y = quadraticfunction(a,b,c,x); // 関数の値
    // 最大値を求める    
    if( y_max < y ){
      y_max = y;
      x_max = x;
    }
    // 最小値を求める
    if( y_min > y ){
      y_min = y;
      x_min = x;
    }    
  }
  
  // x_maxが定義域に入っているか確認
  if( x_max > x_l && x_max < x_r ){
    println("最大値 ", x_max, y_max);
  } else {
    println("最大値なし");
  }

  // x_minが定義域に入っているか確認
  if( x_min > x_l && x_min < x_r ){
    println("最小値 ", x_min, y_min);
  } else {
    println("最小値なし");
  }

}

// 2次関数の一般形
float quadraticfunction(
  float a, // 2次の係数
  float b, // 1次の係数
  float c, // 定数項
  float x
){
  return a*x*x + b*x + c;
}

ソースコード2 開いた定義域での2次関数の最大値と最小値を計算するプログラム(完成版)

スケッチ名を「max_min_QuadraticFunction_OpenDomain」として開発環境ウィンドウを立ち上げて、テキストエディタ部分にソースコード2を記述し、実行してみると、コンソールに

最大値なし
最小値 0.0 0.0

と出力されます(図1)。

図1 開いた定義域での最大値と最小値の結果が出力される


やっておいてほしいこと

ソースコード2で追加された

  // x_maxが定義域に入っているか確認
  if( x_max > x_l && x_max < x_r ){
    println("最大値 ", x_max, y_max);
  } else {
    println("最大値なし");
  }

  // x_minが定義域に入っているか確認
  if( x_min > x_l && x_min < x_r ){
    println("最小値 ", x_min, y_min);
  } else {
    println("最小値なし");
  }

の部分について、必要であれば、記事『高校数学をプログラミングで解く(準備編)「1-4 条件分岐、繰り返し処理」』の条件分岐の節を復習しておいてください。


本日は以上です。
明日は、2次関数の最大値、最小値をグラフ表示するプログラムを考えます。

明日もよろしくお願いします。

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

MK’s papa

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