Скачиваний:
1
Добавлен:
25.11.2025
Размер:
4 Кб
Скачать
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
Соседние файлы в папке файлы матлаб