% carrier (望月 00/11月)
% 少数キャリア連続の式を体感する
z1=1; % 拡散現象が ... 0=無い 1=ある
d0=10; % 拡散定数
d0L=0; % 左の窓が,0=密封 1=開放
d0R=1; % 右の窓 同上
z2=0; % ドリフトが ... 0=無い 1=ある
z3=0; % キャリアの発生が ... 0=無い 1=ある
z4=0; % キャリアの消滅が ... 0=無い 1=ある
p00=1; %熱平衡状態でのキャリア濃度
iend=200; % シミュレーションを行なう最終時刻
%
p0=[ linspace(0,0,5) ...
linspace(2,2,45) ...
linspace(0.5,0.5,50) ...
linspace(1,1,110) ...
linspace(1,1.2,10) ...
linspace(1.2,1.2,5) ...
linspace(1.2,1,10) ...
linspace(1,1,150) ]; % 濃度
p=p0;
len=length(p);
x0=[(0:0.01:5)];
x=x0(1:len);
% pt00=[ linspace(0,0,20) linspace(1,1,10) linspace(0,0,20)]
% pt0=[pt00 pt00 pt00 pt00 pt00]
e=[ linspace(0,0,150) ...
linspace(0,1,30) ...
linspace(1,1,90) ...
linspace(1,0,30)];
e=[e linspace(0,0,len-length(e)) ];
ea=abs(e);
eplus=(e+ea)/2;
eminus=(e-ea)/2;
g=[ linspace(0,0,330) ...
linspace(1,1,10) ];
g=[g linspace(0,0,len-length(g)) ];
%
plot(x,p,'g',x,e*0.1-0.2,'m')
pold=p;
hold on
fi=1;
i=0;
for ii=20:20:iend
for i=i+1:ii
dx=diff(x); % 区間の間隔
if z1==1, % 拡散現象
for j=1:d0
p(1)=p(1)*d0L;
p(len)=p(len-1)*d0R;
dp=diff(p)./dx./dx;
ddp=diff(dp)/200000;
p=p+[0 ddp 0];
% 強制的にキャリア濃度設定{
%p(2)=1+sin(i/200);
% }
end
end
if z2==1, % 電界
x=x+e/5000;
dx2=diff(x);
p(1:len-1)=p(1:len-1).*dx./dx2;
end
if z3==1, % キャリアの発生
p=p+g*1/2000;
end
if z4==1, % キャリアの消滅
p=p-(p-p00)/1000;
end
end
plot(x,p)
title(['loop ' num2str(i)])
pold=p;
pause(0)
end
plot(x0(1:len),p0,'g','LineWidth',2)
plot(x,p,'r')
title(['loop ' num2str(i)])
hold off
|