【问题标题】:Iterations of an indirect equation using MATLAB使用 MATLAB 迭代间接方程
【发布时间】:2011-07-02 10:42:45
【问题描述】:

我坚持绘制表面电位(shy_s)与栅极电压(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 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) 

【问题讨论】:

    标签: matlab iteration equation


    【解决方案1】:

    虽然可能不是最好的解决方案,但一个快速而肮脏的技巧是:

    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 是您希望找到其倒数的数字。

    【讨论】:

    • Thx :)) ...但恐怕我现在需要在不使用这些功能的情况下解决这个问题...仍处于初始水平,所以我的教授要求我使用任何一个来解决它迭代技术,例如 Newton-Raphson 方法或 Secant 方法....我也尝试过这些,但那里显示出一些类似的问题...
    • fminsearch 使用迭代算法:Nelder-Mead。 fzero 实际上作为一种算法要复杂得多。否则,您需要编写自己的 while 循环而不是 for 循环,以确保 shy_s+shy_t.*exp((shy_s-2.*shy_f)/shy_t)) 保持正数。
    【解决方案2】:

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

    对于 i=1:length(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

    结束

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2023-03-11
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多