2011-07-02 8 views
1

表面電位(shy_s)Vsゲート電圧(vgb)のグラフをプロットすることに固執しています。私はちょうど下に、この方程式を解くと、私はvgb(gate voltage)の異なる値についてshy_s(surface potential)の値を見つける必要があり、すべての反復MATLABを使用した間接方程式の反復

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); 

のルートを見つける必要があります。

だから私は、次のようなエラーが現れる。このように、このような

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)を=。再び

私は

vgb=fzero(@(shy_s)vfb+shy_s+gama.*sqrt(shy_s+shy_t.*exp((shy_s-(2.*shy_f))/shy_t)),2) 

technique-単純むしろ使用しようとしたが、それはfzeroを終了

をsays-:複素関数値ので、符号変化 を含む区間ため中止検索を検索中に遭遇した。 (ファンクション値-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) 

答えて

0
うちはずっとやってて単純な反復処理のための関数関数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])

(I)= shy_s

  • '' は正しい反復値を与えます!
0

を使用することができます。

opt = optimset('TolFun',1e-8); 
[email protected](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は、逆を求める数値です。

+0

Thx :))...しかし、私は今、これらの関数を使ってこれを解く必要があるのだろうか...初期レベルではまだ私の教授が私に反復法ニュートン・ラフソン法やセカント法など...私はそれらを試しましたが、そこにはいくぶん類似した問題がありました。 – Atif

+1

fminsearchは反復アルゴリズムNelder-Meadを使用しています。 fzeroはアルゴリズムとして実際ははるかに複雑です。そうでなければ、forループの代わりに、 'shy_s + shy_t。* exp((shy_s-2。* shy_f)/ shy_t))'が '+ 'のままであることを確かめる' while'ループを書く必要があります。 – Rasman

関連する問題