在MATLAB中以指数形式使用vpa来防止inf和NaN

时间:2018-09-27 16:36:18

标签: matlab largenumber

我试图在Matlab中绘制phi vs vg的Cox值。我正在使用非常大的值,并将它们包含在此处的代码中。运行代码将Z和c0表示为inf,将c1表示为NaN。我尝试使用vpa,但仍然遇到相同的问题。

e = sym(1.60217662*10^-19);
kB = sym(physconst('Boltzmann'));
T = sym(300);
Eg = sym(1.5*e); % value between 0eV and 2eV for CNT 
m = sym(0.275/e);
A = sym(0.63);
gamma = sym(3.1*e);
a = sym(2.46*10^-10); 
X = exp(Eg/2*kB*T) + A*exp(Eg/2*kB*T);
Y = exp(Eg/2*kB*T) + A*exp(m*Eg/2*kB*T);
Z = ((A)*(exp(vpa((4*m + 1)*Eg/2*kB*T,100)))*((kB*T - m*Eg)) + (exp(vpa((m+1)*Eg/kB*T,100)))*((kB*T + m*Eg)));
Cox = (264.96)*10^-12; % in S.I. Units
N0 = (8/a)* (Eg + kB*T)/(Eg + 4*gamma) * sqrt(kB*T/3*pi*Eg);
c0 = (Cox*X*[Cox*((kB*T)^2)*(Y^3) + (e^2)*N0*Z] / [Cox*kB*T*(X^2) + (e^2)*N0*exp(vpa((2*m + 1)*Eg/2*kB*T,100))]^2);
c1 = ((e^2)*Cox*N0*exp(vpa((2*m + 1)*Eg/2*kB*T,100))*((A^2)*exp(vpa(2*m*Eg/kB*T,100)) - exp((Eg/kB*T)))/[Cox*kB*T*(exp(Eg/2*kB*T) + A*exp(vpa(m*Eg/kB*T,100)))^2 + (e^2)*N0*exp(vpa((2*m+1)*Eg/2*kB*T,100))]^2);
s = c1/c0;
t = 1/c0;
vg = sym(0.2);
phi = vg/(s*vg + t);

请向我指出错误以及如何纠正此错误。

0 个答案:

没有答案