問題タブ [ode]

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 に答える
659 参照

wolfram-mathematica - 特定の微分方程式とDSolveに関するMathematicaの問題

始めるのに問題があります。私は金融工学プログラムに参加しており、2003年に書かれた本を使用して、偏微分方程式やブラックショールズモデルなどをモデル化しようとしています。

しかし、導入の章には非常に基本的なODE金利の問題があり、私の出力は本とは大きく異なります。

この本には、{{y(t)-> P * exp ^(rt)}}の非常に優れたソリューションが含まれています。

私が得るものは次のようなものです(注、出力を投稿することはできません)

ビッグKは何ですか?これは、シンボリックソリューションを生成できないルール出力にすぎませんか?セットアップまたはファイルシステムに問題がありますか?また、提供されたコードが古くなっている可能性のあるMathematicaに関する古い本を使用するための提案はありますか?私は前進する方法を見つけて、これを私の研究に適用する必要があります。

最後に、他のODEを使用すると、ソースとは異なる結果が得られることがあります。IE Mathematica ODEチュートリアルに従いましたが、出力も異なりました。いくつかの場所で、私のバージョンのMathematicaは計算しないか、ソリューション内の特定の変数または定数を削除するか、出力がありません。DSolveの一般的なトラブルシューティングを参照しましたが、永続的で認識されているバグは見つかりませんでした。私のファイルシステムに何か問題があるのか​​、それとも何か他の問題があるのだろうか?助けてください!

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

c++ - 複雑な全体を持つ ODE

エントリが複雑な ODE 系を解こうとしています。GSL のドキュメントから、実際のエントリのみを受け入れることがわかります。複雑なものを渡す方法はありますか (実部と虚部を区別するよりも簡単なもの)? 不可能な場合は、この目的に適した他のライブラリを教えてください。

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

c++ - 住所と疑問符付きのValgrind出力?

valgrindから出力を受け取ったところですが、よくわかりません。

特に、これらの疑問符に混乱しています。通常、この場所で得られるのは、valgrindが検出したエラーの場所です。私は以前にvalgrindを使用しましたが、すべての出力はマニュアルに記載されているとおりでした。私はこのvalgrindコマンドを使用しました:

プログラム自体がセグメンテーション違反を叫びます。今回、valgrindはメモリリークの場所を教えてくれませんが、デバッグから、セグメンテーション違反が発生する場所を特定しました。残念ながら、これはIntel ODEソルバーライブラリ(dodesol)のODEソルバー関数内にあり、アクセスできません。この関数に渡すすべてのパラメーターを何度も注意深くチェックしましたが、問題はないようです(少なくとも、以前のマニュアルや例のパラメーターに対応しています)。

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

microcontroller - マイクロコントローラーでODEを解く

マイクロコントローラーで2つの常微分方程式を解きたい。100msごとに評価する必要があります

基本的に私はオイラー統合を使用することを考えました(Runge-Kute I)

エラーは0.001未満になると思います。そのエラー率に達するまで実行する必要がある反復回数を決定するにはどうすればよいですか?

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

c++ - std::bad_alloc と GSL ODE ソルバー

GSL ソルバーを使用して ODE の (大規模な) システムを解こうとしています。ドライバーメソッドを使用すると、エラーメッセージが表示さcould not allocate space for gsl_interp_accelれます。コントロール、エラー、ステッパーを手動で定義すると、bad_alloc例外が発生します。これは、私が理解している限りcould not allocate space for gsl_interp_accel、他のケースで発生するのと同じことが原因で発生します-欠落メモリの。

this onebad_allocなどの他のクエリに相談しましたが、私の特定のケースに役立つものは何も見つかりませんでした。また、他の ODE ソルバーも試しましたが、メモリ エラーが発生します。また、プログラムを valgrind でチェックして、ソルバー以外の場所にメモリ エラーやリークがないことを確認しました。

どのソルバーにも「統合の制限」があり、私の場合、プログラムは上限の約 10% で正常に動作します (これは下限に比べて大きいです。これがエラーの原因であると確信していますが、必要です)。これらの特定の制限の間を統合するため)、上で引用した例外の 1 つで終了します。さまざまな (固定/適応) ステップ サイズを試しましたが、希望の 10% を超えることはありませんでした。

例外を与えるコードは次のとおりです。

したがって、コードを変更final_timeするとfinal_time/10実行されますが、結果は意味がありません。ソルバー後に何もしなくても例外はスローされcould not allocate space for gsl_interp_accelますが。

間にメモリを消去してループをいくつかの(多くの)ループに分割しようとしましたが、これはあまり役に立ちませんでした。

これが重要な場合は、GNU コンパイラーと Intel C++ Composer でコンパイルされた Ubuntu 12.10 を使用します。また、Mac (OS のバージョンがわからない) でもテストされ、同じ結果が得られました。

問題は、ソルバーを「チート」してプログラムを適切に動作させる方法はないかということです。

PS: 中間結果を取得するよりスマートな方法を持つ ODEint ソルバーも例外をスローします。

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

python - Python - Scipy : ode モジュール : ソルバーのステップ オプションを有効にする際の問題

ソルバーを呼び出すときに、ソルバー自体が実行するさまざまな統合ステップを保存したかったのです。

そのため、while ループを実行し、値を に設定する step オプションを有効にしましたTrue

y次に、積分の結果であるをプロットすると、ここに問題が発生します。特定の領域に不安定性が表示されます :

y ソルバーのステップ オプションを有効にする

ループなどのせいだと思ったので、結果を確認して次を削除しましたstep

そして驚き...私は正しい結果を持っています:

y ソルバーのステップ オプションを無効にする

これは非常に奇妙な状況です...誰かがこの問題で私を助けてくれればありがたいです.

編集 :

私が行うソルバーを設定するには:

そして、私は結果を保存します.append()

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

arrays - Matlab:dsolve関数で配列を使用する方法は?

2 つの方程式の ODE 系がありますが、1 つの方程式だけを使用して他の方程式の結果を最小化したいと考えています。

1)

x = 2*exp(t) - 2*t*exp(t);
y = -2*t*exp(t)

xx = 2.0000; 0; -14.7781

yy = 0; -5.4366; -29.5562

結果が得られた後、1 つの方程式だけで解いて、Dy 方程式で xx 配列を使用しようとしました。

2)

y = xx/2 - (xx*exp(2*t))/2

yy = 0; 0; 396.0397

値は、最初の例と同じではありません。配列を使用して同じ結果を得るには?

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

simulink - simulink で ODES を変更するとはどういう意味ですか

simulink に 2 つのコントローラーを実装しました。PID とファジー コントローラー。両方のコントローラーを実装するためのコードは異なります。PID は ode45 で実装され、ファジー コントローラーは ode14x で実装されます。これは、望ましい応答、つまり基準値への収束を達成するために行われます。しかし、それでも私はodeの変更が何を意味するのか理解できません....odeを解決するさまざまな方法があることは知っていますが、simulinkでodeを変更するときに正確に何をしているのか....ガイドしてください。

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

matlab - MATLAB ode45 出力に対する条件の設定 (実行中)

多くの異なるパラメーター (これらのパラメーターは微分方程式の係数) に対して ode45 を使用して ODE 系を解いており、解が特定の値よりも小さい (大きくない) パラメーターを見つけたいと考えています。

ode45 に条件を設定して、システムの解決中に (これらのパラメーターの一部の) 解がその (指定された) 値よりも大きくなった場合に自動的に「検出」し、それ以降のステップの解決を停止するにはどうすればよいですか?

Jan は、入力関数の定義に次の条件を入れることを提案したので、int. 私はこれを試しましたが、うまくいきません: いくつかのステップの後 (条件はまだ正しくありませんが)、反復はすぐに終了し、出力はある数値で一定に保たれます。(誤った出力)

( qm 、 U 、 V などは定数で、 X には 4 つの列があります)

  • 上記のコードの問題は何ですか?
  • ode45 に監視機能を追加することを誰かが提案しました。(ここ) . 誰もこれを行う方法を知っていますか? ありがとう