Plot 显示不连续性的图

Plot 显示不连续性的图,plot,wolfram-mathematica,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 = 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]
结果如下:

你正被指数大、小数点后几位、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]

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

你正被大指数的浮点数、小数点后的几个数字、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]

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

另一种方法是:

 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相同的结果(无需进行高精度计算)


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

 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相同的结果(无需进行高精度计算)

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