左右のリーマン和は定積分の近似です。もちろん、数学では非常に正確である必要があるため、無限に近づくいくつかの細分化で計算することを目指していますが、この課題の目的には必要ありません。代わりに、入力を取り、のいずれかを介して出力を提供し、最短プログラムを書くしようとする必要があり、デフォルトの方法いずれかで、プログラミング言語、次の処理を行い、:
仕事
2つの有理数および(定積分の限界)、正の整数、左/右を表すブール値およびブラックボックス関数与え、の左または右のリーマン和(依存)を計算します、等しいサブディビジョンを使用します。F K ∫ B、F (X )D X N
I / O仕様
およびは、有理数/浮動小数点数または小数にすることができます。
は2つの異なる一貫した値で表すことができますが、入力として完全または部分的な関数を使用することは許可されていないことに注意してください。
はブラックボックス関数です。上記のメタ回答を引用すると、ブラックボックス関数のコンテンツ(コードなど)にアクセスできず、それらを呼び出し(該当する場合は引数を渡す)、出力を観察することしかできません。必要に応じて、提出をテストできるように、言語で使用する構文に関する必要な情報を含めてください。
出力として、要求されたリーマン和を表す有理数/浮動小数点数/分数を提供する必要があります。過去に検討し、浮動小数点の不正確さがある限り1000分の1の最も近い倍数に丸めたときに、あなたの出力は、少なくとも3桁まで正確であると(例えば、無視することができる1.4529999
のではなく、結構です1.453
)。
数学仕様
はと間で連続することが保証されています(ジャンプ、穴、垂直漸近線はありません)。
対処しなければならない3つのケースがあります:(結果はまたは同等のもの)、またはです。
場合、積分はその符号を変えます。また、この場合の積分の正しい意味はに向かっます。
グラフの下の領域は負で、グラフの上の領域は正です。
例/テストケース
私はそれらを少し縮小しなければならなかったので、解像度は最適ではありませんが、それらはまだ読みやすいです。
、k =右:
結果はになります。各長方形の幅はあり、対応する高さはです。
、k =左:
出力はます。
、k = right:
期待される出力値は。これは、境界を反転すると積分が符号を変更するためです()。
、k =左:
リーマンの合計を計算すると、得られ。
、k = right —出力:。
、k = left —出力:。
、K =右-出力:。ここでは、サインはラジアンを使用しますが、代わりに自由に角度を使用してください。
f(x) = x * sin(1 / x); a = 0; b = 1; n = 50; k = right — Output: 0.385723952885505. Note that sine uses radians here, but feel free to use degrees instead.
f(x)がブラックボックスであるのに、なぜ重要なのでしょうか?