問題タブ [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 投票する
2 に答える
2431 参照

python - タイム ステップごとに ODE ソルバーの初期条件を更新する

最初の 30,000 秒間、状態変数の 1 つを同じ初期値から開始する ODE のシステムを解きたいと考えています。その 30,000 秒後、その状態変数の初期値を別の値に変更し、残りの時間についてシステムをシミュレートしたいと考えています。これが私のコードです:

つまり、odeint最初の 30,000 秒間、 が呼び出されるたびに y0[1] を同じ値 (100) に設定したいと考えています。システムに信号を入力する前に、システムを一定時間平衡化させようとしています。if t < 30000: y0[1] = 100関数の最初の行のようなことを考えましたode_rhs()が、うまくいくかどうかはわかりません。

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

matlab - matlab の ODE ソルバーの速度を改善することは可能ですか? (ode45 ode15s など)

matlab で ode45 と ode15s を使用してシステムを解くコードを書きました。スクリプトで複数のコア (または並列コード) を使用してコードの速度を改善できるかどうか疑問に思っています。

誰もがこれを試しましたか??

ありがとう

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

matlab - Matlab の ode45 に微分値を保存する

質量ばねと二重振り子を備えた (やや奇妙な) システムの運動方程式をシミュレートしています。このシステムには、質量行列と関数 f(x) があり、ode45 を呼び出して解決します。

5 つの状態変数 q= [ QDot, phi, phiDot, r, rDot]'; があります。(QDot は現在の QDot に依存するものがないため削除されました。) ここで、いくつかの力を計算するために、ode45 が各積分ステップで計算する rDotDot の計算値も保存したいと思いますが、ode45 はこれを返しません。私は少し調べましたが、私が見つけた唯一の2つの解決策は、a)これを3次問題に変え、状態ベクトルにphiDotDotとrDotDotを追加することです。これは可能な限り回避したいと思います。これはすでに非線形であり、これにより事態がさら​​に悪化し、計算時間が大幅に増加するからです。

b)ここで説明されているように、状態を拡張して関数を直接計算します。ただし、例では、質量行列にゼロの行を追加すると彼は言います。そうしないと導関数を積分し、ある点で評価するだけでなく、質量行列を特異にするので、これは理にかなっています。私にはうまくいかないようです...

これは基本的なことのように思えます (状態ベクトルの微分値を取得するため)。私が考えていない明らかなことはありますか? (または、それほど明白ではないものでも構いません....)

ああ、そしてグローバル変数はそれほど素晴らしいものではありません。なぜなら、ode45 は f() 関数をステップの調整中に何度も呼び出すため、グローバル変数のサイズと返される状態ベクトル q がまったく一致しないからです。

誰かがそれを必要とする場合に備えて、コードは次のとおりです。

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

matlab - MATLAB で ODE を計算する

微分方程式:

α'(t)=s(β-βα+α-qα^2)

β'(t)=(s^-1)(-β-αβ+γ)

γ'(t)=w(α-γ)

初期値

α (0) = 30.00

β (0) = 1.000

γ (0) = 30.00

計算

値s = 1、q = 1、w = 0.1610を使用しながら、t_0 = 0からt = 10までの問題を解決したい

ODE の関数の書き方がわかりません。助けていただければ幸いです。

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

matlab - Matlab - Odeset - Odeplot

odeplot を使用したいので、後で結果をプロットするのではなく、段階的に結果を取得します。こんな感じで書いてみたのですが上手くいかないので、どなたか教えていただければ幸いです。

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

matlab - Matlab: ODE システムの係数を見つける

すべてのデータと、9 つの未知の係数 (a1、a2、...、a9) を持つ 3 つの方程式の ODE システムがあります。

Matlabを使用してODEのこれらの係数(a1、...、a9)を見つける方法は?

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

matlab - Matlab: 可変ステップ ODE ソルバーの if ステートメントと abs() 関数

オンラインでこの投稿を読んでいたところ、「if ステートメント」と「abs()」関数を使用すると、MATLAB の可変ステップ ODE ソルバー (ODE45 など) に悪影響を与える可能性があると述べられていました。OP によると、時間ステップに大きな影響を与え (必要な時間ステップが低すぎる)、微分方程式が最終的に積分されたときに悪い結果が生じる可能性があります。これが本当かどうか、もしそうなら、なぜだろうと思っていました。また、修正ステップ ソルバーに頼らずに、この問題を軽減するにはどうすればよいでしょうか。私が何を意味するかについて、以下のコード例を示しました。

関数「dragcof」は次のように指定されます。

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

matlab - MATLAB: 'assignin' を使用して ode45 内にパラメーターを保存する

MATLAB で ode45 を使用して一連の ODE を実行していますが、後で使用するために変数の 1 つ (導関数ではない) を保存する必要があります。関数 'assignin' を使用して、ベース ワークスペースに一時変数を割り当て、各ステップで更新しています。これは機能しているように見えますが、配列のサイズが ode45 から取得した解ベクトルのサイズと一致しません。たとえば、次のネストされた関数があります。

上記のコードでは、theta (ラジアン)、K (負の値)、P、および G は定数であり、この例では、任意の値を使用できます。Zspan は ODE ソルバーの積分時間ステップであり、Y0 は初期条件ベクトル (4x1) です。繰り返しますが、この例のために、これらは任意の妥当な値を取ることができます。メインファイルでは、関数は次のように呼び出されます。

この方法は MATLAB から問題なく動作しますが、問題は Ve_out のサイズが Z または Y のサイズと同じではないことです。この理由は、MATLAB がそのアルゴリズムに対して ODE 関数を複数回呼び出すためです。したがって、解決策は次のとおりです。 Ve_out よりわずかに小さくなります。am304 が示唆したように、ODE 関数に DY = モメンタム(Z,Y) などの Z および Y ベクトルを与えることで DY を単純に計算できますが、これを「assignin」(または同様の方法) で機能させる必要があります。この問題のバージョンでは、DY と Ve の間に暗黙の依存関係があり、反復ごとに DY を計算するには計算コストがかかりすぎます (この問題を何度も反復して実行します)。