МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Курсова робота
з курсу:
" Комп'ютерні методи дослідження інформаційних процесів і систем "
на тему:
"Автоматичний потенціометр з магнітним підсилювачем "
Тема 2, варіант 3
ЛЬВІВ 2016
Зміст
1. Постановка задачі………………………………………………………………3
2. Перетворення рівнянь………………………………………………………….4
3. Теоретичні відомості…………………………………………………………...5
3.1.Вступ…………………………………………………………………….5
3.2. Метод Рунге-Кутта 4-го порядку з автоматичною зміною кроку…9
3.3.Модифікований Метод Ейлера…………………………………….....11
4. Лістинг програм……………………………………………………………….13
4.1 Метод Рунге-Кутта 4-го порядку з автоматичною зміною кроку....13
4.2 Модифікований Метод Ейлера…………………………………….....15
5. Результати виконання програми……………………………………………...18
5.1 Метод Рунге-Кутта 4-го порядку з автоматичною зміною кроку…18
5.2 Модифікований Метод Ейлера…………………………………….....22
6.Графіки………………………………………………………………………….24
7.Висновки………………………………………………………………………..25
8. Список використаної літератури……………………………………………..26
Тема № 2
АВТОМАТИЧНИЙ ПОТЕНЦІОМЕТР З МАГНІТНИМ ПІДСИЛЮВАЧЕМ
Схема:
Рівняння ланок :
вимірювальна схема
електронний підсилювач
магнітний підсилювач
двигун
редуктор
1. Звести систему алгебро-диференціальних рівнянь до системи трьох диференціальних рівнянь першого порядку, представити її у нормальній формі та розв’язати цю систему вказаними методами. Початкові умови - =1 радіан, решта початкових умов – нульові. Числові значення сталих параметрів, заданих в таблиці, слід зобразити з допомогою одиниць системи СІ. Коефіцієнт підсилення електронного підсилювача вибирається експериментально.
2. Побудувати графік зміни величини
Перетворення рівнянь
T + e2 = Kм(вх — вих)
Розв’ язуємо відносно
= (вх — вих) —
Це перше рівняння системи
У рівняння (3) підставляємо (2) та (4), при цьому з рівняння (4) знаходимо
ω = = i =
I = CuU — C ω ;
I = Cu· кпe2 — C ω· ω
I=Iд+ Iн/ i2
3. Теоретичні відомості
3.1.Вступ
Диференціальне рівняння (ДР), що містить лише одну незалежну змінну і похідні за нею, називають звичайними (ДР). ДР, що містить декілька незалежних змінних і похідні за ними, називають рівняння в частинних похідних.
Порядком ДР називається найвищий порядок похідної (або диференціалу), який входить в рівняння. Звичайне ДР (ЗДР) -го порядку в загальному випадку має незалежну змінну, невідому функцію та її похідні до -го порядку включно:
(1)
- незалежна змінна;
- невідома функція (залежна змінна);
- похідні цієї функції.
Диференціальне рівняння -го порядку, розв’язане відносно старшої похідної, може бути записано у вигляді:
(2)
Щоб розв’язати ЗДР, необхідно мати значення залежної змінної та (або) її похідних при деяких значення незалежної змінної.
Якщо ці значення задані при одному значенні незалежної змінної - така задача називається задачею з початковими умовами або задачею Коші, а при або більше значеннях незалежної змінної - задача називається крайовою.
Значення залежної змінної та її похідних називаються додатковими умовами, котрі в задачі Коші називаються початковими, а в крайовій задачі - граничними.
Система звичайних диференціальних рівнянь
Система рівнянь першого порядку з невідомими функціями має вигляд:
(1)
де - незалежна змінна; - невідомі функції. Це система в нормальній формі, або нормальна система.
Розв’язком системи називається будь-яка система функцій , що має похідні першого порядку і перетворює рівняння системи в тотожності по .
Приклад. Розв’язком системи
з початковими умовами є функції
Справді
.
Підставляємо вирази в систему рівнянь, одержимо два тотожних рівняння
Рівняння -ого порядку
завжди можна звести до системи рівнянь першого порядку. З цією метою позначимо шукану функцію через і приймемо за нові невідомі.
Складаємо систему диференціальних рівнянь для функцій .
Маємо
Тому для функцій одержимо наступну нормальну систему диференціальних рівнянь:
причому
Таким чином, задача Коші для ЗДР -порядку з відповідними початковими умовами може бути зведена до розв’язку задачі Коші для системи диференціальних рівнянь першого порядку.
Праві частини рівнянь цієї системи в програмі, яка реалізує який -небудь чисельний метод, записуються у вигляді підпрограми. Наприклад, для системи ЗДР.
Підпрограма буде мати наступний вигляд:
Тобто:
функція
Алгоритм реалізації методу Рунге-Кутта заключається в циклічних обчисленнях значень функцій на кожному кроці по наступних формулах:
Або при іншій формі представлення методу:
3.2 Метод Рунге-Кутта 4-го порядку з автоматичною зміною кроку
Метод Рунге – Кутта четвертого порядку
В методі Рунге-Кутта значення функції , як і в методі Ейлера, визначається за формулою
Якщо розкласти функцію в ряд Тейлора і обмежитись членами до включно, то приріст можна записати у вигляді
Замість того, щоб обчислювати члени ряду за формулою (10) в методі Рунге-Кутта використовують наступні формули.
Похибка на кожному кроці має порядок . Таким чином метод Рунге-Кутта забезпечує значно вищу точність ніж метод Ейлера, однак вимагає більшого об’єму обчислень.
Деколи зустрічається інша форма представлення методу Рунге-Кутта 4-го порядку точності.
Методи з автоматичною зміною кроку
Застосовуються в тому випадку, якщо розв’язок потрібно одержати із заданою точністю. При високій точності (похибка ) автоматична зміна кроку забезпечує зменшення загального числа кроків в декілька разів (особливо при розв’язках у вигляді кривих, що сильно відрізняються крутизною).
Метод Рунге-Кутта з автоматичною зміною кроку
Після обчислення з кроком всі обчислення виконуються повторно з кроком . Після цього порівнюються результати, отримані в точці хn+1 з кроком і . Якщо модуль різниці менший , то обчислення продовжуються з кроком , в іншому випадку крок зменшують. Якщо нерівність дуже сильна, то крок збільшують.
Маємо
- значення незалежної змінної в точці
- значення функції в точці
- значення функції в точці , обчислене з кроком
- значення функції в точці , обчислене з кроком
- значення функції , обчислене з кроком
1) Якщо
обчислення повторюються з кроком і т.д., доки не виконається умова .
2) Якщо виконується ця умова, то можливі два варіанти, в залежності від значення K, де K – ознака поділу кроку.
Початкове значенняі залишається таким після першого поділу кроку на два. Надалі, якщо крок ділиться, то K приймає значення одиниці.
а) Якщо , то навіть коли виконалась умова , крок не змінюється, тобто лишається тим самим (обчислення далі проводяться з попереднім кроком).
б) Якщо і виконалась умова , тоді .
В обох випадках а) і б) результат виводиться на друк.
3.2 Модифікований Метод Ейлера
З метою підвищення точності методу Ейлера використовують різні його модифікації.
Суть удосконаленого методу Ейлера полягає в використанні ітераційної формули виду:
, (9.16)
де - значення аргументу х в точці, а - значення функції в точці.
Розглянемо диференціальне рівняння
(9.17)
з початковою умовою.
Потрібно знайти розв’язок рівняння (9.13) на відрізку .
Розіб'ємо відрізок на n рівних частин точками, де – крок інтегрування
Алгоритм методу складається з:
1. визначення похідної в точці :
2. змінна х за формулою:
3. визначення значення при
4. визначення похідної в точці (,)
5. використовуємо отримане значення для визначення за формулою:
,
6. змінюємо
7. повторюємо всі кроки алгоритму, починаючи з першого.
Графічна інтерпретація методу представлена на рисунку 9.7.
Рисунок 9.7 – Графічна інтерпретація удосконаленого методу Ейлера
Зауваження. Оцінка похибки в точці xі може бути отримана за допомогою "подвійного прорахунку": розрахунок повторюють із кроком h/2 похибка більш точного значення (при кроці h/2) оцінюють приблизно в такий спосіб:
(9.18)
де у(х) - точний розв’язок диференціального рівняння. Удосконалений метод Ейлера є більш точним у порівнянні з методом Ейлера та відноситься до методів 3-го порядку точності.
4. Лістинг програм
4.1. Метод Рунге-Кутта 4-го порядку з автоматичною зміною кроку
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication77
{
class Program
{
static void Main(string[] args)
{
RK u = new RK();
u.obchysl();
}
}
class RK
{
StreamWriter w = new StreamWriter("output.txt");
const int n = 3;
const double
Qm = 5,
Up = 0.04,
Cu = 0.00007,
Cw = 0.00002,
Id = 0.0000002,
In = 0.00005,
Km = 30,
T = 0.05,
ii = 40.0;
const double I = Id + In / (ii * ii);
double E = 0.001, a, t, Kp = 1000;
double[] f = new double[n];
double[] y = new double[n];
int i;
public void Func()
{
f[0] = ((Km * Up * (1 - y[1])) / (Qm * T)) - (y[0] / T);
f[1] = (y[2] / ii);
f[2] = ((Kp * Cu * y[0]) - (Cw * y[2])) / I;
}
public void MetodRK(double h)
{
double[,] K = new double[4, n];
double[] z = new double[n];
Func();
for (i = 0; i < n; i++)
{
z[i] = y[i];
K[0, i] = f[i];
y[i] = z[i] + (h / 2) * K[0, i];
}
t += h / 2;
Func();
for (i = 0; i < n; i++)
{
K[1, i] = f[i];
y[i] = z[i] + (h / 2) * K[1, i];
}
Func();
for (i = 0; i < n; i++)
{
K[2, i] = f[i];
y[i] = z[i] + h * K[2, i];
}
t += h / 2;
Func();
for (i = 0; i < n; i++)
{
K[3, i] = f[i];
y[i] = z[i] + (h / 6) * (K[0, i] + 2 * K[1, i] + 2 * K[2, i] + K[3, i]);
}
}
public void obchysl()
{
double[] y_ = new double[n];
double[] Y1 = new double[n];
double[] Y2 = new double[n];
double[] YN = new double[n];
double b, delta;
int v, k = 0;
a = t = 0;
b = 1.0;
y[0] = 0;
y[1] = 0;
y[2] = 0;
do
{
a = t;
delta = 0;
for (i = 0; i < n; i++)
y_[i] = y[i];
if (k == 0)
Console.WriteLine("{0:F6}\t\t{1:F6}", t, y[1]);
w.WriteLine("{0:F6}\t\t{1:F6}", t, y[1]);
MetodRK(H);
for (i = 0; i < n; i++)
{
Y1[i] = y[i];
y[i] = y_[i];
}
t = a;
MetodRK(H / 2);
for (i = 0; i < n; i++)
Y2[i] = y[i];
MetodRK(H / 2);
for (i = 0; i < n; i++)
{
YN[i] = y[i];
if (Math.Abs(YN[i] - Y1[i]) > delta)
delta = Math.Abs(YN[i] - Y1[i]);
}
v = 0;
int kk = 0;
while (delta > E)
{
if (kk != 0)
v = 1;
delta = 0;
H = H / 2;
for (i = 0; i < n; i++)
{
y[i] = y_[i];
Y1[i] = Y2[i];
}
t = a;
MetodRK(H / 2);
for (i = 0; i < n; i++)
Y2[i] = y[i];
MetodRK(H / 2);
for (i = 0; i < n; i++)
{
YN[i] = y[i];
if (Math.Abs(YN[i] - Y1[i]) > delta)
delta = Math.Abs(YN[i] - Y1[i]);
}
kk++;
}
for (i = 0; i < n; i++)
y[i] = YN[i];
Console.WriteLine("{0:F6}\t\t{1:F6}", t, y[1]);
w.WriteLine("{0:F6}\t\t{1:F6}", t, y[1]);
if ((delta < E) && (v == 0))
H *= 2;
k++;
}
while (t < b + H / 2);
Console.ReadKey();
}
} }
4.2. Модифікований Метод Ейлера
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication6
{
class Program
{
static void Main()
{
Exe o = new Exe();
o.vvid();
o.count();
Console.ReadKey();
}
}
class Exe
{
const int n = 3;
const double
Qm = 5,
Up = 0.04,
Cu = 0.00007,
Cw = 0.00002,
Id = 0.0000002,
In = 0.00005,
Km = 30,
T = 0.05,
ii = 40;
const double I = Id + In / (ii * ii);
double Kp = 1000, Qv = 1;
int i;
public double a, b, t;
public double h;
Double[] f1 = new Double[n];
Double[] f2 = new Double[n];
Double[] y = new Double[n];
Double[] yn1 = new Double[n];
Double[] yn2 = new Double[n];
public void vvid()
{
Console.Write("\n\nВведiть межi: \n");
Console.Write("a = ");
a = t = Convert.ToDouble(Console.ReadLine());
Console.Write("b = ");
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введiть похибку");
Console.Write("h = ");
h = Convert.ToDouble(Console.ReadLine());
}
public void F(Double[] f, Double[] Y)
{
try
{
f[0] = ((Km * Up * (1 - y[1])) / (Qm * T)) - (y[0] / T);
f[1] = (y[2] / ii);
f[2] = ((Kp * Cu * y[0]) - (Cw * y[2])) / I;
}
catch (IndexOutOfRangeException ex)
{Console.WriteLine("{0} \nЗнайдено Виняток!!!", ex); };
}
public void count()
{
a = t = 0;
f1[0] = 0; f1[1] = 0; f1[2] = 0; //f1[3] = 0;
f2[0] = 0; f2[1] = 0; f2[2] = 0; //f2[3] = 0;
y[0] = 0; y[1] = 0; y[2] = 0; //y[3] = 0;
StreamWriter w = new StreamWriter("output.txt");
do
{
F(f1, y);
for (i = 0; i < n; i++)
yn1[i] = y[i] + h * f1[i];
F(f2, yn1);
for (i = 0; i < n; i++)
{
yn2[i] = y[i] + 0.5 * h * (f1[i] + f2[i]);
y[i] = yn2[i];
}
if (Qv % 10 == 0)
{
Console.WriteLine("{0}\t{1}", t, yn2[1]);
w.WriteLine("{0}\t{1}\n", t, yn2[1]);
}
t += h;
Qv++;
} while ((b + h / 2) > t);
w.Close();
} } }
5.Результати виконання програми
5.1. Метод Рунге-Кутта 4-го порядку з автоматичною зміною кроку
5.2. Модифікований Метод Ейлера
6.Графіки
Графік, отриманий методом Рунге-Кутта 4-го порядку
Графік, отриманий модифікованим методом Ейлера
7. Висновок
В даній роботі розглянуто застосування методу Рунге-Кутта 4-ого порядку з автоматичною зміною кроку та модифікованого методу Ейлера з автоматичною зміною кроку для дослідження системи статичного слідкування за швидкістю задаючого вала. Коефіцієнт підсилення електронного підсилювача досліджено експериментально, і виявлено що він становить 1000. Можна зробити висновок, що методи забезпечують майже однакову точність, однак Рунге-Кутта 4-ого порядку вимагає більшого об’єму обчислень, а завдяки автоматичній змінні кроку можна досягти зменшення загального числа кроків в декілька разів. Графіки уточнень побудовані в середовищі Exel 2013.
8.Список використаної літератури
Вычислительные методы алгебры и оценивания: учебное пособие / И.В. Семушин. — Ульяновск: УлГТУ, 2011. — 366 c. ISBN 978-5-9795-0902-0
Панчук В. І. Навчальна програма дисципліни “Чисельні методи математичної фізики” (для бакалаврів). — К.: ДП «Вид. дім «Персонал», 2010. — 15 с.
С.Ромашко Конспект лекцій з дисципліни “Комп’ютерні мережі і телекомунікації”
Методичні вказівки до вивч. дисципліни та викон. лабор. і контр. робіт для студ. напряму підготовки 6.050101 «Комп`ютерні науки» ден. та заочн. форм навчання
Уклад.: О.А Хлобистова, Н.Н. Бровченко – К.: НУХТ, 2009 – 38с