Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet full.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
744.28 Кб
Скачать

Список литературы

1. Трудоношин В.А. , Пивоварова Н.В. , «САПР» (том 4), под редакцией И.П. Норенкова, Москва, «Высшая школа», 1986 год, 160 с.

2. Трудоношин В.А , лекции по курсу «Модели и методы принятия проектных решений», 2010 год.

3. Трудоношин В.А , лекции по курсу «Модели и методы принятия проектных решений», 2011 год.

4. Ультрих Титце, Кристоф Шенк, «Полупроводниковая схемотехника. Том 1», Москва, 2008 год, 832 стр.

Приложение 1: Листинг программы

Файл main.m:

%Моделирование электрической схемы с использованием табличного метода

global R1 R2 C1 C2 C3 L It mFit Amp Tau

%параметры схемы

C1 = 1e-9; C2 = 1e-9;

L = 0.001;

%параметры диода

R1 = 20;

R2 = 10^6;

It = 1e-12;

C3 = 2e-12;

mFit = 0.026;

Amp = 10;

Tau = 1e-3;

n = 0;

Nmax = 10;

dt = 1e-15;

T = 1e-3;

dt_min = 1e-15;

dt_max = 1e-5;

dt_start = 1e-15;

tcur = 0;

DeltaAccuracy = 1e-2;

%начальные приближения

UIn = zeros(16, 1);

UIn1 = zeros(16, 1);

UIn11 = zeros(16, 1);

FiValues = zeros(1, 16);

tValues = [0];

dtprev = dt_start;

dtprev1 = dt_start;

dtcur = dt_start;

i = 0;

%Алгоритм неявного метода Эйлера с переменным шагом и предсказанием

%начального приближения

while tcur < T

i = i + 1

tcur

n=0;

delta_Fi = [10; 10; 10; 10; 10; 10;

10; 10; 10; 10; 10; 10;

10; 10; 10; 10];

if dtcur < dt_min

dtcur = dt_min;

end

dtprev = dtcur;

dt = dtcur;

if(dt>dt_max)

dt = dt_max;

end

%Вычисление нового значения вектора переменных методом Ньютона

while (max(delta_Fi) > DeltaAccuracy)

n = n + 1;

t = tcur + dt;

delta_Fi = nodalm_jacobian(t, UIn, UIn1, dt);

UIn = UIn + delta_Fi;

if (n > Nmax) && (dt > dt_min*2)

dt = dt/2;

UIn = UIn1;

n = 0;

end

if dt < dt_min

break;

end

end

dtcur = dt;

tcur = tcur + dtcur;

%оценка погрешности интегрирования

ep_dop = 0.01 * max(UIn);

ep_m = dtcur/(dtcur + dtprev) .* (UIn - UIn1 - (dtcur/dtprev) .* (UIn1 - UIn11));

ep_m = abs(ep_m);

if (max(ep_m) < ep_dop/4)

dtcur = 2*dtcur;

end

if (max(ep_m) > ep_dop) && dtcur > dt_min

tcur = tcur - dtcur;

UIn = UIn1;

dtcur = dtcur/2;

end

UIn11 = UIn1;

UIn1 = UIn;

tValues = [tValues; tcur];

FiValues = [FiValues; UIn'];

UIn = UIn + (UIn - UIn1) .* (dtcur/dtprev);

end

%чтение результатов, полученных ПА9

PA9 = [];

fid = fopen('papa.tb9', 'rt');

str1 = fgetl( fid);

while 1

tline = fgetl(fid);

if ~ischar(tline), break, end

tnum = str2num( tline);

PA9 = [PA9; tnum];

end

fclose( fid);

plot(tValues,FiValues(:,2));

hold on;

plot(PA9(:,1),PA9(:,2),'m');

jacobian.m

function [delta_UI Jacobian F] = nodalm_jacobian(t, UIn, UIn1, dt)

%Вычисление поправки к значениям потенциалов

global R1 R2 C1 C2 C3 L It mFit Amp Tau

%Якобиан

Z = zeros(4,4);

I = eye(4,4);

M = [1 1 0 0 ;

-1 -1 1 1 ;

0 0 0 -1;

0 0 0 -1];

M1 = -M.';

K31 = [-C1/dt 0 0 0;

0 -C2/dt 0 0;

0 0 -C3/dt 0 ;

0 0 0 -It/mFit*(exp(UIn(4)/mFit)) ];

K42 = [-L/dt 0 0 0 ;

0 0 0 0 ;

0 0 -R1 0 ;

0 0 0 -R2 ];

Jacobian_ = [ I Z Z M;

Z I M1 Z;

K31 Z I Z;

Z K42 Z I];

%Правая часть уравнений

Right =[UIn(1) + UIn(13) + UIn(14);

UIn(2) - UIn(13) - UIn(14) + UIn(15) + UIn(16);

UIn(3) - UIn(16);

UIn(4) - UIn(16);

UIn(5) - UIn(9) + UIn(10);

UIn(6) - UIn(9) + UIn(10);

UIn(7) - UIn(10);

UIn(8) - UIn(10) + UIn(11) + UIn(12);

UIn(9) - C1/dt*(UIn(1) - UIn1(1));

UIn(10) - C2/dt*(UIn(2) - UIn1(2));

UIn(11) - C3/dt*(UIn(3) - UIn1(3));

UIn(12) - It*(exp(UIn(4)/mFit)-1);

UIn(13) - L/dt*(UIn(5) - UIn1(5));

UIn(14) - Amp*sin(t*2*pi/Tau);

-UIn(7)*R1 + UIn(15);

-UIn(8)*R2 + UIn(16)];

%ищем поправки к базисным переменным

deltaUI = rref([Jacobian_ -Right]);

delta_UI = deltaUI(:, 17);

Jacobian = Jacobian_;

F = Right;

end

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]