問題タブ [numerical-integration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
575 参照

java - データポイントを通じてのみ知られる関数の数値積分-AS3優先

不規則な間隔で取られた値のいくつかによって記述される線の下の領域を近似するライブラリまたはオープンソース関数はありますか?

アクションスクリプトが推奨されますが、Javaも正常に機能する可能性があります。

0 投票する
1 に答える
2323 参照

r - adaptIntegrate と integrate のパフォーマンス

被積分関数がベクトル値である1 次元で数値積分を実行したいと思います。スカラー被積分関数のみを許可するため、何度か呼び出す必要があります。このパッケージは適しているように見えますが、1D 積分のパフォーマンスは非常に悪いようです。次の例 (スカラー値の被積分関数と 1D 積分) を考えてみましょう。integrate()cubature

どういうわけか、adaptIntegrate同様の精度のためにさらに多くの関数評価を使用しているようです。どちらの方法も明らかにガウス クロンロッド求積法 (1D の場合: 15 点のガウス求積法) を使用してい?integrateますが、「ウィンのイプシロン アルゴリズム」が追加されています。それは大きなタイミングの違いを説明するでしょうか?

次のようなベクトル値の被積分関数を処理する別の方法の提案を受け入れます。

ありがとう。

0 投票する
3 に答える
226 参照

c - Cの不定積分

ラドン変換アルゴリズムを実装するacプログラムを作成しようとしています。画像f(x、y)の場合、g(phi、s)のコレクションであり、すべてのphiは画像のランドン変換であり、g(phi、s)は次のように定義されます。

ここに画像の説明を入力してください

現在、私はCの経験があまりなく、複雑な数学演算を実行するために常にJavaとC#を備えた外部ライブラリを使用していました。cの関数を見つけるのに苦労しています。また、それを実行する関数を作成するのにも苦労しています。数値積分を調べていますが、それは定積分の場合です。どんな助けでもいただければ幸いです

0 投票する
2 に答える
1249 参照

math - ゲームデザインにおける数値積分、ルンゲクッタ、RK4

ほぼすべてのゲームで、いくつかのゲーム ループが使用される傾向があります。Gafferongames には、適切に設計されたゲーム ループの作成方法に関するすばらしい記事があります: http://gafferongames.com/game-physics/fix-your-timestep/

彼のコードでは、オブジェクトの位置、速度、加速度が含まれintegrate( state, t, deltaTime );ていると思われるを使用しています。彼は RK4 を使用して からにstate統合します。tt+deltaTime

私の質問は、正確な値を見つけるために運動方程式 (ここ) を使用できるのに、なぜ RK4 のような数値積分手法を使用するのですか?

これらの方程式は、加速度が一定の場合に機能します。タイムステップ内で加速度が変化することはめったにないようです。RK4 は、パフォーマンスが低く、精度が低く、より複雑なソリューションのようです。

編集: オブジェクトに「ジャーク」値を追加しても、本当に必要な場合は、加速度、速度、および変位の正確な式を見つけることができると思います。

編集 2: まあ、私は彼の「統合の基本」の記事をあまり注意深く読んでいませんでした。彼はダンパーとスプリングをモデル化していると思いますが、タイムステップ内で一定でない加速を引き起こします。

0 投票する
1 に答える
376 参照

fft - FFTによる振動関数のフーリエ積分/フーリエ変換

f(x) = cos(x^2)g(k) = pi^0.5 cos((pi*k)^2 - pi/4)はフーリエペアです。

g(k)FFTを使ったフーリエ積分で再現したいf(x)、つまり

概算Integrate[ f(x) * exp(2 pi * ikx), {x, -inf, inf} ]

Sum[ fn * exp(2 pi * ik x_n), {n, 0, N-1} ] * Delta_x

ただし、結果は、まったく一致する場合g(k)、非常に狭いk範囲でのみ一致します(同じコードは、ガウス関数などの滑らかなフーリエペアに対して適切に機能します)。N問題はとの適切な値を選択することだと思いますDelta_x。それらを選択する方法について確立されたルールはありますか?文学の関連トピックはどこにありますか(数値レシピのセクション13.9を読みましたが、問題が解決しないようです)?

0 投票する
0 に答える
251 参照

python - scipy.integrate.odeint での KeyboardInterrupt の処理

scipy.integrate.odeint の呼び出しで導関数の評価で例外を処理する合理的な方法はありますか?

この問題は、積分器がタイトなループで呼び出され、何らかの理由で実行を停止する必要がある場合に重要になります。現時点では、プロセスを終了させるために例外 (以下を参照) に変換することに頼っています。これは問題ありませんが、明らかに理想的ではありませんKeyboardInterruptSystemExit

scipy.integrate バインディングと Fortran コードは odepack.error を操作しているように見えますが、これらの例外が Python に伝播しているかどうかはよくわかりません。

0 投票する
3 に答える
2043 参照

c++ - 輪郭積分C++のアルゴリズム

複素平面の周回積分を計算する応用数学プログラムを書こうとしています。手始めに、台形法のアルゴリズムを書きたかったのですが、それがどのようになるかを理解するのに少し固執しています。結局のところ、私たちは通常、2Dグラフの場合は台形法を考えますが、ここではf:C-> Cであるため、4Dについて話します。

最終的には、このアルゴリズムで残差を計算したいと思っていますが、原点を中心に半径1の円として等高線を使用して、最も単純なf(z)= 1 / zを試してみると、1に近いものは何も得られません(これが私です取得する必要があります)。台形法のコードは次のとおりです。

ここで、「関数」はf(z)= 1 / zを計算するだけで(これは正しく行われていると確信しています)、complexCartesianはa+bi形式の複雑なポイントのクラスです。

私は、これらの各機能が本来あるべきことを実行しているとかなり確信しています。(複素数の標準クラスがあることは知っていますが、練習用に自分で作成すると思いました)。実際に統合するには、次を使用します。

実軸のみに沿って積分する場合、または関数を定数に置き換えると、正しい結果が得られます。そうでなければ、私は10 ^(-10)から10 ^(-15)のオーダーの数字を得る傾向があります。何か提案があれば、よろしくお願いします。

ありがとう。

0 投票する
1 に答える
422 参照

python - Python: odeint を使用したしきい値モデルの実装

私が扱っている問題 (示されている例は非常に単純化されています) は一般的な問題のようですが、まだ解決策を見つけていません。v1、v2、v3 の 3 つの異なる反応があり、次のように定義されています。

v1: R <-> A + C; v1 = k1*(R - A*C/5000.)

v2: R <-> B + C; v2 = k2*(R - B*C/5000.)

v3: A + B -> P; v3 = k3*A*B

リソース R を使用して、最初の 2 つの反応はそれぞれ A と C および B と C を生成しますが、3 番目の反応は A と B を生成物 P に変換します (k1、k2、k3 は定数で、ここでは 1 に設定されています)。

3 番目の反応は、C が Cthr (ここでは Cthr = 25) と呼ばれる特定のしきい値を超えた場合にのみ発生すると想定されています。それ以外の場合は v3 は 0 です。製品Pの.

私はそれを次のように実装しました:

シミュレーションの出力は次のようになります: http://i50.tinypic.com/apdvkj.png

したがって、最初にしきい値に達するまで (v3 が 0、P が生成されない) 動作するようですが、その後は C が 0 に設定されず、理由がわかりません。
私が取得したいのは、C がしきい値まで生成され、0 に低下し、再び生成され、0 に低下するなど、のこぎり波のように見えることです。
P の時間経過は階段のように見えるはずです (Cthr を超えた場合にのみ生成されます)。

C を 0 に戻し、期待される出力を受け取るために私がしなければならないことを誰かが知っていますか? どうもありがとう!

0 投票する
2 に答える
777 参照

numerical-methods - odeint 関数定義の使用

かなり初心者の質問なので、ご容赦ください。

ここにある例に従っています-> http://www.codeproject.com/Articles/268589/odeint-v2-Solving-ordinary-differential-equations

特に、私はこの関数を見ています:

私の場合、R は一連の値 (100 個の double を持つベクトル) を取ります。

odeint は次のように呼び出されます。

Rの各値に対してこれを行いたいのですが、どうすればこれを達成できますか? 私の C++/OOP に関する知識は限られていますが、喜んで学びます。

ありがとうございました。

0 投票する
1 に答える
2651 参照

c# - Microsoft Solution Foundation を使用して目標を定義する

プログラムの目的: 統合。高次元 (最大 100) の適応求積 (別名数値積分) アルゴリズムを実装しています。アイデアは、そのポイントでのエラーの推定値に比例するサンプリング密度を使用してポイントを評価することにより、ボリュームをランダムに小さなセクションに分割することです。早い段階で、均一なサンプルを「バーンイン」してから、推定誤差に対するガウス分布に従ってポイントをランダムに選択します。シミュレートされたアニーリングと同様の方法で、「温度を下げ」、時間の経過とともにガウス分布の標準偏差を減らします。これにより、最初はエラーの少ないポイントが選択される可能性がかなり高くなりますが、後で着実に減少して選択されます。確率。これにより、プログラムは、エラー関数の不完全性のために見逃される可能性のあるスパイクに遭遇することができます。(私のアルゴリズムは精神的に似ていますマルコフ連鎖モンテカルロ積分.)

機能特性。統合する機能は、自然災害による複数の建物の保険損害の推定です。ポリシー機能はスムーズではありません: 免責額、上限、レイヤー (たとえば、100 万ドルの損失まではゼロの支払い、100 万ドルから 200 万ドルまでは 100% の支払い、200 万ドルを超えるとゼロの支払い)、およびその他の奇妙なポリシー条件があります。これにより、多くの平面で導関数を持たない非線形の動作と関数が導入されます。ポリシー関数に加えて被害関数があります。これは、建物の種類とハリケーンの強さによって異なり、決して釣鐘型ではありません。

問題のコンテキスト: エラー関数。難しいのは、適切な誤差関数を選択することです。各ポイントについて、これに役立つと思われる測定値を記録します。関数の大きさ、以前の測定の結果としてどれだけ変化したか (一次導関数のプロキシ)、ポイントが占める領域の体積 (より大きな体積はエラーをよりよく隠す)、および領域の形状に関連する幾何学的要因。私の誤差関数は、各測定値に異なる重みが割り当てられているこれらの測定値の線形結合になります。(悪い結果が得られた場合は、非線形関数を検討します。) この取り組みを支援するために、各重みの可能な値の広い範囲にわたって最適化を実行することにしました。これが Microsoft Solution Foundation です。

最適化するもの: エラー ランク。私の測定値は、0 から 1 まで正規化されています。これらのエラー値は、積分が関数値、変更などの最近の平均を反映するように進行するにつれて、徐々に修正されます。その結果、実際のエラー値を生成する関数を作成しようとしているのではなく、真の誤差、つまり、すべてのサンプル ポイントがこの推定誤差値で並べ替えられた場合、真の誤差で並べ替えられた場合と同様のランクが付けられるはずです。

すべてのポイントが等しいわけではありません。#1 の真のエラーを含むポイント領域が #1000 にランク付けされているかどうか (またはその逆) は非常に気にしますが、#500 のポイントが #1000 にランク付けされているかどうかはほとんど気にしません。私の成功の尺度は、アルゴリズムの実行の途中の時点で、多くの領域にわたって次の合計を最小化することです。

ABS(Log2(trueErrorRank) - Log2(estimatedErrorRank))

Log2 の場合、数値以下の最大の 2 乗を返す関数を使用しています。この定義から、有用な結果が得られます。1 番と 2 番を入れ替えると 1 ポイントかかりますが、2 番と 3 番を入れ替えても無料です。これには、ポイントを 2 の累乗範囲に階層化する効果があります。範囲内で交換されたポイントは機能に追加されません。

私が評価する方法これを行うRankというクラスを作成しました。

  1. すべての領域を真の誤差で 1 回ランク付けします。

  2. パラメーター化された重みの個別のセットごとに、その領域の試行 (推定) エラーを計算します。

  3. その試行錯誤で領域を並べ替えます。

  4. 各地域のトライアル ランクを計算します。

  5. 2 つのランクのログの絶対差を合計し、これをパラメーター化の値と呼びます。したがって、値を最小化する必要があります。

C# コード. 以上のことをすべて行った後は、最適なパラメーターを見つけるために Microsoft Solver Foundation をセットアップする方法が必要です。構文は私を困惑させました。これが、これまでに作成した C# コードです。そこには、私が特定した 3 つの問題に対するコメントが表示されます。多分あなたはさらに多くを見つけることができます!これを機能させる方法はありますか?

更新: フォールバックとして別のライブラリを探すことにし、DotNumerics ( http://dotnumerics.com/ ) を見つけました。彼らの Nelder-Mead シンプレックス ソルバーは、簡単に呼び出すことができました。

必要なのは、ObjectiveFunction を double 配列を取るメソッドとして実装することだけでした。

実際のデータに対して試したことはありませんが、Excel でシミュレーションを作成してテスト データを設定し、スコアを付けました。アルゴリズムから返された結果は完璧ではありませんでしたが、非常に優れたソリューションが得られました。