問題タブ [differential-equations]
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.
math - 区分的関数を使用せずに、> 0の場合に増加し、<0の場合に一定になる数学関数はありますか?
0で一定の数学関数がありますが、0に達すると、増加し始めます。e、放物線など、どのような増加関数であるかは気にしません。区分的関数を避けようとしています。
differential-equations - modelicaで時間変数にアクセスするにはどうすればよいですか?
Modelicaで明示的に時間依存の微分方程式をモデル化したいと思います。
モデル化したいと言ってください
Modelicaで。時間変数tにアクセスする正しい方法は何ですか?
wolfram-mathematica - NDSolve内の関数の特定のポイントを参照するにはどうすればよいですか?
問題:
私はこの微分方程式を解こうとしています:
エラー(Function::slotn
およびNDSolve::ndnum
)が発生
します(に等しい数値関数を返す必要があります3/16 x^2 + 5/8 x
)
この微分方程式を解く方法を探しています。NDSolveが理解できるように、より良い形式で書く方法はありますか?役立つ別の関数またはパッケージはありますか?
注1:私の完全な問題でK[x, x1]
は、は1ではありません-それは(複雑な方法で)とに依存しx
ますx1
。
注2:積分限界が明確であるため、に関する方程式の2つの側面を単純に導出することx
はできません。
私の第一印象:
Mathematicaは私がポイントを参照するのを好まないようです-A[x]
この簡略化されたバージョンを実行しているときに同じエラーが発生します:
(と等しい数値関数を返す必要があります2/11 x^2 + 7/11 x
)
この場合、解析的に解いA''[x] == c
てからを見つけることでこの問題を回避できますc
が、私の最初の問題ではうまくいかないようです-微分方程式を積分方程式に変換するだけで、(N)DSolveは後で解きません。
matlab - 非負の解を与えるように制約された遅延微分方程式 (DDE) 系を解く
MATLAB には、解が非負になるように制約するode45
というパラメーターがあります。彼らは、このメソッドがどのように機能するか、そして y_i が負になるたびに y_i を 0 に設定することは一般的に機能しないため、愚かなことではないことについての論文を書きました。NonNegative
現在、MATLAB にはdde23
遅延微分方程式を解くための機能もありNonNegative
ますが、この積分器に相当するパラメーターはありません。
ode45
残念ながら、私は既存のODE システムに遅延を追加する任務を負っていNonNegative
ます。
どのように進めればよいですか?
編集:
これが役立つかどうかはわかりませんが...
私のシステムの DDE 部分は基本的に次のようになります。
ここでX
(3 番目の式の大文字の変数) は の遅延バージョンですx
。x
次に、との方程式にいくつかの項を追加して、この DDE システムを既存の (およびより大きな) ODE システムにリンクしz
、結合したシステムをすべて統合します。
wolfram-mathematica - MaxStepSize、MaxSteps は MATHEMATICA の NDSolve に影響を与えないようです
私はMathematicaの初心者ですので、ご容赦ください!
NDSolve を使用して mma の非線形偏微分方程式を解こうとしています。シミュレーションの時間がなくなるずっと前に特異点が発生するため、解法プロセスは短くなります。このような特異点を持つ硬いシステムは、ステップ サイズを小さくすることで (少なくとも力ずくで) 対処できることを認識しています。
ただし、「MaxSteps」または「MaxStepSize」は、コードに具体的な影響を与えていないようです。
何を与える?私が見逃している可能性のある他の方法はありますか?
**
コード:
**
エラーメッセージ:
NDSolve::ndsz: t == 2.366570254802048` で、ステップ サイズは事実上ゼロです。特異点または硬いシステムが疑われます。>>
NDSolve::eerr: 警告: 独立変数 x の方向の 571455.5042645375 のスケーリングされたローカル空間誤差推定値はat t = 2.366570254802048
、規定の許容誤差よりもはるかに大きいです。19 ポイントのグリッド間隔は、必要な精度または精度を達成するには大きすぎる場合があります。特異点が形成されているか、MaxStepSize または MinPoints メソッド オプションを使用してより小さなグリッド間隔を指定する必要がある場合があります。>>
matlab - MATLABのodeソルバーイベント位置インデックス
ode
MATLABのソルバーを使用して微分方程式のシステムを解こうとしているとします。
また、すべてターミナルである3つの異なるイベントを見つけるためのイベント関数を定義したとします。
ie
場合によっては、イベントの1つの場所で返される量(ie
ソルバーを停止したイベントのインデックスであり、私の場合は1、2、または3である可能性があります)が必ずしも単一の数値ではないことに気付きました。しかし、2つの要素を持つベクトル(通常、これらの要素は同一です)
ie
スカラーではない場合、それはソルバーを停止しましたかie(1)
?ie(2)
c++ - 常微分方程式 (ODE) ソルバー用の C++ ライブラリはありますか?
より具体的には、ルンゲクッタとスティッフ方程式に基づく 8 次 Dormand-Prince 埋め込み法に興味があります。
Numerical Recipes 3 を使用していますが、ライブラリのコンパイルに問題が発生することがよくあります。代替案を知りたいです。
wolfram-mathematica - Mathematica で微分方程式の解のゼロを見つける
次のコードがあるとします。
これは、微分方程式の解をプロットします。t の範囲が 0 から 3 の間の x[t] のゼロを数値的に解くにはどうすればよいでしょうか?
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 番目の方法を使用する場合の実際的理論上の違いは何ですか?
c++ - 三重対角行列で一次方程式系を解くためのライブラリ?
私は熱伝導を伴う物理システムをモデル化しています。数値計算を行うには、三重対角行列を使用して線形方程式系を解く必要があります。このアルゴリズムを使用して結果を取得しています: http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithmしかし、私の方法は簡単で最適ではないのではないかと心配しています。そのシステムを最速で解決するには、どの C++ ライブラリを使用する必要がありますか? また、マトリックスは頻繁に変更されないことにも言及する必要があります (方程式の右側の部分のみが変更されます)。ありがとう!