使用MATLAB迭代间接方程

时间:2011-07-02 10:42:46

标签: matlab iteration equation

我被困在绘制表面电位(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);

在这里,我必须为shy_s(surface potential)的不同值找到vgb(gate voltage)的值。

所以我尝试了不同的方法来解决它,比如

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)

以这种方式显示以下错误:

  

???下标指数   必须是真实的   正整数或   逻辑值。

     

==&gt;中的错误   shy_s_vs_vgb_latest2   在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 个答案:

答案 0 :(得分:0)

尽管不太可能是最佳解决方案,但以下是一个快速而肮脏的技巧:

opt = optimset('TolFun',1e-8);
vgb=@(shy_s) vfb+shy_s+gama.*sqrt(shy_s+shy_t.*exp((shy_s-2.*shy_f)/shy_t));
b = fminsearch(@(shy_s) abs(vgb(shy_s)-VAL),10,opt);

VAL是您希望找到倒数的数字。

答案 1 :(得分:0)

这里如何使用函数fzero进行简单的迭代而不做太多 -

表示i = 1:长度(vgb)

C = @(shy_s)((VGB(ⅰ)-vfb-shy_s)/伽马)-sqrt(ABS(shy_s + shy_t * EXP((shy_s-2 * shy_f)/ shy_t))。); < / p>

shy_s = fzero(c,[ - 3 10])

A(I)= shy_s

  • 'a'给出正确的迭代值!