添加函数时,当步长相对较大时,Mathematica 会忽略一个函数

When adding functions, Mathematica ignores one when the step size is comparably large

首先,这个问题在视觉上更容易理解,我会 post 图片,但我是新来的。我正在使用 NDSolve 求解两个耦合微分方程(温度和密度)。温度方程以高斯形式添加了一个加热函数,我想使高斯变薄(降低方差)直到它接近 delta 函数,但是当我将方差降低到某个点时,NDSolve 开始忽略加热功能,大概与步长太大有关?这是我正在使用的代码:

从一些行话开始:

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" 和振幅 "Ag" 加上一些背景 "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。谢谢!

提高求解器的工作精度似乎可以解决问题。

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 = Quiet@
   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]