- 締切済み
4次方程式の解
この度はよろしくお願いいたします。 題名のとおりで 次のサイト様 ttp://www.akamon-kai.co.jp/yomimono/kai/kai.html の計算方法(フェラーリの公式)を用いて4次方程式を 代数的に解こうとしたのですが初めてプログラムをしたに等しいので うまく解が出てきてくれません。 見にくいとは思いますがプログラムを以下に示しますので どこを直せばよいかの修正方法・もしくは他の方法がありましたらどうかよろしくお願いします。 use Math::Complex; # 定数の入力 print "aの値は?\n"; $a = <STDIN>; print "bの値は?\n"; $b = <STDIN>; print "cの値は?\n"; $c = <STDIN>; print "dの値は?\n"; $d = <STDIN>; print "eの値は?\n"; $e = <STDIN>; # ω・p1~p3の式 $j = (-1 + sqrt(-3))/2; $k = (-1 - sqrt(-3))/2; $f = -8*$a*$c+3*$b*$b; $g = -72*$a*$c*$e+27*$a*$d*$d+27*$b*$b*$e-9*$b*$c*$d+2*$c*$c*$c; $o = -256*$a*$a*$a*$e*$e*$e+192*$a*$a*$b*$d*$e*$e+128*$a*$a*$c*$c*$e*$e-144*$a*$a*$c*$d*$d*$e; $p = 27*$a*$a*$d*$d*$d*$d-144*$a*$b*$b*$c*$e*$e+6*$a*$b*$b*$d*$d*$e+80*$a*$b*$c*$c*$d*$e; $q = -18*$a*$b*$c*$d*$d*$d-16*$a*$c*$c*$c*$c*$e+4*$a*$c*$c*$c*$d*$d+27*$b*$b*$b*$b*$e*$e; $r = -18*$b*$b*$b*$c*$d*$e+4*$b*$b*$b*$d*$d*$d+4*$b*$b*$c*$c*$c*$e-$b*$b*$c*$c*$d*$d; $h = $o + $p + $q + $r; # xの3乗根を指数対数で表した式 $s = exp(log($g+3*sqrt(3*$h)/3)); $t = exp(log($g-3*sqrt(3*$h)/3)); # 解 $x1 = 1/(12*$a)*(-3*$b+sqrt(3*($f+2*$a*($s+$t)))+sqrt(3*($f+2*$a*($j*$s+$k*$t)))+sqrt(3*($f+2*$a*($k*$s+$j*$t)))); $x2 = 1/(12*$a)*(-3*$b+sqrt(3*($f+2*$a*($s+$t)))-sqrt(3*($f+2*$a*($j*$s+$k*$t)))-sqrt(3*($f+2*$a*($k*$s+$j*$t)))); $x3 = 1/(12*$a)*(-3*$b-sqrt(3*($f+2*$a*($s+$t)))+sqrt(3*($f+2*$a*($j*$s+$k*$t)))-sqrt(3*($f+2*$a*($k*$s+$j*$t)))); $x4 = 1/(12*$a)*(-3*$b-sqrt(3*($f+2*$a*($s+$t)))-sqrt(3*($f+2*$a*($j*$s+$k*$t)))+sqrt(3*($f+2*$a*($k*$s+$j*$t)))); # 解が成立する時の条件 if($s*$t == 4*(12*$a*$e-3*$b*$d+$c*$c) , sqrt(3*($f+2*$a*($s+$t)))*sqrt(3*($f+2*$a*($j*$s+$k*$t)))*sqrt(3*($f+2*$a*($k*$s+$j*$t))) == 27*(-8*$a*$a*$d+4*$a*$b*$c-$b*$b*$b )){ print $x1 , "\n"; print $x2 , "\n"; print $x3 , "\n"; print $x4 , "\n"; } else{break;}
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
とりあえず $s, $t を確認してみてはいかが?
お礼
間違えていましたね。 ありがとうございました。 累乗の演算が出来れば何とかなりそうなのですが うまくいかないです。