Прискорений пошук усталених режимів електромаґнетних елементів систем керування.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2008
Тип роботи:
Курсова робота
Предмет:
Моделювання процесів та елементів систем керування
Група:
КС-43

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка”  Звіт про виконання лабораторної роботи № 3 з дисципліни: „Моделювання процесів та елементів систем керування” на тему: „ Прискорений пошук усталених режимів електромаґнетних елементів систем керування” екстраполяційний -алгоритм Виконав: студент групи КС-43 Перевірив: Павельчак А.Г. Львів 2008 Мета роботи – вивчити методи прискореного пошуку усталених режимів електромаґнетних елементів систем керування, а також дослідити ці режими для заданої схеми використовуючи числові методи розв’язування систем нелінійних диференціальних рівнянь. Завдання Завдання для лабораторної роботи дають із зазначенням номеру схеми трансформатора та варіанту чисельних значень параметрів схеми і навантаження, які необхідно взяти з лабораторної №2. Варіант 1, Гн-1 2, Гн-1 r1, Ом r2, Ом r3 Ом  3 230 220 9 9 12   Варіант C1, мФ C2, мФ Um, В RН2, Ом RН3, Ом  3 6 0,5 290 15 14   екстраполяційний -алгоритм 2.1. Домашня підготовка до роботи 1. Вивчити метод формування варіаційних рівнянь необхідних для використання моделі чутливостей до початкових умов. 2. Вивчити алгоритм побудови моделі чутливостей до початкових умов. 3. Вивчити екстраполяційний -алгоритм і метод середніх значень для пошуку початкових умов, що задовольняють умову періодичності. 4. Скласти блок-схему розрахунку стаціонарного процесу заданої схеми заданим методом. 5. Згідно блок-схеми написати програму розрахунку стаціонарного процесу заданої схеми алгоритмічною мовою С. 2.2. Робота в лабораторії 1. Ввести в комп’ютер програму, написану мовою С згідно отриманим завданням. 2. Відлагодити програму. При необхідності скоригувати блок-схему алгоритму та програму у відповідності з виявленими логічними та синтаксичними помилками. 3. Результати розрахунку стаціонарного процесу записати до текстового файлу у вигляді стовпців t, i1, i2, i3, uC1, uC2, uC3. 4. Використовуючи програму GRAFER нарисувати залежності . Можна суміщати декілька змінних однакової розмірності на одному графіку, якщо це дозволяє масштаб. 5. Остаточні версії блок-схеми, програми та отримані результати занести у звіт з лабораторної роботи. 6. Здати звіт з лабораторної роботи. Блок-схема     Список ідентифікаторів констант, змінних, процедур і функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення. X_diy,Y_diy – матриці для зберігання дійсних обчислень напруг і струмів; Xy, Yx – матриці для зберігання проміжних обчислень струмів і напруг; K – поточний час; OBN(t) – фунція яка обовлює тимчасові дані проміжних матриць B, Yx на дійсні; Prurist(Dx,Dy) – фунція яка додає до даних матриць B, Yx приріст; void Obnov_Matrix(fi) – формує матриці B, Yx виходячи з поточних струмів, напруг… gaus – функція яка реалізує матод Гауса fii – функція яка повертає обернене диференціальній індуктивності трансформатора, яку визначаємо за кривою намаґнечення або  e[12][12][5] – матриця яка реалізує е-алгоритм Текст програми Форма  Програма #include <vcl.h> #include <math.h> #include <dstring.h> #include <stdio.h> #include <windows.h> #include <string.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; double x1, x2,y1,y2,m2,h,start,finish; double a[4]; double Matrix[4][4]; double Y[4]; double X[4]; double Fai; double Xy[5]; double Yx[5]; double B[5][5]; double Alfa[3]; double RO[3][3]; double i1,m1; double X_diy[5],Y_diy[5]; double B_diy[5][5]; double hX[5]; double k; // double kk; // double C1, C2, Rn1, Rn2, Um; double tstsrt,delt, tn, del_t_fail; void OBN(double t); void Prurist(double Dx, double Dy); //--------------------------------------------------------------------------- void gaus(void) { double V[4][4], C[4][4],P[4]; int i,j,k; double DY; for(i=0;i<4;i++) { P[i]=Y[i]; for (j=0;j<4;j++) V[i][j]=Matrix[i][j]; } for (k=0;k<4;k++) { Y[k]=P[k]/V[k][k]; for (i=k+1; i<4; i++) { P[i]=P[i]-V[i][k]*Y[k]; for (j=k+1; j<4; j++) { C[k][j]=V[k][j]/V[k][k]; V[i][j]=V[i][j]-V[i][k]*C[k][j]; } } } a[3]=Y[3]; for(i=4-2;i>=0;i--) { DY=0; for(j=i+1; j<4; j++) DY+=C[i][j]*a[j]; a[i]=Y[i]-DY; } } //-------------------------------------------------------------------------- double fii(double fi, int i) { int dd=1; if (fi<0) dd=-1; fi=fabs(fi); if (fi<=x1) { if (i==0) return fabs(m1*fi); else return m1; } if((fi<x2)&&(fi>x1)) { if (i==0) return i*(a[0]+a[1]*pow(fi,2)+a[2]*pow(fi,4)+a[3]*pow(fi,6)); else return 2*a[1]*fi+4*a[2]*pow(fi,3)+6*a[3]*pow(fi,5); } if(fi>x2) { if (i==0) return i*(m2*fi+y2-m2*x2); else return m2; } } //--------------------------------------------------------------------------- void Obnov_Matrix(double fi) { double alfast; double d[3]; double alf[4]; double A2[3][3]; double R[3][3]; double ii[3]; double U[3]; int i; alfast=fii(fi,1); // ñòâîðåííÿ ìàòðèö³ àëüôà alf[0]=Alfa[0]; alf[1]=Alfa[1]; alf[2]=Alfa[2]; alf[3]=Alfa[3]; alf[4]=alfast; d[0]=alf[0]/(alf[0]+alf[2]+alf[3]+alf[4]); d[1]=alf[1]/(alf[0]+alf[2]+alf[3]+alf[4]); d[2]=alf[2]/(alf[0]+alf[2]+alf[3]+alf[4]); A2[0][0]=alf[0]*(1-d[0]); A2[0][1]=-alf[0]*d[1]; A2[0][2]=-alf[0]*d[2]; A2[1][0]=-alf[1]*d[0]; A2[1][1]=alf[1]*(1-d[1]); A2[1][2]=-alf[1]*d[2]; A2[2][0]=-alf[2]*d[0]; A2[2][1]=-alf[2]*d[1]; A2[2][2]=alf[2]*(1-d[2]); B[0][0]=d[0]; B[0][1]=d[1]; B[0][2]=d[2]; B[0][3]=0; B[0][4]=0; B[1][0]=A2[1][0]; B[1][1]=A2[1][1]; B[1][2]=A2[1][2]; B[1][3]=0; B[1][4]=0; B[2][0]=A2[2][0]; B[2][1]=A2[2][1]; B[2][2]=A2[2][2]; B[2][3]=0; B[2][4]=0; B[3][0]=0; B[3][1]=0; B[3][2]=0; B[3][3]=1/C1; B[3][4]=0; B[4][0]=0; B[4][1]=0; B[4][2]=0; B[4][3]=0; B[4][4]=1/C2; ii[0]=i1; ii[1]=Xy[1]; ii[2]=Xy[2]; U[0]=Um*sin(2*M_PI*50*kk); U[1]=Xy[3]+Xy[4]; U[2]=0; Yx[0]=U[0]; for (i=0; i<3; i++) Yx[0]-=RO[0][i]*ii[i]; Yx[1]=U[1]; for (i=0; i<3; i++) Yx[1]-=RO[1][i]*ii[i]; Yx[2]=U[2]; for (i=0; i<3; i++) Yx[2]-=RO[2][i]*ii[i]; Yx[3]=ii[1]; Yx[4]=ii[1]-(1/Rn2)*Xy[4]; } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double m1, del,j,y,ys; int i; x2=StrToFloat(Edit5->Text); x1=StrToFloat(Edit1->Text); y1=StrToFloat(Edit2->Text); m2=StrToFloat(Edit3->Text); m1=y1/x1; Y[0]=y1; Y[1]=y2; Y[2]=m1; Y[3]=m2; Matrix[0][0]=1; Matrix[0][1]=pow(x1,2); Matrix[0][2]=pow(x1,4); Matrix[0][3]=pow(x1,6); Matrix[1][0]=1; Matrix[1][1]=pow(x2,2); Matrix[1][2]=pow(x2,4); Matrix[1][3]=pow(x2,6); Matrix[2][0]=0; Matrix[2][1]=2*x1; Matrix[2][2]=4*pow(x1,3); Matrix[2][3]=6*pow(x1,5); Matrix[3][0]=0; Matrix[3][1]=2*x2; Matrix[3][2]=4*pow(x2,3); Matrix[3][3]=6*pow(x2,5); gaus(); Edit6->Text=FloatToStr(a[0]); Edit7->Text=FloatToStr(a[1]); Edit8->Text=FloatToStr(a[2]); Edit12->Text=FloatToStr(a[3]); } //--------------------------------------------------------------------------- double Fh(int nn,double k ) { double K1,K2,K3,K4; int i; Prurist(k,0); K1=0; for (i=0;i<5;i++) K1+=B[nn][i]*Yx[i]; OBN(k); Prurist(k+delt/2,K1*delt/2); K2=0; for (i=0;i<5;i++) K2+=B[nn][i]*Yx[i]; OBN(k); Prurist(k+delt/2,K2*delt/2); K3=0; for (i=0;i<5;i++) K3+=B[nn][i]*Yx[i]; OBN(k); Prurist(k+delt/2,K3*delt/2); K4=0; for (i=0;i<5;i++) K4+=B[nn][i]*Yx[i]; OBN(k); return delt*(K1+2*K2+2*K3+K4)/6; } //--------------------------------------------------------------------------- void Prurist(double Dx, double Dy) // { int i,j; kk=Dx; Obnov_Matrix(Xy[0]); for (i=0;i<5;i++) Yx[i]+= Dy; } //------------------------------------------------------------------------------ void OBN(double t) { int i,j; for (i=0;i<5;i++) { Xy[i]=X_diy[i]; Yx[i]=Y_diy[i]; } kk=t; Obnov_Matrix(Xy[0]); } //------------------------------------------------------------------------------ void __fastcall TForm1::Button2Click(TObject *Sender) { FILE *Fa; if ((Fa = fopen("Ìîäåëþâàííÿ.txt","wt")) == NULL) { ShowMessage("Ôàéë íå âäàºòüñÿ ñòâîðèòè"); return; } int i,j; double k,z; // ñòâîðåííÿ ïî÷àòêîâèõ äàíèõ x2=StrToFloat(Edit5->Text); x1=StrToFloat(Edit1->Text); y1=StrToFloat(Edit2->Text); m2=StrToFloat(Edit3->Text); m1=y1/x1; Alfa[0]=StrToFloat(Edit13->Text); Alfa[1]=StrToFloat(Edit14->Text); Alfa[2]=StrToFloat(Edit15->Text); for (i=0;i<3;i++) for (j=0;j<3;j++) RO[i][j]=0; RO[0][0]=StrToFloat(Edit18->Text); RO[1][1]=StrToFloat(Edit19->Text); RO[2][2]=(StrToFloat(Edit19->Text)+StrToFloat(Edit22->Text)); Um= StrToFloat(Edit25->Text); C1= StrToFloat(Edit16->Text); C2= StrToFloat(Edit17->Text); Rn1= StrToFloat(Edit21->Text); Rn2= StrToFloat(Edit22->Text); // ïðèñâîºííÿ ïî÷àòêîâèõ çíà÷åíü Xy(0) Yx(0) for (i=0; i<5; i++) { for (j=0; j<5; j++) B[i][j]=0; Xy[i]=0; Yx[i]=0; hX[i]=0; } tstsrt=StrToFloat(Edit23->Text); delt=StrToFloat(Edit24->Text); tn=StrToFloat(Edit26->Text); del_t_fail=StrToFloat(Edit27->Text); // Xdiy=Xy Ydiy=Yx for (i=0;i<5;i++) { for (j=0;j<5;j++) B_diy[i][j]=B[i][j]; X_diy[i]=Xy[i]; Y_diy[i]=Yx[i]; } k=tstsrt; Fai=0; z=0; i1=0; fprintf(Fa,"%lf %lf %lf %lf %lf %lf %lf \n",k,Xy[0],i1,Xy[1],Xy[2],Xy[3],Xy[4]); while(k<=tn) { for (i=0;i<5;i++) hX[i]=Fh(i,k); for (i=0;i<5;i++) X_diy[i]+=hX[i]; // êîï³þâàííÿ ìàòðèöü for (i=0;i<5;i++) { for (j=0;j<5;j++) B_diy[i][j]=B[i][j]; Xy[i]=X_diy[i]; Yx[i]=Y_diy[i]; } i1=fii(X_diy[1],0)-Xy[1]-Xy[2]; if (Fai>del_t_fail) { fprintf(Fa,"%lf %lf %lf %lf %lf %lf %lf \n",k,X_diy[0],i1,Xy[1],Xy[2],Xy[3],Xy[4]); Fai=0; } k+=delt; Fai+=delt; } fclose(Fa); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { int j,i,p,g,jj,kk; g=5; double Tper; double pox,sum; double VV[5]; bool cond; p=StrToFloat(Edit10->Text); pox=StrToFloat(Edit9->Text); FILE *Ffa; if ((Ffa = fopen("Àëãîðèòì.txt","wt")) == NULL) { ShowMessage("Ôàéë íå âäàºòüñÿ ñòâîðèòè"); return; } double k,z; Tper=1/50.0; fclose(Ffa); x2=StrToFloat(Edit5->Text); x1=StrToFloat(Edit1->Text); y1=StrToFloat(Edit2->Text); m2=StrToFloat(Edit3->Text); m1=y1/x1; Alfa[0]=StrToFloat(Edit13->Text); Alfa[1]=StrToFloat(Edit14->Text); Alfa[2]=StrToFloat(Edit15->Text); for (i=0;i<3;i++) for (j=0;j<3;j++) RO[i][j]=0; RO[0][0]=StrToFloat(Edit18->Text); RO[1][1]=StrToFloat(Edit19->Text); RO[2][2]=(StrToFloat(Edit19->Text)+StrToFloat(Edit22->Text)); Um= StrToFloat(Edit25->Text); C1= StrToFloat(Edit16->Text); C2= StrToFloat(Edit17->Text); Rn1= StrToFloat(Edit21->Text); Rn2= StrToFloat(Edit22->Text); tstsrt=StrToFloat(Edit23->Text); delt=StrToFloat(Edit24->Text); tn=StrToFloat(Edit26->Text); del_t_fail=StrToFloat(Edit27->Text); for (i=0; i<5; i++) { for (j=0; j<5; j++) B[i][j]=0; Xy[i]=0; Yx[i]=0; hX[i]=0; } // Xdiy=Xy Ydiy=Yx for (i=0;i<5;i++) { for (j=0;j<5;j++) B_diy[i][j]=B[i][j]; X_diy[i]=Xy[i]; Y_diy[i]=Yx[i]; } double e[12][12][5]; for (j=0;j<11+1; j++) for (i=0; i<5; i++) e[j][0][i]=0; do { cond=false; for (j=1; j<p+1; j++) k=0; for (i=0;i<2;i++) { for (i=0;i<5;i++) hX[i]=Fh(i,k); for (i=0;i<5;i++) X_diy[i]+=hX[i]; for (i=0;i<5;i++) { for (j=0;j<5;j++) B_diy[i][j]=B[i][j]; Xy[i]=X_diy[i]; Yx[i]=Y_diy[i]; } i1=fii(X_diy[1],0)-Xy[1]-Xy[2]; k+=delt; } for (i=0;i<5;i++) e[0][1][i]=X_diy[i]; k=0; for (jj=0;jj<2*g;jj++) { Ffa = fopen("Àëãîðèòì.txt","wt"); k=0; while(k<=Tper) { for (i=0;i<5;i++) hX[i]=Fh(i,k); for (i=0;i<5;i++) X_diy[i]+=hX[i]; // êîï³þâàííÿ ìàòðèöü for (i=0;i<5;i++) { for (j=0;j<5;j++) B_diy[i][j]=B[i][j]; Xy[i]=X_diy[i]; Yx[i]=Y_diy[i]; } i1=fii(X_diy[1],0)-Xy[1]-Xy[2]; fprintf(Ffa,"%lf %lf %lf %lf %lf %lf %lf \n",k,X_diy[0],i1,Xy[1],Xy[2],Xy[3],Xy[4]); k+=delt; } fclose(Ffa); // ------------------------------------------ for (i=0;i<5;i++) e[jj+1][1][i]=X_diy[i]; if(j=0) { for (i=0;i<5;i++) cond=cond||(fabs((e[1][1][i]-e[0][1][i])/e[1][1][i])*100>pox); if(!cond) break; } } if(cond) { for(kk=0;k<11;kk++) for(jj=0;jj<11-kk; jj++) { for(i=0;i<5;i++) VV[i]=e[jj+1][kk][i]-e[jj][kk][i]; sum=0; for(i=0;i<5;i++) sum+=VV[i]*VV[i]; for(i=0;i<5;i++) VV[i]=VV[i]/sum; for(i=0;i<5;i++) e[jj][kk+1][i]= e[jj+1][kk-1][i]*VV[i]; } for(i=0;i<5;i++) X_diy[i]=e[0][11][i]; Xy[i]=X_diy[i]; Yx[i]=Y_diy[i]; } } while(cond==true); } Результат виконання програми Графік  Висновок: в даній лабораторній роботі я написав мовою С++ програму, що реалізує метод прискореного пошуку усталених режиму електромаґнетних елементів систем керування, а також дослідив ці режими для заданої схеми використовуючи числові методи розв’язування систем нелінійних диференціальних рівнянь.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!