問題タブ [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.
matlab - MATLAB でのイベントの場所に関する質問
matlab で次のように仮定します。
[t, x, te, xe, ie] = ode15s(@myfunc, [tStart tFinal], x0, odeset('Events', @events));
質問1
1a) 関数は、ソルバーのステップが成功した後にのみevents
呼び出されます。これは本当ですか?
1b) ソルバーがステップを成功させた直後に、最後の呼び出しが成功したステップにつながる呼び出しではmyfunc
ない可能性はありますか?
1c)events
関数に複数の終了イベントが含まれていて、ステップが成功したときにそのうちの 2 つ (1 つだけでなく) が発生したことが検出された場合、ソルバーの動作はどうなりますか?
質問2
myfunc
次のコードが含まれているとします
check
の関数はどこにありますかx
。
この問題を解決する1 つの方法は、イベント関数を使用しないことです。私の経験では、オードソルバーはそのような問題を解決できます。
この問題を解決するもう 1 つの方法は、イベント関数を使用してcheck(x) - 2 == 0
、1 つのターミナル イベントdirection = 1
と の別のターミナル イベントを見つけることですdirection = -1
。myvar
いずれかのイベントでソルバーが停止した後、たとえば、2 つのイベントを区別するためにグローバル変数が適切に設定され、停止した場所からシミュレーションが続行されます。その場合、コードは次のようにmyfunc
なります
どちらの方法でも、単純なケースでは正しい結果が得られます。しかし、私は非常に複雑な問題 (上記以外の追加のイベントと、場合によっては解決できることが証明されている微分方程式の不連続な右側の部分) を解決しようとしています。 2つ目よりも結果。
頌歌が前に解を返さないかtFinal
、正しい解を返すと言う人もいるかもしれませんが、右側の部分が不連続であるため、解が存在する間はソルバーが解を返さない可能性があります。
したがって、ある意味では、問題は次のとおりです。最初の方法と 2 番目の方法を使用する場合の実際的理論上の違いは何ですか?
java - Java プログラミング、ODE ソルバー ライブラリを作成しようとしています (オブジェクト指向コーディングは初めてです!)
ODE ソルバーをプログラムしようとしています (MATLAB の ODE45 に似ています)。このソルバーを「スタンドアロン」にしたい、つまり、解いてほしい ODE の名前を渡すことができ、その特定の微分方程式のコードを実行します。
これまでのところ、メイン クラス (プログラムの大部分がある場所) と ODEsolver というクラス (ODE ソルバーがある場所) があります。メイン クラスから ODEsolver への呼び出しを行い、ODE で String 引数 (解決したい ODE の名前) によって参照されるメソッドを参照できるようにしたいと考えています。
私が想像する方法は次のとおりです。
ここで、ODE45 は ODEsolver クラスの ODE ソルバーです。
ただし、「name_of_ode_to_be_solved」を使用してそのメソッドへの呼び出しを作成する方法がわかりません (メソッドは ODEsolver になく、メインまたは他のクラスにあります)
ありがとう!
r - ODE の反復解法におけるループの回避
時間依存の共変量を使用して、いくつかの生存データにパラメトリック モデルを当てはめています。当てはめ手順には、いくつかの ODE を反復的に解くことが含まれます。つまり、被験者ごとに時間間隔ごとに 1 つの ODE がありますが、現在の間隔での ODE の初期条件は、前の間隔での ODE の解の最後の値になります。その意味で、ODE は相互に依存しています。
私の問題はこれに尽きます。現在、前の解の最後の値を次の解の開始点として使用する必要があるため、ループを介してこれらの ODE を繰り返し解いています。問題は、このループが大規模なデータセットの場合に多くの時間を消費することです。たとえば、vapply、または別のベクトル化された関数を使用して同じことを行う方法はありますか?
アーカイブを検索してきましたが、以前の値に依存する操作をベクトル化するという問題の解決策として何も出てきません。
これは、それ自体では統計的に意味のあるものを生成しないコード例ですが、私の問題を示しています。
python - Pythonで硬いオードを解く方法は?
私はPythonの初心者です。matlabにあるいくつかのプログラムを切り替えようとしています。入力がすべて行列である堅い常微分方程式を解く必要があります。matlabで私は使用します
matlab - 状態空間システムに適用される ODE を解く Matlab、時間依存の入力
私は境界で「強制」入力を使用して、状態システムを取得しました。私の SS 方程式は: zp = A*z * B. (A は正方行列、B 列)
Bがステップ(経験の時間に沿ったもの)であれば問題ありません、私は使えるので
そしてSSは:
私の問題は、スロップを適用したときです。そのため、B は時間に依存します。
問題を解決しようとする新しい方程式を書きましたが、「時間ステップ」を調整できず、22x100 (目的) で au を取得できません。
SolveSS には次のコードがあります。
あなたが助けてくれることを願っています!
python - Matlab -> scipy ode (複雑な) 関数の翻訳
私はpython、numpy、scipyを学んでいます。matlab のこの種の関数を Python に変換できるかどうか疑問に思っています。
この例では、n は数値で、たとえば 15 です。
t は時間配列です
AH = [15]xt 行列
t0 = 0
tf = 20 (例)
u_env = [20,20,20,20,20,20,20,20,20,20,20,20,20,20,20]
utop_init = 20
utop_final = 40; 下 = 20;
te_idx = 4;
c - 振り子運動のGSL解決ODE
振り子の初期角度(x)、重力加速度(g)、線の長さ(l)、および時間ステップ(h)を前提として、振り子の動きの微分方程式を解こうとしています。私はオイラー法を使用してこれを試しましたが、すべて問題ありません。しかし今、私はGSLに実装されたルンゲクッタ法を使用することになっています。gslマニュアルから学習して実装しようとしましたが、1つの問題で立ち往生しています。振り子は止まりたくありません。最初の角度を1radから始めたとしましょう。すでに何回スイングしても、常に1radでピーク傾斜があります。これが私がGSLにそれを与えるために使用する方程式と関数です:
それを変換する:
と分解:
これがコードスニペットです。それでも不十分な場合は、プログラム全体を投稿できます(長すぎません)が、どこかに問題がある可能性があります。
パラメータg
とl
は関数に正しく渡されます。すでに確認しました。
matlab - MatLab の ode23 - オプションの引数を入力として使用
私は自分でMatLabを学ぼうとしています。ODE を解くことに関するほとんどの概念は理解できましたが、オプションの引数を入力として使用する方法については少し確信が持てません。次の関数を作成しました。
さらに、次のように定義しました。
私が確信していないのは、関数mu
を使用するときに変数を変更する方法ode23
です。オプションの引数を入力することでこれが可能であることは理解していますが、機能させることができません。私が書いたら言ってください:
その後、すべてが正しく計算され、自動的にmu
= 1 が得られます。
しかし、これを変更したい場合は、どうすればよいですか? mu
set = 4に次のように書いてみました:
しかし、その後、次のようになります。
教科書に書かれている手順の理解に基づいてこれを行いましたが、明らかにここで何か間違ったことをしています。mu
parameterを変更する方法と、一般的にオプションの引数p1, p2, ...
がどのように使用されるかを誰かが説明できれば、ode23
本当に感謝しています!