高校数学10分プログラミング(数学Ⅱ編 1.複素数と方程式)5日目「解と係数の関係の問題1」
マガジンリスト > 数学Ⅱ編 1.複素数と方程式 > 5日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学II編 1.複素数と方程式)の5日目です。
本日の課題は、解と係数の関係を確かめることです。
2次方程式の解と係数の関係
$${a,b,c}$$は定数、$${a \neq 0}$$とします。
$$
a x^2+bx+c=0 \mathrm{の2つの解が} \alpha, \beta
$$
$$
\Leftrightarrow \alpha + \beta = -\frac{b}{a}, \ \alpha \beta = \frac{c}{a}
$$
$$
\Leftrightarrow ax^2+bx+c = a(x-\alpha)(x-\beta)
$$
課題
方程式$${2x^2-2x+1=0}$$の2つの解が$${\alpha, \beta}$$のとき、次の式の値を求めて、コンソールに出力するプログラムを作成してください。そして、このプログラムの結果が正しいことを、解と係数の関係を用いて別途手計算したものと比較して確かめてみてください。
(1) $${\alpha^2 \beta + \alpha \beta^2}$$
(2) $${\alpha^2+\beta^2}$$
(3) $${(\alpha - \beta)^2}$$
(4) $${(1+\alpha)(1+\beta)}$$
(5) $${\alpha^3+\beta^3}$$
(6) $${\frac{\beta^2}{\alpha}+\frac{\alpha^2}{\beta}}$$
ヒント
今回作成するプログラムでは、解と係数の関係は利用せずに2次方程式の解である$${\alpha, \beta}$$を実際に算出して各式に代入する方法で計算してみてください。
アルゴリズム
2次方程式の解である$${\alpha}$$と$${\beta}$$を求めます。それには課題『高校数学10分プログラミング(数学Ⅱ編 1.複素数と方程式)4日目「2次方程式の解を求める」』で説明した、2次方程式の解の公式を用いて算出します。この問題の2次方程式の判別式は$${-4}$$となり負の値を持つので、$${\alpha,\beta}$$は虚数解、つまり複素数になることがわかります。そのため、この問題の各式の値は、課題『高校数学10分プログラミング(数学Ⅱ編 1.複素数と方程式)1日目「複素数の四則演算を行う」』で解説したものと同じように、複素数である$${\alpha,\beta}$$を PVector クラスで表し、複素数の四則演算を行うための関数を再利用して計算することにします。
プログラム
このアルゴリズムを踏まえて、この課題のプログラムは以下のようになります(ソースコード1)。
// 解と係数の関係1
void setup(){
// 2次方程式の係数
float a = 2.0;
float b = -2.0;
float c = 1.0;
// 2次方程式 2x^2-2x+1=0の解
float x_r = -b/2.0/a;
float x_i = abs(sqrt(abs(b*b-4.0*a*c))/2.0/a);
PVector alpha = new PVector(x_r, x_i);
PVector beta = new PVector(x_r, -x_i);
// (1) a1 = alpha^2 beta + alpha beta^2
PVector a1 = c_sum(c_prod(c_prod(alpha,alpha),beta),c_prod(alpha,c_prod(beta,beta)));
println("(1)"+ a1.x + "+" + a1.y + "i" );
// (2) a2 = alpha^2 + beta^2
PVector a2 =
println("(2)"+ a2.x + "+" + a2.y + "i" );
// (3) a3 = (alpha - beta)^2
PVector a3 =
println("(3)"+ a3.x + "+" + a3.y + "i" );
// (4) a4 = (1 + alpha)(1 + beta)
PVector unit = new PVector(1.0,0.0);
PVector a4 =
println("(4)"+ a4.x + "+" + a4.y + "i" );
// (5) a5 = alpha^3 + beta^3
PVector a5 =
println("(5)"+ a5.x + "+" + a5.y + "i" );
// (6) a6 = beta^2/alpha + alpha^2/beta
PVector a6 =
println("(6)"+ a6.x + "+" + a6.y + "i" );
}
// 2つの複素数の和を計算する関数
PVector c_sum(
PVector c1,
PVector c2
){
PVector sum = c1.copy().add(c2);
return sum;
}
// 2つの複素数の差を計算する関数
PVector c_sub(
PVector c1,
PVector c2
){
PVector sub = c1.copy().sub(c2);
return sub;
}
// 2つの複素数の積を計算する関数
PVector c_prod(
PVector c1,
PVector c2
){
PVector prod = new PVector();
prod.x = c1.x * c2.x - c1.y * c2.y;
prod.y = c1.x * c2.y + c1.y * c2.x;
return prod;
}
// 2つの複素数の商を計算する関数
PVector c_div(
PVector c1,
PVector c2
){
PVector div = new PVector();
div.x = (c1.x * c2.x + c1.y * c2.y)/(c2.x*c2.x+c2.y*c2.y);
div.y = (-c1.x * c2.y + c1.y * c2.x)/(c2.x*c2.x+c2.y*c2.y);
return div;
}
ソースコード1 課題の式の値を計算するプログラム(未完成)
ソースコード1では、課題(1)の解 a1 についてはその計算式を記述しています。この a1 の計算式を参考にして、課題(2)から(6)までの解(変数 a2 から a6 )の計算式を完成させてください。
解と係数の関係を用いた計算
そして、別途、課題を解と係数の関係を用いて$${\alpha+\beta, \ \ \alpha \beta}$$を計算し、これらの関係式を用いて課題(1)-(6)を手計算で計算してみてください。
それでは、よろしくお願いします。
MK's papa
この記事が気に入ったらサポートをしてみませんか?