2014-10-28 229 views
0

我想爲我的半導體物理課做一些簡單的繪圖,結果顯示出一些奇怪的不連續性。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

回答

4

您正在浮點數與大指數,幾個數字的小數點之後,指數[大咬數字]等等。將你的結果與這個修改進行比較,該修改用精確的合理數學完成一切,直到它使用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

另一種方式來獲得這個:

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