問題タブ [odeint]
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.
c++ - odeint の繰り返しデルタ関数
次の odeint プログラムがあります。
毎回t
10 の倍数なので、 に設定したいと思いx[0]=0.1
ます。
つまり、定期的なデルタ関数が必要です。
あるいは、デルタ関数を有限数の時点で発生させることができれば、再発を近似することができます。
残念ながら、odeint でデルタ関数のドキュメントを見つけることができませんでした。これを達成する方法を知っている人はいますか?
c++ - boost::odeint 統合のステップ数を制限する
次のboost::odeint
コードがあるとします。
統合が特定のステップ数の後に壊れるようにコードを変更するにはどうすればよいですか? 多数の統合を実行していますが、特定のシステムの統合に時間をかけすぎないようにしたいと考えています。
を使用することを考えましintegrate_n_steps()
たが、これは、関心のある終了時間を過ぎて統合が進行することを意味する可能性があります。
boost - odeint に現在の状態を設定する
current_state
boost::odeint でステッパーのを設定したいと思います。
私は次のMWEを持っています:
行stepper.set_current_state(x);
は機能しないものです。これを達成するために使用できるコマンドはありますか?
おそらく次のものを使用できることに気づきました:
しかし、これが本当に最善の戦略なのか、それともステッパーの内部状態 (現在のステップサイズや誤差の見積もりなど) を失っているのかは不明です。
c++ - odeint 変数のバインド
私は odeint を使用して、ゼロ未満になるべきではないいくつかの変数があるシステムをシミュレートしています。
odeint の変数を特定の範囲にバインドする適切な方法はありますか?
python - ODEINTでfull_outputを有効にできない
full_outputを有効にするのは簡単な作業ですが、いつものように問題はやや複雑です。残念ながら、私のコードを表示する以外に、私の問題を簡単に説明する方法はありません。
odeint(derivs、y_initial、t、full_output = 0)を書き込むと問題は発生しませんが、odeint(derivs、y_initial、t、full_output = 1)を書き込むと次のようになります。
このエラーは、(配列などを使用して)odeintを定義した方法が原因で発生していると思います。odeint値を計算して配列に格納するループを作成し、次の行に進むとしたら、この問題は解決しますか?もしそうなら、そのようなコードはどのように見えるでしょうか?
あなたがなぜ私がそれをそのような奇妙な方法で書いたのか理解できないのなら、ここに理由があります:
この方法で、数学を繰り返し書き出すことなく変数を切り替えることができることは明らかだと思います。しかし、今ではodeintでfull_outputを有効にできません。
お時間をいただきありがとうございます、そして私はあなたの応答に感謝します!
リュウ
c++ - 状態タイプ boost:fusion in boost:odeint
boost::odeint
私は変数の異なるコレクションの微分方程式を解くために使用したいと思います- タイプの -std::vector
並列で。もちろん、解決策の 1 つは、すべての変数を大きなベクトルに結合し、それを状態変数として使用することです。
boost::fusion
ただし、さまざまなベクトルを保持する状態タイプとして採用するなど、より洗練されたソリューションをお勧めします。関連する問題の投稿と実装から私が理解している限り、原則として、そうすることに障害はありません。具体的な実装に関するいくつかのヒントを見逃しているだけです-特に、の正しい仕様に関して
代数、演算、サイズ変更
エラーステッパーなどの作成に必要です。たとえば、既存の実装のうちどれをodeint::fusion_algebra
直接使用できますか?この場合、何をする必要がありますか?
c++ - 推力で使用されるodeintとの統合を停止します
ODEのシステムをodeintライブラリと統合し、一連のポイントで並列に推力をかけようとしています(これは、多くの異なる初期条件を持つ同じODEを意味します)。特に、私は適応ステップサイズアルゴリズムrunge_kutta_dopri5を使用しています。アルゴリズムが失敗し、ステップサイズが小さくなり、統合プロセス全体が非常に遅くなるポイントがいくつかあります。
特定のテストに失敗した場合に、セットの一部のポイントでのみ統合プロセスを停止する方法はありますか?
私の特定のケースでは、重力の問題を積分しているので、ポイントがアトラクタに近づいたときに積分を停止したいので、距離は一定の制限未満です。
シリアルコンピューティングでは、この質問stepper.try_step
の背後にある考え方に多かれ少なかれ示されているように、これは関数を使用したカスタムwhileループによって実行できると思います。
推力を使用した並列コンピューティングでこれをどのように実行できますか?
ありがとう。
python - オブジェクトが目的の配列に対して深すぎる - scipy.integrate.odeint
昨日 Python を使い始めたばかりですが、scipy.integrate.odeint
.
関数を定義しました
numpy.array
オブジェクトx
、t
、およびM
;を取ります。およびスカラー浮動小数点数beta
、gamma
、およびmu
。
M
サイズです(60,60)
が、問題ないと思います。
x
とt
はどちらもシングルトンではなく、 x.shape
being(180,)
とt.shape
being(5000,)
です。私はそれらがそれぞれ形状を持つように単一の次元を与えようとしました(180,1)
が(5000,1)
、それでも同じエラーが発生します:
SIR
return だけの場合でもこのエラーが発生し、すべての引数をそれとx
は別に削除すると、次のようになります。x
t
ご覧のとおり、エラーの原因となっている行は
編集 :
メソッドの完全なコードを追加するように求められましたSIR
。比較的長いので、完全な .py スクリプトをペーストビンにドロップしました:
http://pastebin.com/RphJbCHN
再度、感謝します。
c++ - Thrust::transform を使用して for ループを置き換える
GPU のスレッドに for ループを実装してコードを最適化しようとしています。私は、thrust::transform を使用して 2 つの for ループを排除しようとしています。C++ のコードは次のようになります。
上記のループで常微分方程式 (ODE) の係数を推定しており、推力を使用してすべてのデータをデバイスに転送しました。遺伝子の数をN_geneで表す場合を考える。最初の for ループは N_gene 回実行する必要があります。2 番目の for ループは、各遺伝子のアクティベーター (遺伝子プール内の他の友好的な遺伝子) の数によって制限されます。各遺伝子には、n_ka ベクトルの要素で表される多数のアクティベーター (存在すると遺伝子 i の濃度が増加する友好的な遺伝子) があります。n_ka[i] の値は、0 から N_gene - 1 まで変化します。ka_val は、各アクティベーター ka のアクティベーションの尺度を表します。ka_vec_d には、遺伝子 i を活性化する遺伝子インデックスがあります。
イテレータを使用してこれらのループを表現しようとしていますが、できません。私は、単一の for ループに Thrust::for_each(thrust::make_zip_iterator(thrust::make_tuple)) を使用することに慣れていますが、counting_iterator または変換イテレーターを使用して 2 つの for ループを実装する方法を考え出すのに苦労しています。これら 2 つの for ループを変換するためのポインタまたはヘルプをいただければ幸いです。御時間ありがとうございます!