高校数学10分プログラミング(数学Ⅱ編 4.指数関数と対数関数)2日目「指数関数のグラフを描く」解説
マガジンリスト > 数学Ⅱ編 4.指数関数と対数関数 > 2日目 解説
本日の課題、おつかれさまでした。
課題の指数関数のグラフを描くプログラムを作成することができたでしょうか。
解答例
今回の課題の指数関数のグラフを描くプログラムの例を示します。
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 = 1.0;
float B = 3.0;
float a = 2.0;
draw_exponential_function(A, B, a);
// (2) y=2^{x-3}(赤色)
stroke(255,0,0);
A = 1.0/8.0;
B = 0.0;
a = 2.0;
draw_exponential_function(A, B, a);
// (3) y=8・2^x(緑色)
stroke(0,255,0);
A = 8.0;
B = 0.0;
a = 2.0;
draw_exponential_function(A, B, a);
// (4) y=2^x / 4(青色)
stroke(0,0,255);
A = 1.0/4.0;
B = 0.0;
a = 0.5;
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();
}
ソースコード2 指数関数のグラフを描くプログラム
ソースコード2を、スケッチ「drawExponentialFunctions」の 「drawExponentialFunctions」タブのテキストエディタ部分に書いて実行すると、実行ウィンドウのキャンバス上に、課題(1)のグラフが黒色、課題(2)のグラフが赤色、課題(3)のグラフが緑色、課題(4)のグラフが青色でそれぞれ描かれます(図2)。
プログラムの解説
各課題の式を$${y = A a^x + B}$$の形に書き換えて、各係数の変数 A, B, a の値を算出します。
課題(1)は、
$$
y = 2^x+3 \rightarrow A=1, B=3, a=2
$$
課題(2)は
$$
y = 2^{x-3} = \frac{1}{8} 2^x \rightarrow A=\frac{1}{8}, B=0, a=2
$$
課題(3)は
$$
y = 8 \cdot 2^x \rightarrow A=8, B=0, a=2
$$
課題(4)は
$$
y = \frac{2^{-x}}{4} = \frac{1}{4} \left( \frac{1}{2} \right)^x \rightarrow A=\frac{1}{4}, B=0, a=\frac{1}{2}
$$
となります。ソースコード1の setup 関数内に、それぞれの課題の$${A,B,a}$$を設定することで指数関数のグラフを描くことができます。
本日は以上です。
明日は、対数の値を計算するプログラムを考えていきます。
明日もよろしくお願いします。
読んだ感想などをお寄せください
本記事を読んだ感想や質問などを以下のお問い合せフォームからお寄せください。(お問合せフォームの本文に、本記事のタイトルを入れてください。)
MK’s papa