Проектирование электрической цепи - Курсовая работа

бесплатно 0
4.5 64
Применения моделирования, методов вычислительной математики, теории оптимизации и средств вычислительной техники при анализе и проектировании электрических цепей. Параметрическая оптимизация электрической цепи. Листинг программы и результаты ее работы.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Цель курсового проектирования состоит в приобретении навыков применения математического моделирования, методов вычислительной математики, теории оптимизации и средств вычислительной техники при анализе и проектировании электрических цепей.Значения не варьируемых параметров: Е0=110В, ЕС=50В, ES=50В, R1=R2=R3=1Ом,R4=R5=100Ом, Т=0,01с, Диапазоны варьируемых параметров: L [10-4; 10-1](Гн), C [10-6; 10-2](Ф).Для формирования математической модели заданной электрической цепи воспользуемся методом переменных состояний. Математическая модель представляет собой систему двух дифференциальных уравнений первого порядка с постоянными коэффициентами где - fi(R) - функции от сопротивлений Представим данную систему уравнений в матричной форме: или, учитывая характер задающего напряжения: где X(t) = [xt(t), x2(t)] = [IL(t), UC(t)] - вектор переменных состояния; Выражение для определения заданной выходной переменной через переменные состояния имеет вид: y = UR5 = f1(R)*IL f2(R)*UC Количество ветвей, содержащих только идеальные источники ЭДС: NE=1, Количество ветвей, содержащих источники тока: NJ=0, Переменными состояния являются переменные IL и UC.Это объясняется тем, что стационарные решения описывают установившиеся состояния, которые для электрических цепей являются обычными состояниями функционирования. Определение периодического решения аналитическим методом производится с помощью процедур procedure Def_An, procedure Def_An_t. procedure Def_An_t(t:real); begin Для определения периодического решения непосредственным методом применяется процедура procedure Def_Nep. Процедура procedure Ust реализует поиск периодического решения методом установления и построение временных зависимостей переменных состояния и выходной переменной в переходном режиме.Синтез носит название оптимизации, если определяются наилучшие в заданном смысле структуры и значения параметров. Задачу выбора оптимальной структуры называют структурной оптимизацией, а расчет оптимальных значений параметров при заданной структуре - параметрической оптимизацией. В общем случае решение задачи параметрической оптимизации осуществляется путем перебора определенным образом выбираемых вариантов значений параметров, сравнения их между собой и выбора наилучшего варианта. Алгоритм выбора очередного варианта значений параметров носит название стратегии поиска. На первом этапе выделяют области параметров, в которых целевая функция является унимодальной, на втором - уточняют положения точек локального минимума в областях унимодальности, а затем среди точек локального минимума выбирают точку глобального минимума.

План
Содержание

Введение

1. Задание на курсовой проект

2. Формирование математической модели

3. Поиск периодического решения

4. Параметрическая оптимизация электрической цепи

5. Результаты работы программы

Список используемой литературы

Листинг программы математика электрический цепь программа

Введение
Цель курсового проектирования состоит в приобретении навыков применения математического моделирования, методов вычислительной математики, теории оптимизации и средств вычислительной техники при анализе и проектировании электрических цепей.

Список литературы
Четвергов К.В. Информатика. Часть 3. Учебное пособие для студентов специальности "Промышленная электроника" дистанционной формы обучения. - Томск: ТУСУР 1998. - 55с.

Листинг программы program kurs;

Uses Crt, Graph;

Const N=2; E0=110;Ec=50;Es=50; L=0.0001; C=0.000001; R1=1; R2=1; R3=R2; R4=100;R5=R4;delt=0.01;TT=0.01;w=2*pi/TT;M=100;h=TT/M;s=2; Pl:array[1..s] of real=(1e-4,1e-6);

Pp:array[1..s] of real=(1e-1,1e-2); Type Matrix=array[1..N,1..N] of real;

Vector=array[1..N] of real;Vect=array[1..s] of real;

Var A:Matrix;

B0,Bc,Bs,B,D0,Dc,Ds,D,Lam,X,X1:Vector;

P:Vect;

t,kpmax,Z1,Z2,K1,K2,K3,K4:real;

grdr,grmd,i,j,k:integer; X0,Y01,Y02,Y03,xx,xx1,y1,y11,y2,y21,y3,y31,y4,y41,y5,y51,y6,y61:integer; kx,ky1,ky2,ky3:real;

def:boolean;

{********************Процедура сложения двух матриц A_sum=A1 A2}

Procedure Add_Matr(n:byte;A1,A2:Matrix; var A_rez:Matrix);

var i,j:byte;

begin for i:=1 to n do for j:=1 to n do a_rez[i,j]:=a1[i,j] a2[i,j] end;

{******************Процедура сложения двух векторов B_sum=B1 B2} Procedure Add_Vect(n:byte;B1,B2:Vector; var B_rez:Vector);

var i:byte;

begin for i:=1 to n do b_rez[i]:=b1[i] b2[i] end;

{*******************Процедура умножения двух матриц A_rez=A1*A2} Procedure Mult_Matr_Matr(n:byte;A1,A2:Matrix; var A_rez:Matrix);

var i,j,k:byte;

begin for i:=1 to n do for j:=1 to n do begin a_rez[i,j]:=0;

for k:=1 to n do a_rez[i,j]:=a_rez[i,j] a1[i,k]*a2[k,j];

end;

end;

{*******************Процедура умножения матрицы на вектор Y=A*X} Procedure Mult_Matr_Vect(n:byte;A:Matrix; X:Vector; var Y:Vector);

var i,j:byte;

begin for i:=1 to n do begin y[i]:=0;

for j:=1 to n do y[i]:=y[i] a[i,j]*x[j];

end;

end;

{******Процедура умножения матрицы на вещественное число A:=A*c} Procedure Mult_Matr_Sc(n:byte; var A:Matrix; Sc:real);

var i,j:byte;

begin for i:=1 to n do for j:=1 to n do a[i,j]:=Sc*a[i,j];

end;

{******Процедура умножения вектора на вещественное число B:=B*c} Procedure Mult_Vect_Sc(n:byte; var B:Vector; Sc:real);

var i:byte;

begin for i:=1 to n do b[i]:=Sc*b[i];

end;

{************* Формирование матриц А,B0,Bc,Bs математической модели }

Procedure Def_A_B(P:Vect);

begin

Z1:=1 R1*R3/(R4*R1 R4*R3-R2*R4-R3*R2);

Z2:=R4*R1 R4*R3-R2*R4-R3*R2; K1:=r4/z2*r3/z1*r1*r3/z2-r3*r4/z2 r4/z2*r3*r5/z1-r3/z2*(r4 r3)/z1*r1/z2 (r4 r3)/z2-r5/z2*r3/(r4 r5)*1/z1; K3:=r4/z1*r1*r3/z2 r4/(r4 r5)*r5/z1 r1/z2*(r3 r4)/z1 r5/(r4 r5)*1/z1; K2:=r4/z2*r3/z1*r1/z2-r4/z2-r4/z2*r3/(r4 r5)*1/z1;

K4:=r4/z1*r1/z2-r4/(r4 r5)*1/z1;

a[1,1]:=-k3/p[1];

a[1,2]:=k1/p[1];

a[2,1]:=-k4/p[2];

a[2,2]:=k2/p[2];

b0[1]:=1/p[1];b0[2]:=0;

bc[1]:=1/p[1];bc[2]:=0;

bs[1]:=1/p[1];bs[2]:=0;

end;

{******Процедура формирования вектора B(t)=B0 Bc*cos(wt) Bs*sin(wt)**}

Procedure Def_B_t(t:real);

begin b[1]:=b0[1] bc[1]*cos(w*t) bs[1]*sin(w*t);

b[2]:=b0[2] bc[2]*cos(w*t) bs[2]*sin(w*t);

end;

{****** Функция определения выходной переменной***************} function U5(X:Vector):real;

begin

U5:=-r4/(r4 r5)*r5/z1*x[1] r4/z2*r3/(r4 r5)*r5/z1*x[2];

end;

{********Процедура вычисления обратной матрицы второго порядка }

Procedure Obr_Matr(A:Matrix; var A_obr:Matrix);

var det:real;

begin det:=a[1,1]*a[2,2]-a[1,2]*a[2,1];

A_obr[1,1]:=a[2,2]/det;

A_obr[1,2]:=-a[1,2]/det;

A_obr[2,1]:=-a[2,1]/det;

A_obr[2,2]:=a[1,1]/det;

end;

{********************Процедура формирования единичной матрицы E}

Procedure E_Matr(n:byte; var E:Matrix);

var i,j:byte;

begin for i:=1 to n do begin for j:=1 to n do e[i,j]:=0;

e[i,i]:=1;

end;

end;

{Процедура вычисления собственных чисел матрицы А второго порядка }

Procedure Det_L(A:Matrix; var L:Vector; var comp:boolean);

var p0,p1,D:real;

begin p1:=-(a[1,1] a[2,2]);

p0:=a[1,1]*a[2,2]-a[1,2]*a[2,1];

D:=p1*p1-4*p0;

if D>=0 then begin comp:=false;

l[1]:=(-p1 sqrt(D))/2;

l[2]:=(-p1-sqrt(D))/2;

end else begin

Comp:=true;

l[1]:=-p1/2;

l[2]:=sqrt(-D)/2;

end end;

{**определение векторов D0,Dc,Ds для аналитического метода***} procedure Def_An;

var Z1,Z2:Matrix;

Y1,Y2:Vector;

begin

Obr_Matr(A,Z1);

Mult_Matr_Vect(n,Z1,B0,D0);

Mult_Vect_Sc(n,D0,-1);

Mult_Matr_Matr(n,A,A,Z1);

E_Matr(n,Z2);

Mult_Matr_Sc(n,Z2,4*pi*pi/TT/TT);

Add_Matr(n,Z1,Z2,Z2);

Obr_Matr(Z2,Z1);

Mult_Matr_Vect(n,A,Bc,Y1);

Y2:=Bs;

Mult_Vect_Sc(n,Y2,w);

Add_Vect(n,Y1,Y2,Y1);

Mult_Matr_Vect(n,Z1,Y1,Dc);

Mult_Vect_Sc(n,Dc,-1);

Y1:=Bc;

Mult_Vect_Sc(n,Y1,w);

Mult_Matr_Vect(n,A,Bs,Y2);

Mult_Vect_Sc(n,Y2,-1);

Add_Vect(n,Y1,Y2,Y1);

Mult_Matr_Vect(n,Z1,Y1,Ds);

end;

{**определение аналитического решения D9t)=D0 Dc*cos(wt) Ds*sin(wt)***} procedure Def_An_t(t:real);

VARY:Vector;

begin

Y:=Dc;

Mult_Vect_Sc(n,Y,cos(w*t));

Add_Vect(n,D0,Y,D);

Y:=Ds;

Mult_Vect_Sc(n,Y,sin(w*t));

Add_Vect(n,D,Y,D);

end;

{******************** Численная схема трапеции }

Procedure Trapec(n:integer; A:Matrix; B:Vector; h:real; var X:Vector);

var Z1,Z2,Z3:Matrix;

Y1,Y2:Vector;

begin

E_Matr(n,Z1);

Mult_Matr_Sc(n,Z1,2);

Z2:=A;

Mult_Matr_Sc(n,Z2,h);

Add_Matr(n,Z1,Z2,Z3);

Mult_Matr_Vect(n,Z3,X,Y1);

Y2:=B;

Mult_Vect_Sc(n,Y2,2*h);

Add_Vect(n,Y1,Y2,Y1);

Mult_Matr_Sc(n,Z2,-1);

Add_Matr(n,Z1,Z2,Z3);

Obr_Matr(Z3,Z1);

Mult_Matr_Vect(n,Z1,Y1,X);

end;

{*******инициализация графического режима******** }

Procedure Init;

begin grdr:=VGA;

grmd:=VGAHI; {инициализация графического режима} INITGRAPH(grdr,grmd,"d:\bp\bgi");

X0:=15;

Y01:=150;

Y02:=300;

Y03:=450;

line(X0,5,X0,GETMAXY-5);

line(X0-5,Y01,GETMAXX-5,Y01);

line(X0-5,Y02,GETMAXX-5,Y02);

line(X0-5,Y03,GETMAXX-5,Y03);

outtextxy(X0 5,5,"x1");

outtextxy(X0 5,Y01 10,"x2");

outtextxy(X0 5,Y02 10,"U4");

outtextxy(GETMAXX-10,Y01 5,"t");

outtextxy(GETMAXX-10,Y02 5,"t");

outtextxy(GETMAXX-10,Y03 5,"t");

end;

{*******Вычисление нормы матрицы************************** } function Norm(n:byte; A:Matrix):real;

var i,j:byte;

max,sum:real;

begin max:=abs(a[1,1]);

for j:=1 to n do begin sum:=0;

for i:=1 to n do sum:=sum abs(a[i,j]);

if sum>max then max:=sum;

end;

Norm:=max;

end;

{****************Процедура вычисления экспоненциальной матрицы } Procedure M_Exp(n:byte; A:Matrix; t:real; var Exp_M:Matrix);

var i,s:byte;

Z1,Z2,Z3:Matrix;

ss:real;

begin ss:=Norm(n,A);

s:=round(ln(10*t*ss)/ln(2));

E_Matr(n,Z1);

Z2:=Z1;Z3:=Z2;

for i:=1 to s do begin

Mult_Matr_Matr(n,A,Z2,Z3); Mult_Matr_Sc(n,Z3,t/exp(s*ln(2))/i); Add_Matr(n,Z1,Z3,Z1);

Z2:=Z3;

end;

for i:=1 to s do begin

Mult_Matr_Matr(n,Z1,Z1,Z2);

Z1:=Z2;

end;

Exp_M:=Z1;

end;

{*Определение периодического решения непосредственным методом********} Procedure Def_nep(var X:Vector);

var Z1,Z2:Matrix;

Y:Vector;

begin y[1]:=0;y[2]:=0;

for i:=1 to M do begin t:=i*h;

Def_B_t(t);

Trapec(n,A,B,h,X);

end;

Det_L(A,Lam,def);

M_Exp(n,A,TT,Z1);

Mult_Matr_Sc(n,Z1,-1);

E_Matr(n,Z2);

Add_Matr(n,Z1,Z2,Z2);

Obr_Matr(Z2,Z1);

Mult_Matr_Vect(n,Z1,Y,X);

end;

{***********Построение графика периодического решения ****************} Procedure Per_Solve(P:Vect);

begin

Def_A_B(P);

Def_An;

Def_nep(X);

Init;

kx:=(GETMAXX-X0-10)/TT;

ky1:=120/50;

ky2:=120/200;

ky3:=-100/2;

Def_An_t(0);

xx1:=X0;

y11:=Y01-round(ky1*x[1]);

y21:=Y02-round(ky2*x[2]);

y31:=Y01-round(ky1*d[1]);

y41:=Y02-round(ky2*d[2]);

y51:=Y03-round(ky3*U5(X));

y61:=Y03-round(ky3*U5(D));

for i:=1 to M do begin t:=i*h;

Def_An_t(t);

Def_B_t(t);

Trapec(n,A,B,h,X);

xx:=X0 round(kx*t);

y1:=Y01-round(ky1*x[1]);

y2:=Y02-round(ky2*x[2]);

y3:=Y01-round(ky1*d[1]);

y4:=Y02-round(ky2*d[2]);

y5:=Y03-round(ky3*U5(X));

y6:=Y03-round(ky3*U5(D));

setcolor(Red);

line(xx1,y11,xx,y1);

line(xx1,y21,xx,y2);

line(xx1,y51,xx,y5);

setcolor(Green);

line(xx1,y31,xx,y3);

line(xx1,y41,xx,y4);

line(xx1,y61,xx,y6); xx1:=xx;y11:=y1;y21:=y2;y31:=y3;y41:=y4;y51:=y5;y61:=y6;

end;

readln;

CLOSEGRAPH;

end;

{****************************Метод установления****************}

Procedure Ust(P:Vect);

begin

Def_A_B(P);

x[1]:=0;x[2]:=0;

j:=0;

repeat j:=j 1;

X1:=X;

for i:=1 to M do begin t:=i*h;

Def_B_t(t);

trapec(n,A,B,h,X);

end;

def:=true;

for i:=1 to n do if abs(x[i]-x1[i])-delt*abs(x[i] x1[i])/2>=0 then def:=false; until def;

Init;

kx:=(GETMAXX-X0-10)/TT/j;

ky1:=120/50;

ky2:=120/200;

ky3:=-100/2;

x[1]:=0;x[2]:=0;

init;

xx1:=X0;y11:=Y01;y21:=Y02;y31:=Y03;

for k:=0 to j-1 do for i:=1 to M do begin t:=i*h k*TT;

Def_B_t(t);

trapec(n,A,B,h,X);

xx:=X0 round(kx*t);

y1:=Y01-round(ky1*x[1]);

y2:=Y02-round(ky2*x[2]);

y3:=Y03-round(ky3*U5(X));

setcolor(Red);

line(xx1,y11,xx,y1);

line(xx1,y21,xx,y2);

line(xx1,y31,xx,y3);

xx1:=xx;y11:=y1;y21:=y2;y31:=y3;

end;

readln;

CLOSEGRAPH;

end;

{*Определение коэффициента пульсаций по решению непосредственным методом} function Kp_nep(P:Vect):real;

var Usr,Umax,Umin:real;

begin

Def_A_B(P);

Def_nep(X);

Usr:=0;Umin:=U5(X);Umax:=Umin;

for i:=1 to M do begin t:=i*h;

Def_B_t(t);

trapec(n,A,B,h,X);

Usr:=Usr U5(X);

if U5(X)>Umax then Umax:=U5(X);

if U5(X)<Umin then Umin:=U5(X); end;

Kp_nep:=(Umax-Umin)*M/Usr/2;

end;

{***************Метод золотого сечения } function Gold(P:Vect;i:byte):real;

const g=0.618034;

var r,xl,xp:real;

X1,X2:Vect;

begin xp:=pp[i];xl:=pl[i];X1:=P;X2:=P;

repeat r:=g*(xp-xl);x1[i]:=xl r;x2[i]:=xp-r;

if kp_nep(X1)<kp_nep(X2) then xp:=x1[i] else xl:=x2[i] until abs(xp-xl)-delt*abs(xp xl)/2<0;

Gold:=(xp xl)/2;

end;

{*************** Метод координатного спуска } Procedure Koord(var Pmin:Vect; var Kpmin:real);

var i:byte;

P,PL:Vect;

def:boolean;

begin for i:=1 to s do p[i]:=(pl[i] pp[i])/2;

repeat

PL:=P;

for i:=1 to s do begin p[i]:=Gold(P,i);

end;

def:=true;

for i:=1 to s do if abs(p[i]-pl[i])-delt*abs(p[i] pl[i])/2>=0 then def:=false; until def;

for i:=1 to s do pmin[i]:=(p[i] pl[i])/2;

Kpmin:=Kp_nep(Pmin);

end;

{************************ Управляющая программа *********** }

Begin

CLRSCR;

Koord(P,kpmax);{оптимизация методом координатного спуска} Def_A_B(Р);{формирование матриц А,В математической модели} Det_L(A,Lam,def);{определение собственных чисел} writeln("Оптимальная точка:"); writeln("p[1]=",p[1],"p[2]=",p[2],"kpmax=",kpmax); writeln("Собственные числа:"); {вывод собственных чисел на экран} if not def then begin writeln("l[1]=",lam[1]);writeln("l[2]=",lam[2]); writeln("Постоянные времени:"); writeln("tau1=",1/abs(lam[1]));writeln("tau2",1/abs(lam[2])); end else begin writeln("l[1]=",lam[1]," j",lam[2]);writeln("l[1]=",lam[1],"-j",lam[2]); writeln("Постоянная времени: tau=",1/abs(lam[1]));

writeln("Собственная частота: fc=",lam[2]/2/pi);

end;

readln;

Ust(Р);{определение периодического решения методом установления} Per_Solve(Р);{определение периодического решения непосредственным методом}

End.

Размещено на

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?