私は現在、電卓アプリケーションを書いています。私は微分推定器をそれに書き込もうとしています。以下の式は、それを行う簡単な方法です。通常、紙の上では、最も正確な見積もりを得るために、可能な限り最小の h を使用します。問題は、double が比較的大きな数に非常に小さな数を加算することを処理できないことです。4+1E-200 などは 4.0 になります。h がちょうど 1E-16 だったとしても、実際には 4+1E16 で正しい値が得られますが、16 位以降が失われ、丸めが正しく行われないため、計算すると不正確になります。ダブルスの一般的な経験則は 1E-8 または 1E-7 だと聞いたことがあります。これに関する問題は、2E231+1E-8 が 2E23 になるため、大きな数が機能しないことです。1E-8 はサイズの問題で失われます。
f'(x)=(f(x+h)-f(x))/h as x approaches 0
ポイント 4 で f(x)=x^2 をテストすると、f'(4) は正確に 8 になるはずですが、おそらく正確に 8 になることはないことがわかりました。しかし、最も正確なのは約 1E- のようです。 7 または 1E8 面白いのは、1E-9 から 1E-11 までのすべてが同じ答えを与えることです。h のリストと の結果は次のとおりです。f(x)=x^2 at x=4
1E-7 8.000000129015916
1E-8 7.999999951380232
1E-9 8.000000661922968
1E-10 8.000000661922968
1E-11 8.000000661922968
1E-12 8.000711204658728
ここに私の質問があります:
- h を選択する最良の方法は何ですか。明らかに 1E-8 または 1E-7 は理にかなっていますが、x が 3.14E203 または 2E-231 であっても、任意のサイズの数値で機能するように、x に基づいて h を選択するにはどうすればよいですか.
- 精度の小数点以下の桁数を考慮する必要があります。
- TI 83、84、および Inspire は、微分を 12 桁または精度で数値的に計算でき、ほとんどの場合正しいですが、とにかくそれらの数値の最大精度は 12 桁であり、それらの計算機は非 CAS であるため、実際には何も派生していません。
- 論理的には、1E-7 と 1E-8 の間のどこかに数値があり、より正確な結果が得られます。その数値を見つける方法、または少なくともそれに近づく方法はありますか。
答えた
BobGさん、ありがとうございます。アプリケーションは現在、コマンド ライン PC アプリケーションの 2 つの形式になる予定です。そしてAndroidアプリ。あなたは、Aboutページの部分に特別な感謝で言及されます. もしよろしければ、オープン ソースにすることもできますが、非常に大きなバグが解決されるまで、プロジェクト サイトへのリンクは掲載しません。現時点ではMathulatorと呼んでいますが、すでに著作権があり、ばかげているように聞こえるため、名前が変更される可能性があります.リリース候補がいつ実行されるかはわかりません.安定します。しかし、必要なものをすべて実装できれば、非常に強力になります。ありがとうございます。楽しいプログラミング。