Mathematica图显示不连续性

时间:2014-10-28 03:07:50

标签: plot wolfram-mathematica

我正试图为我的半导体物理课做一些简单的情节,结果显示出一些奇怪的不连续性。

以下是代码:

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]

结果如下: enter image description here

2 个答案:

答案 0 :(得分:4)

你被大指数的浮点数,小数点后的几位数,Exp [大数字]等所困扰。将你的结果与这个修改进行比较,这个修改使用完全合理的数学运算,直到它使用的最后一步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]

enter image description here

您应该注意垂直轴上的微小范围和该轴上的幅度。这几乎肯定意味着你应该仔细检查以验证所有输入参数是否正确至少六位精度,考虑到你输入它们的形式,这似乎不太可能。如果你没有这个,那么借一些昂贵的近期校准仪器,用六到七个已知的精度数字来进行所有测量。如果你没有为每个参数提供那么精确,那么这很可能只是使用高功率的精确数学来将不确定性转化为图形无意义的无意义。就像一个提示,这就是你的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)

答案 1 :(得分:1)

另一种解决方法:

 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]

- >完全相同的图,范围为9.8985 - 9.9 10 ^ 15