多項式と境界が与えられたときに、その多項式のすべての実根を、境界を超えない絶対誤差まで見つける自己完結型プログラムを作成します。
制約
Mathematicaとおそらく他のいくつかの言語には1シンボルのソリューションがあり、それはつまらないことを知っているので、基本的な操作(加算、減算、乗算、除算)に固執する必要があります。
入力および出力形式には一定の柔軟性があります。任意の妥当な形式で、stdinまたはコマンドライン引数を介して入力を受け取ることができます。浮動小数点を許可するか、有理数の表現を使用する必要がある場合があります。バウンドまたはバウンドの逆数を取ることができ、浮動小数点を使用している場合は、バウンドが2 ulp未満ではないと想定できます。多項式は、単項係数のリストとして表現する必要がありますが、ビッグエンディアンまたはリトルエンディアンの可能性があります。
プログラムが常に機能する理由を正当化できる必要があります(モジュロ数値の問題)。ただし、完全な証明をインラインで提供する必要はありません。
プログラムは、根が繰り返される多項式を処理する必要があります。
例
x^2 - 2 = 0 (error bound 0.01)
入力は例えば
-2 0 1 0.01
100 1 0 -2
1/100 ; x^2-2
出力は例えば
-1.41 1.42
だがしかし
-1.40 1.40
約0.014の絶対誤差があるため...
テストケース
シンプル:
x^2 - 2 = 0 (error bound 0.01)
x^4 + 0.81 x^2 - 0.47 x + 0.06 (error bound 10^-6)
複数のルート:
x^4 - 8 x^3 + 18 x^2 - 27 (error bound 10^-6)
ウィルキンソンの多項式:
x^20 - 210 x^19 + 20615 x^18 - 1256850 x^17 + 53327946 x^16 -1672280820 x^15 +
40171771630 x^14 - 756111184500 x^13 + 11310276995381 x^12 - 135585182899530 x^11 +
1307535010540395 x^10 - 10142299865511450 x^9 + 63030812099294896 x^8 -
311333643161390640 x^7 + 1206647803780373360 x^6 -3599979517947607200 x^5 +
8037811822645051776 x^4 - 12870931245150988800 x^3 + 13803759753640704000 x^2 -
8752948036761600000 x + 2432902008176640000 (error bound 2^-32)
NBこの質問は、約3か月間Sandboxにありました。投稿する前に改善が必要だと思う場合は、Sandboxにアクセスして、他の提案された質問がMainに投稿される前にコメントしてください。
fractions.Fraction
(合理的な型)を使用すると仮定できますか?(c)次数<1の多項式を処理する必要がありますか?(d)先行係数が1であると仮定できますか?