9

C ++(またはC、できればC ++)で(関数ではなく)ランダムデータの特定のセットの積分を見つけるためのライブラリを探しています。Cでの統合について尋ねる別の質問がありますが、答えは関数を統合する方法についてもっと議論しています(私は思う...)。これは、最初から最後まで各ポイントのペア間の線分の下の面積を計算するだけで実行できることを理解していますが、これが既に行われている場合は、車輪を再発明したくありません. これが重複している場合は、事前にお詫び申し上げます。私は無駄にかなり広範囲に検索しました。私の数学は私が望むほど強力ではないので、間違った用語を使用している可能性は十分にあります.

助けてくれてありがとう!

クリス

編集:誰かが興味を持っている場合に備えて、私はばかのように感じます. 他のコードを使いやすくするために OO の抽象化を追加しても、おそらく 30 行のコードでした。これは、あらゆる種類の数学から 3 年離れたときにあなたにもたらされることです...すべての助けに感謝します!

4

5 に答える 5

14

これは些細なことです。点が (x0, y0), (x1, y1), ..., (xN, yN) で、点が x0 <= x1 <= ... <= xN となるように並べられている場合、積分は次のようになります。

  • y0 * (x1 - x0) + y1 * (x2 - x1) + ...

補間を使用しない (長方形の領域の合計)、および

  • (y0 + y1)/2 * (x1 - x0) + (y1 + y2)/2 * (x2 - x1) + ...

線形補間 (台形の合計領域) を使用します。

データが y0、y1、...、yN で、対応する x の値が 0、1、...、N であると想定される場合、問題は特に単純です。次に、次のようになります。

  • y0 + y1 + ...

補間を使用しない (長方形の領域の合計)、および

  • (y0 + y1)/2 + (y1 + y2)/2 + ...

線形補間 (台形の合計領域) を使用します。

もちろん、いくつかの単純な代数を使用すると、台形の公式を単純化できます。たとえば、最後のケースでは、次のようになります。

  • y0/2 + y1 + y2 + ...
于 2010-06-05T21:33:32.850 に答える
13

今日は数値試験を受けました:)そして、3つのルールがあります

台形則 :

積分 = h/2 * ( y0 + 2y1 + 2y2 + 2y3 ....... + yn)

中点ルール :

積分 = h * ( y0.5 + y1.5 + y2.5 + .... y(n-0.5) )

y0.5 は、x0 と x1 の間の点における y の値を意味します

シンプソンズのルール:

積分 = h/3 * ( y0 + 4y1 + 2y2 + 4y3 + 2y4 ....... + yn)

ここで、h は実行するステップで、通常は小さい数値です (ただし、丸め誤差を回避するために小さすぎない)、n は実行する期間の数です。

それらは簡単に適用できました...ガウス求積法についても読むことができます

参照:

于 2010-06-05T21:49:18.803 に答える
2

ええ、確かに、それはとても簡単です。持っているデータ ポイントによって形成される台形の面積を合計するだけです。それ以上複雑にすることはできません。それを行うためのライブラリを探すのはかなり無意味です。データをライブラリが必要とする形式に変換するためのコードを書くだけです。自分で計算すると、コードが少なくなります。

于 2010-06-05T21:31:53.833 に答える
1

点 (x0, y0)、(x1, y1) が与えられた場合、台形の下の面積は (x1 - x0) * (y0 + y1) / 2 です。

これらを合計すると、全体の面積を計算できます。

于 2010-06-05T21:34:24.173 に答える
1

あなたの「ランダムデータ」は、(x、y)ペアのセットで構成されています。積分を開始する前に、x の値が単調に増加するリストにペアが並べ替えられていることを確認する必要があります。それができたら、台形積分で十分です。(別名シンプソンの法則)。

于 2010-06-05T21:35:07.163 に答える