Обозначения и термины, характерные для электрических систем при изложении узлового метода. Создание математической модели данного метода в виде системы алгебраических и трансцендентных уравнений. Структура и листинг программы анализа электрических схем.
Аннотация к работе
Обозначения и термины характерные для электрических систем при изложении узлового метода.
Список литературы
Приложение
Введение
Объектом исследования являются варианты алгоритма узлового метода, используемые для расчета электрических схем.
Цель практики: разработка алгоритма программы анализа электрических схем узловым методом. Для этого поставлены следующие задачи: 1) Рассмотреть принципиальные электрические схемы;
2) Разработать эквивалентные представления для элементов принципиальных электрических схем;
3) Разработать программу анализа электрической схемы узловым методом;
1. Обозначения и термины характерные для электрических систем при изложении узлового метода
Для получения математических моделей систем в ряде областей техники наиболее известным является узловой метод. Будем излагать узловой метод на примере электрической системы. Введем некоторые обозначения и термины характерные для электрических систем.
I, U, ? - векторы-столбцы токов, напряжений и узловых потенциалов соответственно. Напряжение ветви есть разность потенциалов инцидентных ей узлов, поэтому связь между U и ? дается через матрицу инциденций: (1.1) где - транспонированная матрица.
Разделим ветви эквивалентной схемы на группы емкостных, резисторных. индуктивных ветвей и ветвей источников тока, в зависимости от характера соответствующего ветви компонентного уравнения. Будем представлять эти группы векторами токов IC, IR, IL, Ij и векторами напряжений UC, UR, UL, Uj соответственно, т.е.
, Матрицу инциденций также удобно разделить на подматрицы: , где АС - подматрица инцинденций узлов и емкостных ветвей; AR - подматрица инцинденций узлов и резистивных ветвей, и т.д.
Будем использовать диагональные матрицы емкостей С, сопротивлений R, и индуктивностей L - их диагональные элементы равны соответствующим внутренним параметра.
; ; ;
2. Изложение узлового метода в применении к электрическим системам
Основные положения узлового метода следующие: 1.В качестве базисных координат используются узловые потенциалы;
2.Исходным топологическим уравнением является уравнение равновесия токов в узлах. Это уравнение в матричной форме: AI=0, или ACIC ARIR ALIL AUIU (2.1)
Компонентные уравнения в матричной форме: (2.2)
(2.3)
(2.4)
Подстановка (2.2) - (2.4) в (2.1) дает: (2.5) где IU в общем случае есть функция ?, , t, т.е. .
Система (2.5) неудобна для численного решения. В случае линейных уравнений ее сводят к системе линейных алгебраических уравнений с помощью преобразований Фурье или Лапласса. В общем случае система (2.5) преобразуется в систему алгебраических и трансцендентных уравнений путем замены производных отношениями конечных разностей:
где h-шаг дискретизации по оси времени (шаг интегрирования), индекс n или п-1 у вектора ? относит значение ? к n-му или к (n-1)-му шагу интегрирования, другими словами, такая замена осуществляется на каждом шаге численного решения. В соответствии с изложенным, аппроксимируем компонентные уравнения (2.2) и (2.4): ’ (2.6) и подставим в (1.9) значения токов, относящиеся к п- му шагу. Тогда . и окончательно с учетом (1.8): (2.7)
Полученная математическая модель представляет собой систему алгебраических и трансцендентных уравнений с неизвестным вектором ?п.
Следует отметить, что и к началу n-го шага уже вычислены. Решение системы (2.7) дает ?, далее по (1.8) получаем Un и по компонентным уравнениям вычисляем Іп. Следовательно получены все численные результаты для выполнения нового (п 1) -го шага. При п=1 значения и известны- это начальные условия.
3. Структура программы
Модуль, реализующий вычисления.
4. Листинг программы электрический узловой математический листинг unit Unit1;
Matr1:array [0..39,0..39] of string; // основ. матрица связий
Matr2:array [0..39,0..39] of integer; //матрица расчета пути
MYSET:TSET;
link_color:TCOLOR;
Mouse_pos:TPOINT;
implementation
{$R *.dfm}
{$R file.res file.rc}
//***************************БЛОК 1************************* procedure TFORM1.CREATSERIES; //процедура создания серий графиков var i,k:integer;
Ser1,Ser2:TCHARTSERIES;
begin for i:=0 to MR-1 do begin
Ser1:=TLINESERIES.Create(form4);
Ser2:=TLINESERIES.Create(form4);
Form4.Chart1.ADDSERIES(Ser1);
Form4.Chart2.ADDSERIES(Ser2);
Ser1.Title:=R_el[i 1].lab.Caption;
Ser2.Title:=R_el[i 1].lab.Caption;
Ser1.Marks.Style:=SMSXVALUE;
Ser2.Marks.Style:=SMSXVALUE;
end;
k:=0;
for i:=MR to (MR MC-1) do begin
Ser1:=TLINESERIES.Create(form4);
Ser2:=TLINESERIES.Create(form4);
Form4.Chart1.ADDSERIES(Ser1);
Form4.Chart2.ADDSERIES(Ser2);
Ser1.Title:=C_el[k 1].lab.Caption;
Ser2.Title:=C_el[k 1].lab.Caption;
Ser1.Marks.Style:=SMSXVALUE;
Ser2.Marks.Style:=SMSXVALUE;
inc(k);
end;
k:=0;
for i:=(MR MC) to (MR MC ML-1) do begin
Ser1:=TLINESERIES.Create(form4);
Ser2:=TLINESERIES.Create(form4);
Form4.Chart1.ADDSERIES(Ser1);
Form4.Chart2.ADDSERIES(Ser2);
Ser1.Title:=L_el[k 1].lab.Caption;
Ser2.Title:=L_el[k 1].lab.Caption;
Ser1.Marks.Style:=SMSXVALUE;
Ser2.Marks.Style:=SMSXVALUE;
inc(k);
end;
k:=0;
for i:=(MR MC ML) to (MR MC ML MJ-1) do begin
Ser1:=TLINESERIES.Create(form4);
Ser2:=TLINESERIES.Create(form4);
Form4.Chart1.ADDSERIES(Ser1);
Form4.Chart2.ADDSERIES(Ser2);
Ser1.Title:=J_el[k 1].lab.Caption;
Ser2.Title:=J_el[k 1].lab.Caption;
Ser1.Marks.Style:=SMSXVALUE;
Ser2.Marks.Style:=SMSXVALUE;
inc(k);
end;
end;
//****************************БЛОК 4************************ procedure TFORM1.Calculate(var h:real); //процедура вычисл. матр. Y var i,j,k:integer; //h-шаг решения temp:array of Double;
begin for k:=0 to dim_m-1 do begin for i:=0 to dim_n-1 do
//******************************************* for i:=0 to MR-1 do
YR[i]:=Y[i];
k:=0;
for i:=MR to (MR MC-1) do begin
YC[k]:=Y[i];
inc(k);
end;
k:=0;
for i:=(MR MC) to (MR MC ML-1) do begin
YL[k]:=Y[i];
inc(k);
end;
k:=0;
for i:=(MR MC ML) to (MR MC ML MJ-1) do begin
YJ[k]:=Y[i];
inc(k);
end;
//***************************************** for k:=0 to MR-1 do //XR:=R(-1)*YR for j:=0 to MR-1 do if PR[k,j]0 then XR[k]:=XR[k] 1/PR[k,j]*YR[j] else XR[k]:=XR[k];
for k:=0 to ML-1 do //XL:=L(-1)*YL begin for j:=0 to ML-1 do if PL[k,j]0 then XL[k]:=XL[k] 1/PL[k,j]*YL[j] else XL[k]:=XL[k];
XL[k]:=XL[k]*h XL_0[k]; //xl_o - val on (n-1) step end;
SETLENGTH(temp,MC);
for i:=0 to MC-1 do temp[i]:=YC[i]-YC_0[i];
for k:=0 to MC-1 do //XC:=C(YC-YC_0)/h begin for j:=0 to MC-1 do
XC[k]:=XC[k] PC[k,j]*temp[j];
XC[k]:=XC[k]/h;
end;
//********************************************************** for i:=0 to ML-1 do
//***************************БЛОК 5************************* function TFORM1.Gauss:boolean; //Метод Гаусса с выбором главного элемента по всей матрице (схема полного выбора). var i,j,k,m:integer;
ved_el:double;
Temp:array of array of double;
temp1:array of byte;
max,bufer:double;
col,row:integer;
usl:boolean;
begin usl:=true;
SETLENGTH(Temp,dim_n,dim_n 1);
SETLENGTH(temp1,dim_n);
for i:=0 to dim_n-1 do begin for j:=0 to dim_n-1 do
Temp[i,j]:=B[i,j];
Temp[i,dim_n]:=bb[i];
end;
//******************************** for k:=0 to dim_n-1 do begin
//************ for m:=0 to dim_n-1 do if temp1[m]=0 then max:=Temp[m,m];//find first max el
//************ for i:=0 to dim_n-1 do for j:=0 to dim_n-1 do if (temp1[i]=0) or (temp1[j]=0) then //check rows if Temp[i,j]>=max then begin max:=Temp[i,j];
col:=j;
row:=i;
end;
// change rows temp1[col]:=1;
for j:=0 to dim_n do begin bufer:=Temp[row,j];
Temp[row,j]:=Temp[col,j];
Temp[col,j]:=bufer;
end;
//********** end;
for k:=0 to dim_n-1 do if Temp[k,k]=0 then usl:=false;
if usl=true then begin
//Gauss programm ved_el :=Temp[0,0];
for j:=0 to dim_n do
Temp[0,j]:=Temp[0,j]/ved_el;
for k:=1 to dim_n-1 do begin for j:=0 to k-1 do begin ved_el:=Temp[k,j];
for m:=0 to dim_n do
Temp[k,m]:=Temp[k,m]-Temp[j,m]*ved_el;
end;
ved_el:=Temp[k,k];
for m:=0 to dim_n do
Temp[k,m]:=Temp[k,m]/ved_el;
for i:=k-1 downto 0 do begin ved_el:=Temp[i,k];
for m:=0 to dim_n do
Temp[i,m]:=Temp[i,m]-Temp[k,m]*ved_el;
end;
end;
//************************* for i:=0 to dim_n-1 do bb[i]:=Temp[i,dim_n];
end;
Gauss:=usl;
end;
//**************************БЛОК 7*************************** procedure TFORM1.Gen_matr_B(var h:real); //процедура вычисления левой части, h-шаг var i,j,k:integer;
B1,B2,B3,B4,B5,B6:array of array of real; //temp matrix begin
SETLENGTH(B,dim_n,dim_n);
SETLENGTH(B2,dim_n,dim_n);
SETLENGTH(B4,dim_n,dim_n);
SETLENGTH(B6,dim_n,dim_n);
SETLENGTH(B1,dim_n,MC);
SETLENGTH(B3,dim_n,MR);
SETLENGTH(B5,dim_n,ML);
//************************************************ for k:=0 to dim_n-1 do //Ac*C for j:=0 to MC-1 do for i:=0 to MC-1 do
B1[k,j]:=B1[k,j] AC[k,i]*PC[i,j];
for k:=0 to dim_n-1 do //B2:=(Ac*C)*trans(Ac) for j:=0 to dim_n-1 do begin for i:=0 to MC-1 do
//********************** for k:=0 to dim_n-1 do //Ar*R(-1) for j:=0 to MR-1 do for i:=0 to MR-1 do if PR[i,j]0 then B3[k,j]:=B3[k,j] AR[k,i]*(1/PR[i,j]); //R(-1) for k:=0 to dim_n-1 do //B4:=(Ar*R(-1))*trans(Ar) for j:=0 to dim_n-1 do for i:=0 to MR-1 do
B4[k,j]:=B4[k,j] B3[k,i]*AR[j,i];
//*************************** for k:=0 to dim_n-1 do //Al*L(-1) for j:=0 to ML-1 do for i:=0 to ML-1 do if PL[i,j]0 then B5[k,j]:=B5[k,j] AL[k,i]*(1/PL[i,j]);
for k:=0 to dim_n-1 do //B6:=(Al*L(-1))*trans(AL) for j:=0 to dim_n-1 do begin for i:=0 to ML-1 do
B6[k,j]:=B6[k,j] B5[k,i]*AL[j,i];
B6[k,j]:=B6[k,j]/h;
end;
//**************************** for i:=0 to dim_n-1 do for j:=0 to dim_n-1 do