我试图为我的半导体物理课做一些简单的规划,结果显示出一些奇怪的间断。
以下是代码:
EAminusEV = 0.067;
NA = 10^16;
ND = 10^14;
k = 1.381*10^-23;
gA = 4;
m0 = 9.11*10^-31;
mp = 0.81*m0;
h = 6.626*10^-34;
keV = 8.617*10^-5;
Nv[x_] = 2 ((2 \[Pi] mp k)/(h^2 x))^1.5*10^-6;
p1[x_] = Nv[x]/gA Exp[EAminusEV/keV x];
pPlus[x_] = (-(ND + p1[x]) +
Sqrt[(ND + p1[x])^2 + 4 p1[x] (NA - ND)])/2;
pMinus[x_] = (-(ND + p1[x]) -
Sqrt[(ND + p1[x])^2 + 4 p1[x] (NA - ND)])/2;
LogLogPlot[pPlus[x], {x, 1/20, 1/300}, PlotRange -> All]其结果是:

发布于 2014-10-28 17:07:08
你被指数很大的浮点数咬了,小数点后面的数字很少,探索数等等。把你的结果和这个用精确的有理数学做的所有事情做比较,直到最后一步它使用64位的精度。
EAminusEV = 0067/1000;
NA = 10^16;
ND = 10^14;
k = 1381/1000*10^-23;
gA = 4;
m0 = 911/100*10^-31;
mp = 081/100*m0;
h = 6626/1000*10^-34;
keV = 8617/1000*10^-5;
Nv[x_] = 2 ((2 \[Pi] mp k)/(h^2 x))^(3/2)*10^-6;
p1[x_] = Nv[x]/gA Exp[EAminusEV/keV x];
pPlus[x_] = (-(ND + p1[x]) + Sqrt[(ND + p1[x])^2 + 4 p1[x] (NA - ND)])/2;
pMinus[x_] = (-(ND + p1[x]) - Sqrt[(ND + p1[x])^2 + 4 p1[x] (NA - ND)])/2;
ListLogLogPlot[Table[{N[x,64], N[pPlus[x],64]}, {x,1/300,1/20,1/10^4}],
Joined->True, PlotRange->All]

你应该注意到垂直轴上的微小范围和那个轴上的震级。这几乎肯定意味着您应该仔细检查以验证所有输入参数是否正确到至少六位数的精度,考虑到输入它们的形式,这似乎不太可能。如果你没有,那么借用一些好的,昂贵的,最近校准的仪器,用六到七位已知的精确数字来做你所有的测量。如果不是每个参数都有这种精度,那么这很可能只是使用高性能的精确数学将不确定性转化为图形上毫无意义的废话。作为一个提示,这就是您的pPlus x的样子。
1/2 (-100000000000000 + \[Sqrt]((100000000000000 + (2292870847500000000000
Sqrt[6290455] E^(6700000 x/8617) \[Pi]^(3/2) (1/x)^(3/2))/36363385297)^2 +
(90797685561000000000000000000000000000 Sqrt[6290455] E^(6700000 x/8617)
\[Pi]^(3/2) (1/x)^(3/2))/36363385297) - (2292870847500000000000 Sqrt[6290455]
E^(6700000 x/8617) \[Pi]^(3/2) (1/x)^(3/2))/36363385297)发布于 2014-10-28 18:26:27
另一种解决这个问题的方法:
pPlus[x_] = (-(ND + p1[x]) +
Sqrt[(ND + p1[x])^2 + 4 p1[x] (NA - ND)])/2;扩展Sqrt[]中的数量
pPlus[x_] = (-(ND + p1[x]) +
Sqrt[ND^2 + 4 NA p1[x] - 2 ND p1[x] + p1[x]^2])/2;p1^2比其他术语要大得多,把它拿出来:
pPlus[x_] = (-(ND + p1[x]) +
Sqrt[p1[x]^2] Sqrt[(ND^2 + 4 NA p1[x] - 2 ND p1[x])/p1[x]^2 + 1])/2;系列扩展Sqrt保持前三项:
pPlus[x_] = (- NA^2 + NA ND)/p1[x] + NA - ND;现在,您可以得到与“Bill”相同的结果(而无需使用高精度的计算)。
LogLogPlot[pPlus[x], {x, 1/20, 1/300}, PlotRange -> All]https://stackoverflow.com/questions/26600270
复制相似问题