Міністерство освіти і науки,молоді та спорту України
Національний університет “Львівська політехніка”
Прискорений пошук усталених режимів
електромаґнетних елементів систем керування
ЗВІТ
до лабораторної роботи № 3
з курсу “Моделювання процесів
та елементів систем керування”
Мета роботи: вивчити методи прискореного пошуку усталених режимів електромаґнетних елементів систем керування, а також дослідити ці режими для заданої схеми використовуючи числові методи розв’язування систем нелінійних диференціальних рівнянь.
Завдання до лабораторної роботи
Завдання для лабораторної роботи дають із зазначенням номеру схеми трансформатора та варіанту чисельних значень параметрів схеми і навантаження, які необхідно взяти з лабораторної №2.
№ п/пьу журналі
викладача
Метод прискореного пошуку
2
Екстраполяційний є - алгоритм
Теоретичні відомості
Таким чином, маючи систему диференціальних рівнянь, що описує стан пристрою і початкові умови, з допомогою чисельних методів ми можемо розрахувати перехідні процеси що в них протікають.Наступною задачею, яка викликає великий інтерес є аналіз усталених режимів роботи електромаґнетних елементів систем керування. Рівняння динамікидають можливість проводити аналіз перехідних процесів. Інтеґруючи ці рівняння на достатньо великому інтервалі часу, отримаємо усталений режим. Безумовно, що такий підхід має два недоліки: 1) накопичення похибок чисельного інтеґрування; 2) значні затрати машинного часу. Тому розглянемо ряд методів, які позбавлені цих недоліків, дають можливість отримувати розв’язок в часовій області і з наперед заданою точністю збіжності ітераційного процесу. Як і усі ітераційні методи вони дуже зручні при програмуванні.
Алґоритм обчислень екстраполяційним методом
1. Інтеґруємо рівняння, від заданих початкових умов на періодах і визначаємо початкові умови періодичного режиму швидкозатухаючих компонент .
2. Маючи на -й ітерації початкові умови змінних стану (на першій ітерації умови п.1), інтеґруємо рівняння на 6 періодах і породжуємо послідовність
.
3. Визначаємо уточнене значення початкових умов
4. Перевіряємо умову збіжності ітераційного процесу. Якщо вона не виконується, то процес повторюємо з п.2, в противному випадку зупиняємо ітераційний процес.
Текст основної програми
#include"stdafx.h"
#include"math.h"
#include"fstream"
usingnamespace std;
constdouble a1=190, a2=170, a3=170, r1=11, r2=10, r3=16, C1=0.005, R1=10, C2=0.0004, C3=0.0006;
double Um=270, Rn2=13, Rn3=15;
constdouble h=0.0001;
double I_psi(double psi)
{
return psi;
if (psi<= 0.4)
return 2*psi;
if ((psi<1.2)&&(psi>0.4))
return (1.2+(-2.375)*psi+(-0.625)*psi*psi+10.15625*psi*psi*psi);
if (psi>1.2)
return 40*psi+15-40*1.2;
}
double DI_psi (double psi)
{
return 1;
if (psi<=0.4)
return 2;
if ((psi<1.2)&&(psi>0.4))
return (-2.375+(-1.25)*psi+30.46875*psi*psi);
if (psi>1.2)
return 40;
}
void DfDt (double K[5], double X[5], double t)
{
double g1,g2,g3,a_li;
a_li=DI_psi(X[0]);
g1=a1/(a1+a2+a3+a_li);
g2=a2/(a1+a2+a3+a_li);
g3=-a3/(a1+a2+a3+a_li);
double B[5][5]={{g1,g2,g3,0,0},{-a2*g1, a2*(1-g2), -a2*g3, 0, 0},
{a3*g1, a3*g2, a3*(1+g3), 0, 0},{0,0,0,1/(R1*C1),0},{0,0,0,0,1/C2}};
double I[3]={I_psi(X[0])-X[1]+X[2],X[1],X[2]};
double U[3]={X[3],-X[4],-X[4]};
double R[3][3]={{r1,0,0},{0,r2+Rn2,0},{0,0,r3+Rn3}};
double Z[3];
for (int i=0; i<3; i++)
{
Z[i]=0;
for (int j=0; j<3; j++)
{
Z[i]+=R[i][j]*I[j];
} }
for (int i=0; i<3; i++) Z[i]=U[i]-Z[i];
double Dy_dt[5]={Z[0], Z[1], Z[2], (Um*sin(2*3.14159*50*t)-X[3])-R1*I[0], X[2]+X[1]};
for (int i=0; i<5; i++)
{
K[i]=0;
for (int j=0; j<5; j++)
{
K[i]+=B[i][j]*Dy_dt[j];
} } }
void rungecytta (double X[5])
{
fstream file;
file.open("laba3.dat",ios_base::out|ios_base::trunc);
double K1[5],K2[5],K3[5],K4[5],Z[5];
for (double t=0;t<0.02;t+=h)
{
DfDt (K1,X,t);
for (int i=0;i<5;i++) Z[i]=X[i]+h/2*K1[i];
DfDt (K2,Z,t+h/2);
for (int i=0;i<5;i++) Z[i]=X[i]+h/2*K2[i];
DfDt (K3,Z,t+h/2);
for (int i=0;i<5;i++) Z[i]=X[i]+h*K3[i];
DfDt (K4,Z,t+h);
for (int i=0;i<5;i++) X[i]=X[i]+h/6*(K1[i]+2*K2[i]+2*K3[i]+K4[i]);
file<<t<<" "<<X[0]<<" "<<X[1]<<" "<<X[2]<<" "<<X[3]<<" "<<X[4]<<endl;
}
file.close();
}
void _tmain(int argc, _TCHAR* argv[])
{
constint m=5,q=5,n=11,p=2;
double X[5]={0,0,0,0,0},e[12][12][5],Eps=0.0001, V[5], sum;
bool cond;
for (int j=0;j<=n;j++)
for(int i=0;i<m;i++)
e[j][0][i]=0;
do
{
cond=false;
for (int j=1;j<=p;j++)
rungecytta (X);
for(int i=0;i<m;i++)
e[0][1][i]=X[i];
for (int j=0;j<10;j++)
{
rungecytta (X);
for(int i=0;i<=m;i++)
e[j+1][1][i]=X[i];
if(j==0)
{
for(int i=0;i<m-1;i++)
cond=cond||( fabs((e[1][1][i]-e[0][1][i])/e[1][1][i])*100>Eps);
if (cond==false) break;
} }
if (cond)
{
for (int k=1;k<=n-1;k++)
for (int j=0;j<=n-k-1;j++)
{
for (int i=0;i<=m-1;i++)
V[i]=e[j+1][k][i]-e[j][k][i];
sum=0;
for(int i=0;i<=m-1;i++)
sum=sum+V[i]*V[i];
for (int i=0;i<=m-1;i++)
V[i]=V[i]/sum;
for(int i=0;i<=m-1;i++)
e[j][k+1][i]=e[j+1][k-1][i]+V[i];
}
for (int i=0;i<=m-1;i++)
X[i]=e[0][n][i];
} }
while (cond); }
Результат виконання програми
//
//
/
Висновок: під час виконання даної лабораторної роботи я вивчив методи прискореного пошуку усталених режимів електромаґнетних елементів систем керування, а також дослідив ці режими для заданої схеми використовуючи числові методи розв’язування систем нелінійних диференціальних рівнянь.