2017-03-21 9 views
1

まず、この問題は視覚的に分かりやすく、画像を投稿するが、ここでは新しい。私はNDSolveを使って2つの結合微分方程式(温度と密度)を解いています。温度方程式にはガウス関数の形でヒーティング関数が追加されており、ガウス分布を薄くしたい(分散を小さくする)がほぼデルタ関数になるまでしたいが、ある点まで分散を下げるとNDSolveは加熱を無視し始める関数、おそらくステップサイズが大きすぎると関係するものはありますか?いくつかの専門用語で関数を追加するとき、Mathematicaはステップサイズが比較的大きいときにMathematicaを無視する

スタート:ガウスとして

a = 1.99*10^-9; 
b = 0.24*10^-3; 
d = 1.21*10^-3; 
T0 = 1*10^6; 
n0 = 0.9*10^9; 
ti = -400; 
tf = 500; 
kB = 1.38*10^-16; 

と加熱機能を定義する「Qgt」(標準偏差「SIG」と振幅「銀」を加えたいくつかの背景をここで私が使用しているコードです"Qbは":次に

Qb = 0.33*10^-3; 
sig = 3; 
var = sig^2; 
Ag = 16.5; 
Qg = Ag*Exp[-(t - 10)^2/(2*var)]; 
Qgt = Qg + Qb; 

ソルバーを実行します。

sss = NDSolve[{T'[t] == -(n[t]^-1) T[t]^(7/2) (a) - 
    n[t] T[t]^(-1/2) (b) + Qgt/(3*kB*n[t]), 
    n'[t] == T[t]^(5/2) (a) - (n[t]^2) (T[t]^(-3/2)) (d), T[ti] == T0, 
    n[ti] == n0}, {T, n}, {t, ti, tf}]; 

をし、最終的にT [t]は、プロット:

TP = Plot[T[t] /. sss, {t, ti, 400}, PlotRange -> All] 

あなたはこのすべてを実行する場合は、T [t]は、最初は一定のまま作業プロットを取得した後、加熱スパイクが大幅に温度が上昇し、システムが戻っ定数に冷却します。しかし、「sig」を2に減らすと、暖房機能全体が無視され、温度が上がることはありません!私の問題を見るためにこれをすばやく実行してください。私は何が起こっているのか理解していません。最終的には、 "sig"を1または0.5のように低くします。ありがとうございました!

+1

スペシャリスト[MathematicaのStackexchange](https://mathematica.stackexchange.com)は実際にあります。あなたはそこに尋ねることを試みるかもしれません。 –

+1

別の修正は 'MaxStepSize - > 10'を設定することです – agentp

答えて

2

ソルバーの作業精度を上げることは、このトリックを行うようです。

a = 1.99*10^-9; 
b = 0.24*10^-3; 
d = 1.21*10^-3; 
T0 = 1*10^6; 
n0 = 0.9*10^9; 
ti = -400; 
tf = 500; 
kB = 1.38*10^-16; 

Qb = 0.33*10^-3; 
sig = 0.5; 
var = sig^2; 
Ag = 16.5; 
Qg = Ag*Exp[-(t - 10)^2/(2*var)]; 
Qgt = Qg + Qb; 

sss = [email protected] 
    NDSolve[{T'[t] == -(n[t]^-1) T[t]^(7/2) (a) - n[t] T[t]^(-1/2) (b) + Qgt/(3*kB*n[t]), 
    n'[t] == T[t]^(5/2) (a) - (n[t]^2) (T[t]^(-3/2)) (d), T[ti] == T0, 
    n[ti] == n0}, {T, n}, {t, ti, tf}, WorkingPrecision -> 24]; 

Plot[T[t] /. sss, {t, ti, 400}, PlotRange -> All] 

enter image description here

関連する問題