Міністерство освіти науки молоді та спорту України
Національний університет „ Львівська політехніка “
Кафедра КСА
Курсова робота
з дисципліни
“ КОМП’ЮТЕРНІ МЕТОДИ ДОСЛІДЖЕННЯ
СИСТЕМ КЕРУВАННЯ ”
Варіант 36
Зміст
Теоретичні відомості......………………………………………………………………………...………....3
Завдання.................................................................................................................................................................5
Виведення системи диференціальних рівнянь…………………………………….……...…...6
Блок-схема алгоритму…..…………………………………………………………...………………….…8
Програма………………………………………………………………………………………..........................9
Графічні результати перехідних процесів….……………………………….…………………13
Висновок…………………………………………………………………………………………………….….16
Теоретичні відомості
1. Метод Рунге-Кутта
Метод Рунге-Кутта об’єднує ціле сімейство методів розв’язування диференціальних рівнянь першого порядку. Найбільш часто використовується метод четвертого порядку, який просто називають“методом Рунге-Кутта”.
В методі Рунге-Кутта значенняфункції, як і в методіЕйлера, визначається за формулою
(1)
Якщорозкластифункцію в ряд Тейлора і обмежитись членами до включно, то прирістможназаписати у вигляді
(2)
Замість того, щоб обчислювати члени ряду за формулою (2) в методі Рунге-Кутта використовують наступні формули.
Це метод четвертого порядку точності.
Похибка на кожному кроці має порядок .Таким чином метод Рунге-Кутта забезпечує значно вищу точність ніж метод Ейлера, однак вимагає більшого об’єму обчислень ніж метод Ейлера. Це досить часто дозволяєзбільшитикрок.2. Поліноміальна апроксимація нелінійних характеристик елементів
Метод Кубічних сплайнів
У випадку коли ми хочемо виконати апроксимацію функції заданої у вигляді таблиці, дуже часто використовують сплайн-функції, а найбільш поширеним є кубічний сплайн. Він дозволяє виконати апроксимацію функції за двома точками та значеннями похідних в цих точках. Таким чином, така апроксимація забезпечує проходження функції через задані точки з заданим нахилом. Цей підхід виявися дуже практичним, бо дозволяє розбивати табличну функцію на частини і отримувати неперервну і гладку апроксимацію. Гладкість даної апроксимації забезпечується фіксацією першої похідної в усіх заданих точках апроксимації.
Формула кубічного сплайну має вигляд
(3)
де - кубічний сплайн; - табличні значення функції; - крок сплайну; - значення похідних в точках апроксимації. Наведемо вирази для коефіцієнтів сплайну
(4)
де - табличні значення аргументу. Крок сплайну слід визначати за формулою .
Варіант 36
Метод: Рунге-Кутта (формули г)).
Дані параметрів схеми:
Апроксимація залежності виконується з вибором розрахункової формули
де - кубічний сплайн. Напруга живлення задана на рисунку, де .
Виведення системи диференціальних рівнянь
1. Рівняння струмів і напруг
Перший закон Кірхгофа
1: i1=i2+i3;
2: i3=i4;
Другий закон Кірхгофа
2. Рівняння елементів схеми
За законом Ома:
3. Диференціальні рівняння системи, записані в нормальній формі Коші
4. Диференціальні рівняння системи в нормальній формі Коші в матричній формі
Блок-схема алгоритму
Метод Рунге-Кутта
Програма розв’язування системи диференціальних рівнянь методом Рунге-Кутта з постійним кроком інтегрування
Остаточна версія програми:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Kursova
{
public partial class Form1 : Form
{
const double Umax = 100,
R1 = 23, R2 = 3, R3 = 33,
Lmin = 0.1, Lmax = 1, L2 = 2,
C2 = 2, a = 0.1, T = a,
imin = 1, imax = 2, f = 50, n = 3, h = 2 * a / 500;
double L1 = Lmax;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double t = 0, i1, i3, UC1;
double[] Y = new double[3] { 0, 0, 0 };
double[] Y0 = new double[3] { 0, 0, 0 };
double[] F = new double[3];
double[] K1 = new double[3];
double[] K2 = new double[3];
double[] K3 = new double[3];
double[] K4 = new double[3];
DY(ref F, t, Y);
StreamWriter sw0 = new StreamWriter("datI1.txt");
StreamWriter sw1 = new StreamWriter("datI3.txt");
StreamWriter sw2 = new StreamWriter("datUC1.txt");
StreamWriter sw3 = new StreamWriter("datU1.txt");
do
{
for (int i = 0; i < n; i++)
{
K1[i] = h * F[i];
Y[i] = Y0[i] + K1[i] / 3;
}
t += h / 3.0;
DY(ref F, t, Y);
for (int i = 0; i < n; i++)
{
K2[i] = h * F[i];
Y[i] = Y0[i] - K1[i]/3 + K2[i];
}
t += 2*h/3.0;
DY(ref F, t, Y);
for (int i = 0; i < n; i++)
{
K3[i] = h * F[i];
Y[i] = Y0[i] + K1[i] - K2[i] + K3[i];
}
t += h;
DY(ref F, t, Y);
for (int i = 0; i < n; i++)
{
K4[i] = h * F[i];
Y[i]=Y0[i]+(K1[i]+3*K2[i]+3*K3[i]+K4[i])/8.0;
Y0[i] = Y[i];
}
i1 = Y[0];
i3 = Y[1];
UC1 = Y[2];
sw0.WriteLine(t + " " + i1);
sw1.WriteLine(t + " " + i3);
sw2.WriteLine(t + " " + UC1);
sw3.WriteLine(t + " " + U1);
}
while (t <= (100 * a));
sw0.Close();
sw1.Close();
sw2.Close();
sw3.Close();
}
double U1;
void DY(ref double[] F, double t, double[] Y)
{
U1 = ((t - ((int)(t / a) * a)) * 20 - 10 * a) / a;
double H = imax - imin;
if (Math.Abs(Y[0]) <= imin)
L1 = Lmax;
else if (Math.Abs(Y[0]) > imin && Math.Abs(Y[0]) < imax)
{
double b1 = (2 * (Y[0] - imin) + H) * (imax - Y[0]) * (imax - Y[1]);
double b2 = (2 * (imax - Y[0]) + H) * (Y[0] - imin) * (Y[0] - imin);
double b3 = (Y[0] - imin) * (imax - Y[0]) * (imax - Y[0]);
double b4 = (Y[0] - imax) * (Y[0] - imin) * (Y[0] - imin);
L1 = (b1 * Lmax + b2 * Lmin) / H * H * H;
}
else if (Math.Abs(Y[0]) >= imax)
L1 = Lmin;
F[0] = (-U1 + Y[0] * R1 + R3 * (Y[0] - Y[1])) / L1;
F[1] = (-R3 * (Y[0] - Y[1]) + Y[1] * R1 + Y[2]) / L2;
F[2] = Y[1] / C2;
}
}
}
Графічні результатиперехідних процесів
Графік залежності U1 (t)вхідна величина.
Графік залежності i1 (t)
Графік залежності i3(t)
Графік залежності (t)
Графік залежності (t) вихідна величина
Висновок
В даній курсовій роботі я досліджувала RLC-ланку із заданими параметрами. Виконав апроксимацію нелінійної індуктивності котушки методом кубічних сплайнів , написала програму для розв’язування системи диференційних рівнянь методом Рунге-Кутта, побудувала часові графіки залежностей напруг на конденсаторах, вихідної та вхідної напруги.