Использование vpa в экспоненте в MATLAB для предотвращения инфляции и NaN - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь построить phi vs vg в matlab для разных значений Кокса.Я работаю с очень большими значениями и включил их в код здесь.Выполнение кода дает 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);

Пожалуйста, укажите мне на ошибку, а также на то, как это можно исправить.

...