Скачиваний:
0
Добавлен:
25.11.2025
Размер:
3.93 Кб
Скачать
clear all
close all
clc
warning off

prog_parameters
constants
initial_data
parameters
grid_functions
normirovka
initial_approx

for j=1:length(U)
if j>1
initial_approx_U
end

err=10*Delta;
ct=0;
while err>Delta
ct=ct+1;
if j==1
Fn=ones(I,1);
Fp=ones(I,1);
else
A=zeros(I,I);
B=zeros(I,1);
A(1,1)=1;
B(1)=exp(-U(j));
A(I,I)=1;
B(I)=1;
for i=2:I-1
A(i,i)=-mun(i)*exp(fi0(i))/dx(i)-mun(i-1)*exp(fi0(i-1))/dx(i-1);
A(i,i+1)=mun(i)*exp(fi0(i))/dx(i);
A(i,i-1)=mun(i-1)*exp(fi0(i-1))/dx(i-1);
B(i)=0;
end
Fn=A^(-1)*B;

A=zeros(I,I);
B=zeros(I,1);
A(1,1)=1;
B(1)=exp(U(j));
A(I,I)=1;
B(I)=1;
for i=2:I-1
A(i,i)=-mup(i)*exp(-fi0(i))/dx(i)-mup(i-1)*exp(-fi0(i-1))/dx(i-1);
A(i,i+1)=mup(i)*exp(-fi0(i))/dx(i);
A(i,i-1)=mup(i-1)*exp(-fi0(i-1))/dx(i-1);
B(i)=0;
end
Fp=A^(-1)*B;
end

A=zeros(I,I);
B=zeros(I,1);
A(1,1)=1;
B(1)=-log(-N(1)/2+sqrt((N(1)/2)^2+1))+U(j);
A(I,I)=1;
B(I)=log(N(I)/2+sqrt((N(I)/2)^2+1));

for i=2:I-1
A(i,i)=2/(dx(i)+dx(i-1))*(-1/dx(i)-1/dx(i-1));
A(i,i+1)=2/(dx(i)+dx(i-1))/dx(i);
A(i,i-1)=2/(dx(i)+dx(i-1))/dx(i-1);
B(i)=Fn(i)*exp(fi0(i))-Fp(i)*exp(-fi0(i))-N(i);
end
fi=A^(-1)*B;

clc
ct
voltage=U(j)*ft
err=max(abs(fi-fi0))/max(abs(fi0))
pause(1e-3)
fi0=fi0+(fi-fi0)./K(j); %чтобы добиться сходимости нужно увеличивать (коэффициент приращения переменных)

n=Fn.*exp(fi0);
p=Fp.*exp(-fi0);

for i=1:I-1
E(i)=-(fi0(i+1)-fi0(i))/dx(i);
end
E(I)=E(I-1)+(E(I-1)-E(I-2));

ro=(p-n+N).*(N0*q);
end
for i=2:I
Jn(i)=mun(i-1)*exp(fi0(i-1))*(Fn(i)-Fn(i-1))/dx(i-1); %можно попробовать центральную разность и посмотреть на погрешность
Jp(i)=-mup(i-1)*exp(-fi0(i-1))*(Fp(i)-Fp(i-1))/dx(i-1);
end

%for i=2:I-1 чтобы показать большую погрешность когда решаем в основном базисе
%JnDR(i)=-(mun(i)*n(i)+mun(i-1)*n(i-1))/2*(fi0(i+1)-fi0(i-1))/(dx(i)+dx(i-1));
%JnDF(i)=(mun(i)+mun(i-1))/2*(n(i+1)-n(i-1))/(dx(i)+dx(i-1));
%JpDR(i)=-(mup(i)*p(i)+mup(i-1)*p(i-1))/2*(fi0(i+1)-fi0(i-1))/(dx(i)+dx(i-1));
%JpDF(i)=(mup(i)+mup(i-1))/2*(p(i+1)-p(i-1))/(dx(i)+dx(i-1));
%end
Jn(1)=Jn(2);
Jn(1)=Jn(2);
Jp(1)=Jp(2);
Jp(1)=Jp(2);
%JnDR(1)=JnDR(2);
%JnDF(1)=JnDF(2);
%JpDR(1)=JpDR(2);
%JpDF(1)=JpDF(2);
%JnDR(I)=JnDR(I-1);
%JnDF(I)=JnDF(I-1);
%JpDR(I)=JpDR(I-1);
%JpDF(I)=JpDF(I-1);

%Jn=JnDR+JnDF;
%Jp=JpDR+JpDF;
Js=Jn+Jp;

if VAH==1
Current(j)=Js(I); % для прямой ветви ВАХ
else
Current(j)=Js(fix(I/1.8)); %для обратной ветви ВАХ
end
graphics
end
figure
plot(U.*ft, Current.*(J0*1e-4), 'LineWidth',LW)
xlabel('Voltage, V', 'FontSize', FS)
ylabel('Current desity, A/cm^2', 'FontSize', FS)
grid on
%для обратной ветви возьмем середину х, для прямой конец х

if VAH==1
print(gcf,'-djpeg','IV-charact_F');
else
print(gcf,'-djpeg','IV-charact_R');
end
Соседние файлы в папке файлы матлаб