Варіант 58.
Метод: Рунге-Кутта (формули г)).
Дані параметрів схеми:
Апроксимація залежності виконується з вибором розрахункової формули

де - кубічний сплайн. Напруга живлення задана на рисунку, де .
ПРИ ВИКОНАННІ КУРСОВОЇ РОБОТИ НЕОБХІДНО ВИКОНАТИ НАСТУПНІ ПУНКТИ:
Записати систему алгебро-диференціальних рівнянь стану наведеної - ланки.
Звести систему диференціальних рівнянь до нормальної форми Коші.
Для схем з нелінійною індуктивністю виконати апроксимацію функції .
Вивести вираз для визначення вихідної напруги якщо вона не визначається безпосередньо з диференціальних рівнянь.
Скласти програму розв’язування системи диференціальних рівнянь вказаним у завданні числовим методом.
Результати розрахунку для напруг на конденсаторах, струмів індуктивностей, вихідної напруги та вхідної напруги записати у текстовий файл з розширенням dat (наприклад rezult.dat). В цьому ж файлі має бути також записаний біжучий час. Числове інтегрування виконати на інтервалі 5 періодів вхідної напруги . Дискретність друку 100 точок на період, а крок інтегрування , де Т – період напруги живлення .
З допомогою програми GRAFER побудувати графіки часових залежностей напруг на конденсаторах, струмів індуктивностей, вихідної напруги та вхідної напруги .
За отриманими результатами зробити висновки.
Теоретичні відомості
Для розв’язування систем звичайних диференціальних рівнянь використовуються методи Рунге-Кутта, які наведені в таблиці:
a)

б)

в)

г)

д)



Поліноміальна апроксимація нелінійних характеристик елементів
На практиці досить часто нелінійні характеристики елементів систем керування визначаються емпіричним шляхом, а тому задаються в табличному вигляді. Це означає, що нелінійні характеристики задаються лише декількома дискретними значеннями аргументу і функції. В подальших розрахунках, при аналізі режимів роботи цих елементів, нам необхідно мати їх неперервні характеристики. Для цього треба підібрати аналітичну функцію, яка б відображала емпіричну залежність. Найбільш зручною на практиці функцією є алгебричний поліном. Щоб його задати необхідно визначити певне число його коефіцієнтів. Широке застосування поліномів обмовлене тим, що від нього легко взяти похідну, обчислити інтеграл і т.д.
Кубічний сплайн
Останнім часом в теорії апроксимації широкого використання набули сплайни (spline-рейка, пружний брусок), які дозволяють в деякій мірі усунути недоліки класичних методів наближення.
Гладкість і гнучкість сплайнів обумовлює їх широке використання в машинній графіці, САПР, а також в математиці. Сплайни мають ряд переваг:
простота реалізації на ЕОМ;
висока точність апроксимації одночасно і функції і її похідних;
в ряді випадків дозволяють отримати наближення з мінімально можливою похибкою на даному класі функцій (порівняно з іншими методами).
У випадку коли ми хочемо виконати апроксимацію функції заданої у вигляді таблиці, дуже часто використовують сплайн-функції, а найбільш поширеним є кубічний сплайн. Він дозволяє виконати апроксимацію функції за двома точками та значеннями похідних в цих точках. Таким чином, така апроксимація забезпечує проходження функції через задані точки з заданим нахилом. Цей підхід виявися дуже практичним, бо дозволяє розбивати табличну функцію на частини і отримувати неперервну і гладку апроксимацію. Гладкість даної апроксимації забезпечується фіксацією першої похідної в усіх заданих точках апроксимації. Невисока степінь полінома спрощує обчислення і зменшує похибку обчислення.
Формула кубічного сплайну має вигляд
(1)
де - кубічний сплайн; - табличні значення функції; - крок сплайну; - значення похідних в точках апроксимації. Наведемо вирази для коефіцієнтів сплайну
(2)
де - табличні значення аргументу. Крок сплайну слід визначати за формулою .
Лістинг програми
#include "stdafx.h"
#include "fstream"
#include "iostream"
#include "math.h"
using namespace std;
const double a=0.1,T=a;
const double C2=2e-3, L2=2, R1=23, R2=3, R3=33;
//параметри кр.магагнечення
const double i_min=1,i_max=2,Lmax=1,Lmin=0.1;
//функція кривої намагнечення -- куб. сплайн
double L_i(double i) //Кубічний сплайн
{
double b1,b2,b3,b4,m1,h;
h=i_max-i_min; m1=Lmax/i_min;
i=fabs(i);
if (i<=i_min)
return Lmax;
if (i>=i_max)
return Lmin;
b1=(2*(i-i_min)+h)*(i_max-i)*(i_max-i);
b2=(2*(i_max-i)+h)*(i-i_min)*(i-i_min);
b3=(i-i_min)*(i_max-i)*(i_max-i);

b4=(i-i_max)*(i-i_min)*(i-i_min);
return (b1*Lmax+b2*Lmin)/h/h/h;
}
double U1_t(double t)//v68 пилка
{
double U1;
while(t>T) t-=T;
U1=t-10;
return U1;
}
void dfdt(double*K,double*X,double t)
{
double i1=X[0],i3=X[1],Uc2=X[2];
K[0]= ( U1_t(t)-i1*(R1+R3)+R3*i3 ) / L_i(i1);
K[1]= ( i1*R3-i3*(R2+R3)-Uc2 ) / L2;
K[2]= i3 / C2;
}
void _tmain(void)
{
fstream file("result.dat",ios_base::out | ios_base::trunc);
double U1,U2;
double X[3]={0,0,0},K1[3],K2[3],K3[3],K4[3],h=0.001,Z[3];
for(double t=0;t<10*T-h/2;t+=h)
{
dfdt(K1,X,t);
for( int i=0; i<3;i++)
Z[i]=X[i]+h/2*K1[i];
dfdt(K2,Z,t+h/2);
for ( int i=0;i<3; i++)
Z[i]=X[i]+h/2*K2[i];
dfdt(K3,Z,t+h/2);
for (int i=0;i<3;i++)
Z[i]=X[i]+h*K3[i];
dfdt(K4,Z,t+h);
for (int i=0;i<3;i++)
X[i]=X[i]+h/6*(K1[i]+2*K2[i]+2*K3[i]+K4[i]);
U1=U1_t(t);
U2=X[2];
file<<t+h<<" "<<X[0]<<" "<<X[1]<<" "<<X[2]<<" "<<U1<<" "<<U2<<endl;
cout<<t+h<<" "<<X[0]<<" "<<X[1]<<" "<<X[2]<<" "<<U1<<" "<<U2<<endl;
}
file.close();
}

Графіки перехідного процесу

Рис. 1. Графік залежності струму І1

Рис. 2. Графік залежності струму І3


Рис. 3. Графік залежності напруги UC2

Рис. 4. Графік вхідної напруги U1


Рис. 5. Графік вихідної напруги U2

Рис. 6. Графік вхідної напруги U1


Рис. 7. Графік вихідної напруги U2
Висновок:
В курсовій роботі було досліджено перехідний процес нелінійної RCL-ланки шляхом комп’ютерного симулювання. Програма аналізу перехідного процесу цього пристрою написана мовою С++. Результати аналізу наведені на графіках (рис. 1-7).