高校数学10分プログラミング(数学Ⅱ編 1.複素数と方程式)6日目「解と係数の関係の問題2」解説
マガジンリスト > 数学Ⅱ編 1.複素数と方程式 > 6日目 解説
本日の課題、おつかれさまでした。
解と係数の関係を利用する問題を解くプログラムを作成できたでしょうか。
解答例
課題『高校数学10分プログラミング(数学Ⅱ編 1.複素数と方程式)4日目「2次方程式の解を求める」』で作成した、2次方程式の解を求めるプログラム(スケッチ「solveQuadraticEquation」)を示します(ソースコード1)。
// 2次方程式の解を求める
void setup(){
// 2次方程式ax^2+bx+c=0の係数
float a = 1.0;
float b = -2.0;
float c = 0.0;
// 判別式
float D = b*b-4.0*a*c;
// 2次方程式の解の個数を求め、その解も求める
if( D > 0 ){
float x1, x2;
// 1つ目の実数解
x1 = (-b + sqrt(D))/2.0/a;
// 2つ目の実数解
x2 = (-b - sqrt(D))/2.0/a;
print("異なる2つの実数解をもつ: ");
println(x1, x2);
} else if( D == 0 ){
float x1;
// 1つの実数解(重解)
x1 = -b/2.0/a;
print("ただ1つの実数解(重解)をもつ: ");
println(x1);
} else {
float x_r, x_i;
// 2つの虚数解の実部
x_r = -b/2.0/a;
// 2つの虚数解の虚部
x_i = sqrt(-D)/2.0/a;
print("異なる2つの虚数解をもつ: ");
println(x_r + "+" + abs(x_i) + "i",x_r + "-" + abs(x_i) + "i");
}
}
ソースコード1 2次方程式の解を求めるプログラム(再掲)
ソースコード1の
// 2次方程式ax^2+bx+c=0の係数
float a = 1.0;
float b = -2.0;
float c = 0.0;
の部分を、課題(1)に合わせて修正していきます。注意点としては、和$${5}$$、積$${-14}$$に対して、2次方程式$${ax^2+bx+c=0}$$の係数は、それぞれ$${a=1, b=-5, c=-14}$$と設定されることです。
// 2次方程式ax^2+bx+c=0の係数
float a = 1.0;
float b = -5.0;
float c = -14.0;
この修正を行ってからスケッチ「solveQuadraticEquation」を実行すると、図1のように、
異なる2つの実数解をもつ: 7.0 -2.0
とコンソールに出力されます。
この結果が正しいことは、$${7+(-2)=5, \ \ 7 \times (-2) = -14}$$となるので、簡単に確かめることができます。
同様にして、課題(2)や(3)も2次方程式の解を求めるプログラムを利用して2つの数を求めることができます。結果として、課題(2)はソースコード1に対して$${a=1, b=-4, c=-1}$$、
// 2次方程式ax^2+bx+c=0の係数
float a = 1.0;
float b = -4.0;
float c = -1.0;
と設定してプログラムを実行することで、図2のように、
異なる2つの実数解をもつ: 4.236068 -0.23606801
とコンソールに出力されます。
和が$${4}$$、積が$${1}$$になっていることは電卓などを使って簡単に確かめることができます。ちなみに、2つの数は$${4.236068 = 2+\sqrt{5}, \ -0.23606801 = 2-\sqrt{5}}$$となっています。
課題(3)はソースコード1に対して$${a=1, b=-2, c=2}$$
// 2次方程式ax^2+bx+c=0の係数
float a = 1.0;
float b = -2.0;
float c = 2.0;
と設定することで、図3のように、
異なる2つの虚数解をもつ: 1.0+1.0i 1.0-1.0i
とコンソールに出力されます。
2つの数は$${(1+i)+(1-i)=2, \ \ (1+i)\cdot(1-i) = 2}$$を満たすので、これらの結果も正しいことがわかります。
本日は以上です。
明日も、解と係数の関係に関する問題を考えます。
明日もよろしくお願いします。
※今回の課題とその解答例について質問や疑問がある方は、本記事の下部にあるコメント欄からお願いします。
MK’s papa