問題タブ [desolve]

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

r - deSolve: 連続する 2 つのダイナミクスを持つ微分方程式

を使用して、流水と温度勾配のあるリング チューブをシミュレートしていdeSolve::ode()ます。リングは、各要素が温度値と位置を持つベクトルとしてモデル化されます。

私は熱拡散式をモデル化しています:

1)熱拡散

しかし、リングに沿って水を動かすのにも苦労しています。理論的には、チューブ ベクトルの要素iの温度を要素s の場所の温度に置き換えるだけです。sは整数ではない可能性があるため、整数部分 ( n ) と小数部分 ( p )に分けることができます: s=n+p . したがって、水の移動による温度変化は次のようになります。

2)水の流れ

問題は、ode ソルバーの各反復で評価されるdtによって、sが水の速度vに等しいことです。

私の考えは、現象を加法的に扱うことです。つまり、最初に (1) を計算し、次に (2) を計算し、最後にそれらを足し合わせます。時間の影響が怖いです。陰解法を使用する ode ソルバーは、時間ステップを自動的に決定し、ユニタリ変化デルタを線形に縮小します。

私の質問は、微分関数で (1) + (2) を返すだけが正しいのか、それとも 2 つのプロセスを分割して微分を別々に計算する必要があるのか​​ということです。2 番目のケースでは、どのようなアプローチが推奨されますか?

編集: @tpetzoldt の提案に従って、 を使用して水の流れを実装しようとしましたReacTran::advection.1D()。私のモデルには、温度の変動の複数の原因があります。自発対称熱拡散です。水の流れ; (熱源の前に配置された)センサー付近の温度が下限しきい値を下回った場合にオンになり、上限しきい値を超えた場合にオフになる熱源。周期的な外部温度によって決定される一定の熱分散。

「Moving water」セクションの下には、以前のバージョンのコードがまだあり、現在は に置き換えられていReacTran::advection.1D()ます。このplot_type引数により、水管 (「パイプ」) 内の温度の時系列、またはセンサーでの温度系列 (ヒーターの前後) のいずれかを視覚化できます。

興味深いことに、より多くのセグメント ( L = 500) と高速 ( vel = 2) を設定すると、加熱後のセンサーでスパイク シーケンスを観察できます。また、処理時間も大幅に増加しますが、これはパイプ解像度の増加によるものではなく、速度の増加によるものです。

ここに画像の説明を入力

私の最大の疑問はReacTran::advection.1D()、私が水温をモデリングしているので、私のコンテキストで意味があるかどうかですが、この関数は流れる水の溶質の濃度に関連しているようです.