問題タブ [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.
odeint - Python: 条件が満たされたときに odeint を中断する
私は scipy.integrate パッケージの odeint 関数を使用しています:
r0 は、特定の数のポイントの初期位置を含む numpy 配列です。スクリプトの最後に、予想どおり、20 タイムステップでポイントの位置を取得します。
ここで、r の条件が満たされたときに odeint ソルバーを停止したいと思います。特に、これらのポイントの 2 つが特定のしきい値よりも近い場合に odeint を停止し、r ベクトルにいくつかの変更を加え、新しい初期位置で odeint ソルバーを続行したいと考えています。これを実装する方法はありますか?
私が考えている可能な解決策は、odeint を最後まで実行し、後で条件が満たされているかどうかを確認することですが、これはもちろんあまり効率的ではありません。
助けてくれてありがとう、ニコラ
scipy - PythonでODEINTに問題がある
私はPythonに比較的慣れていないので、それを使用して二次非線形微分方程式、特に電解質のポアソン-ボルツマン方程式を解こうとしています。
本質的には、パラメーター k によって支配される減衰率で、電解質内の帯電した表面から離れる静電ポテンシャル (ファイ) の減衰を表します。
- phi(r) - r でのポテンシャル
- dphi(r) - r におけるポテンシャルの導関数
- r - 表面からの距離 (この場合、r = 1 から r = R まで解いています)
と境界条件
- ファイ(1) = 5
- dphi(R) = 0
コードの問題ビットは次のとおりです
一般に、k の値が小さい場合、積分は正常に機能し、scipy.optimize の root を使用して境界条件に従って解決できますが、k の値が比較的大きい (0.5 以上) を使用しようとすると、積分に問題が発生し、次のエラーを出力します
full_output = 1 で実行し、tcur
パラメーターを調べたところ、特定のポイントまでスムーズにカウントアップし、その後、非常に大きな値から非常に小さな値まで激しく振動しているようです。同じ時点nfe
で、関数評価の数はゼロに減少します。正しく動作している場合、tcur パラメーターは 1 から R までスムーズに実行されます。私の実装に問題がありますか、それとも方程式に不安定性がありますか?
助けてくれてありがとう、
デイブ
c++ - OpenMP を使用して odeint で制御されたステッパーを作成する
openmp_range_algebra を使用して、boost::odeint で制御されたステッパーを構築しようとしています
ただし、odeint にはそのようなコンストラクターが存在しないため、コードはコンパイルされません。
私の質問: OpenMP で使用できるように、制御された runge_kutte-dopri5 ステッパーを作成するにはどうすればよいですか?
状態ベクトルが長い (長さ: 2^20) ため、プログラムの中で最も時間がかかる部分であるため、アダプティブ ステッパーを並列化したいのです。
お手伝いいただきありがとうございます
python - Python組み込み関数odeintを使用して微分方程式を解く方法は?
与えられた初期条件でこの微分方程式を解きたい:
ansはあるべきです
y=2*exp(2*x)-x*exp(-x)
ここに私のコードがあります:
しかし、私が得るものは答えとは異なります。私は何を間違えましたか?