首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示不连续的数学图

显示不连续的数学图
EN

Stack Overflow用户
提问于 2014-10-28 03:07:50
回答 2查看 204关注 0票数 0

我试图为我的半导体物理课做一些简单的规划,结果显示出一些奇怪的间断。

以下是代码:

代码语言:javascript
复制
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]

其结果是:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-28 17:07:08

你被指数很大的浮点数咬了,小数点后面的数字很少,探索数等等。把你的结果和这个用精确的有理数学做的所有事情做比较,直到最后一步它使用64位的精度。

代码语言:javascript
复制
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的样子。

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2014-10-28 18:26:27

另一种解决这个问题的方法:

代码语言:javascript
复制
 pPlus[x_] = (-(ND + p1[x]) + 
       Sqrt[(ND + p1[x])^2 + 4 p1[x] (NA - ND)])/2;

扩展Sqrt[]中的数量

代码语言:javascript
复制
 pPlus[x_] = (-(ND + p1[x]) +
       Sqrt[ND^2 + 4 NA p1[x] - 2 ND p1[x] + p1[x]^2])/2;

p1^2比其他术语要大得多,把它拿出来:

代码语言:javascript
复制
 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保持前三项:

代码语言:javascript
复制
 pPlus[x_] = (- NA^2 + NA ND)/p1[x] + NA - ND;

现在,您可以得到与“Bill”相同的结果(而无需使用高精度的计算)。

代码语言:javascript
复制
 LogLogPlot[pPlus[x], {x, 1/20, 1/300}, PlotRange -> All]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26600270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档