我被困在绘制表面电位(shy_s)Vs栅极电压(vgb)的图表上 . 我只需要解决下面的这个等式,找到每次迭代的根
vgb=vfb+shy_s+gama.*sqrt(shy_s+shy_t.*exp((shy_s-2.*shy_f)/shy_t))
哪里
shy_f=0.347; %shy_f=shy_t*ln(Na/ni)
shy_t=0.0259; %Thermal voltage = KT/e ; where k = 1.3806*10^-23 @ 300 K
es=11.7*8.85*10^-12;
Na=10^10; %[unit]=[m^-3)
cox=6.93*10^-12; %[unit]=[F/m^2] and t_ox=550 A
q=1.6*10^-19;
vfb=0;
gama=(sqrt(2*q*es*Na)/cox);
在这里,我必须为 vgb(gate voltage)
的不同值找到 shy_s(surface potential)
的值 .
所以我尝试了不同的方法来解决它,比如
a=zeros(1,100);
b=zeros(1,100);
for vgb=0:0.1:10
shy_s=0;
% Say
p=shy_s;
% And
j=vgb-vfb-((sqrt(2*q*es*10^10))/cox).*sqrt(shy_s+shy_t.*exp((shy_s-2.*shy_f)/shy_t));
D=p-j;
if D>0
for shy_s=0:0.1:30;
D=p-j;
if D<0
a=shy_s;
break
end
end
elseif D<0
for shy_s=0:0.1:30
D=p-j;
if D>0
a=shy_s;
break
end
end
end
b(1,vgb)=a;
end
plot(vgb,b)
以这种方式出现以下错误:
???下标索引必须是实数正整数或逻辑 . 错误= =>> shy_s_vs_vgb_latest2 at 78 b(1,vgb)= a;
我再次尝试使用相当简单的技术 -
vgb=fzero(@(shy_s)vfb+shy_s+gama.*sqrt(shy_s+shy_t.*exp((shy_s-(2.*shy_f))/shy_t)),2)
但它说 -
退出fzero:中止搜索包含符号更改的间隔,因为搜索期间遇到复杂的函数值 . (-0.56处的功能值为-0.56 62.1585i . )检查功能或使用不同的起始值重试 . vgb = NaN
另一种关系可用于相同的目的
(vgb-vfb-shy_s)/gama)^2 = shy_s+shy_t.*(exp((shy_s-2*shy_f)/shy_y))+shy_t.*(exp(-shy_s/shy_t)-1)
2 回答
这里如何使用函数fzero进行简单的迭代而不做太多 -
对于i = 1:长度(vgb)
c = @(shy_s)((vgb(i)-vfb-shy_s)/ gama)-sqrt(abs(shy_s shy_t . * exp((shy_s-2 . * shy_f)/ shy_t)));
shy_s = fzero(c,[ - 3 10])
A(I)= shy_s
结束
尽管不太可能是最佳解决方案,但以下是一个快速而肮脏的技巧:
VAL
是您希望找到的逆数 .