添加函数时,当步长相对较大时,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]
首先,这个问题在视觉上更容易理解,我会 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]