- •Модуль 1 (Лекції №1-3) Розв’язання нелінійних алгебраїчних і трансцендентних рівнянь Лекція 1
- •1. Методи розв’язання нелінійних рівнянь.
- •Одне рівняння
- •2. Теоретичні положення.
- •3. Чисельні методи розв’язання нелінійних рівнянь
- •3.1 Метод половинного ділення.
- •Лекція 2
- •3.2 Метод пропорційних частин (хорд)
- •3.3 Метод Рибакова
- •Лекція 3
- •3.4 Метод Ньютона (дотичних)
- •3.5 Метод січних
- •Лекція 4-5. Початкова обробка даних
- •Лекція 6-7 Інтерполяція функцій Постановка задачі інтерполяції
- •Поліноміальна інтерполяція
- •Багатоінтервальна інтерполяція
- •Інтерполяція для випадку рівновіддалених вузлів
- •Інтерполяційні формули Ньютона
- •Інтерполяційні формули Гаусса
- •Перша інтерполяційна формула Гауса:
- •Друга інтерполяційна формула Гауса:
- •Інтерполяційна формула Стірлінга
- •Інтерполяційна формула Бесселя
- •Інтерполяція для випадку довільних вузлів. Інтерполяційна формула Лагранжа
- •Лінійних алгебраїчних рівнянь.
- •Метод гауса.
- •Метод Рунге-Кута
- •Метод а.Н. Крилова послідовних наближень
- •Метод Адамса
- •2. Розробка програми
- •2.1 Обчислювальна схема методу Рунге-Кута:
- •2.2 Обчислювальна схема методу Адамса:
- •2.3 Обчислювальна схема методу Крилова:
- •2.4 Структура програми
- •2.5 Опис роботи програми
- •2.6 Опис інтерфейсу користувача
- •2.7 Приклад роботи програми
- •Список літератури:
- •Лекція 14-15.Чисельне інтегрування функцій
- •1. Вступ. Загальні відомості про чисельні інтегрування.
- •2. Огляд методів чисельного інтегрування.
- •2.1 Метод прямокутників.
- •2.2 Метод трапецій
- •1.1.2 Метод Сімпсона (парабол)
- •1.1.3Метод Ньютона-Котеса.
- •2. Функції обчислення інтегралів у вигляді підпрограм.
- •Обчислення інтеграла за допомогою методу трапецій та парабол
- •Лекція 17. Системи диференціальних рівнянь.
- •Дифференціальні рівняння вищого порядку
- •Метод прогону.
- •Проекційні методи (на прикладі методу Гальоркіна).
- •Метод прогону.
- •Проекційні методи (на прикладі методу Гальоркіна).
2. Огляд методів чисельного інтегрування.
При чисельному інтегруванні використовуються такі формули:
m
S ci f i ,
i=1
де m - кількість відрізків інтегрування;
ci – коефіцієнт, який визначається формулою чисельного інтегрування;
f i = f(x i)= yi – значення функції в точці i (i=0,1,2.. m).
2.1 Метод прямокутників.
Найпростіший прийом чисельного інтегрування, при якому функція y = f(x) замінюється інтерполяційним багаточленом нульового порядку. Для підвищення точності інтегрування відрізок [a, b] розбивається на m частин і формула прямокутника застосовується до кожного відрізку.
Площа прямокутника для елементарного відрізку дорівнює:
zi= f(x i) (x i+1 - x i) = yi x i
Для рівномірно розбитих відрізків маємо площу прямокутника: zi = h f(x i),
де h = x i =(x i+1 - x i)= (b-a) /m.
Сума площ всіх прямокутників дає формулу чисельного інтегрування (формулу прямокутників):
m-1
S h yi ,
i=0
Графічно метод можна представити у такому вигляді(мал.2):
y
x
Мал. 2
Точність даного методу залежить від способу формування прямокутників. За сторону прямокутника ми брали значенням функції в точці a, a+h і так до а+(m-1)*h. Отримали формулу”лівих” прямокутників. Дещо інший результат буде, якщо брати значенням функції в точці a+h. a+2h і так до b. Між цими значеннями буде розходження, що залежить від виду функції, що інтегрується. Можна також взяти значення функції посередині відрізка: f(x i) = f(a+h(i-0,5)). Отримаємо метод ”середніх” прямокутників. Через низьку точність ці методи застосовуються рідко.
2.2 Метод трапецій
Метод трапецій полягає в лінійній апроксимації f(x) на відрізку [a, b]. Для зменшення похибки відрізок [a, b] розбивається на m частин довжини h = (b-a)/m.
З урахуванням складання суміжних ординат усередині відрізка [a, b] узагальнена формула методу трапецій має вигляд: S h(y0/2 + y1 + y2+… yi … + ym-1 + ym/2) –R,
де похибка R = h2(b-a)f’’(z)/12
Тут f’’(z) максимальне значення другої похідної підінтегральної функції на відрізку [a, b].
Графічне представлення даного методу можна зобразити на малюнку3:
y
x
Мал. 3
Слід зазначити, що результат інтегрування по методу трапецій буде ідентичним щодо середнього арифметичного значення інтегрування двома способами методу прямокутників.
1.1.2 Метод Сімпсона (парабол)
Метод Сімпсона (парабол) - окремий випадок методу Ньютона - Котеса при n = 2. При розбивці відрізка [a, b] на m рівних відрізків одержимо формулу Сімпсона:
a
S = f(x)dx [f(a) + 4 f(a+h) + 2 f(a+2h)+ 4 f(a+3h)+ 4 f(b-h)+ f(b)]h/3 – mh5fiv(z)
b
Вираз для залишкового члена показує, що формула Сімпсона точна, навіть якщо f(x) поліном третьої степені.
Графічне представлення елементарної ділянки інтегрування можна зобразити таким чином (мал.4):
x
Мал. 4
1.1.3Метод Ньютона-Котеса.
Метод Ньютона-Котеса заснований на інтерполяції f(x) у n проміжках поліномом Логранжа. У загальному випадку f(x) повинна задаватися (n+1) ординатами. Формули інтегрування точні, якщо f(x) - багаточлен n-ої степеня. При n = 1 отримуємо метод трапецій.
Опис алгоритму програми
1. Головна програма.
Розглянемо алгоритм головної програми.
Тому що в головній програмі в основному описуються екземпляри керуючих класів і організований головний цикл звертання до цих структур, а також через відсутність складних розгалужень представимо даний алгоритм на псевдокоді.
Вхідні дані: Функція, задана в аналітичному вигляді, межі інтегрування, кількість кроків інтегрування.
Вихідні дані: значення інтегралу, обчислене методами
Ньютона-Котеса
Прямокутників
Трапецій
Парабол (Симпсона)
Усереднене значення інтеграла по всіх методах
Крок 0. Початок
Крок 1. Підключити модулі з керуючими структурами і функціями інтегрування
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include "integral.cpp"
#include "E:/modul/graph.cpp"
#include "E:/modul/mouse.cpp"
#include "E:/modul/abstr.cpp"
#include "E:/modul/baseinp.cpp"
#include "E:/modul/check.cpp"
#include "E:/modul/button.cpp"
#include "E:/modul/numedit.cpp"
#include "E:/modul/label.cpp"
#include "E:/modul/edit.cpp"
void main(){
clrscr();
Крок 2. Ініціалізувати графику і зафарбувати фон кольором №8
graphinit(8);
Крок 3.Ініціалізувати мишку
InitMouse();
Крок 4. Висвітити покажчик мишки
ShowMouse();
Крок 5. Оголосити об'єкти для відображення функції, яку інтегруємо
//Мітка для відображення виду функції
ClLabel funk(230,57,"Інтеграл функції f(x)=",15);
//Поле для введення самої функції
ClEdit FuncOfText(230,50,150,20,"x");
Крок 6. Оголосити об'єкти для введення меж інтегрування
//Поле введення початку проміжку інтегрування
ClLabel from(230,100,"Межі інтегрування: від ",11);
ClNumEdit a(230,100,70,20,0);
//Поле введення кінця проміжку інтегрування
ClLabel to(330,100,"до ",11);
ClNumEdit b(330,100,70,20,5);
Крок 7. Оголосити об'єкти для введення кількості кроків інтегрування
//Поле введення кількості кроків інтегрування
ClLabel shagi(270,150,"Кількість кроків інтегрування ",11);
ClNumEdit sh(280,150,100,25,100);
Крок 8. Оголосити об'єкти для виводу результатів інтегрування
//Поля виводу результатів
ClLabel rez(380,216,"Результат інтегрування: ",14);
ClLabel oldInt(500,220,"Попередні обчислення: ",10,1,1);
ClLabel sredn(400,10,"Середнє значення по всіх методах
",10);
ClNumEdit Sredn(400,10,200,25,0);
Крок 8.1. Оголосити об'єкти для виводу результатів методом Ньютона-Котеса
ClLabel kotesa(170,300,"Метод Ньютона-Котеса ",10);
ClNumEdit Kotesa(170,290,200,25,0);
ClNumEdit oldKotesa(400,290,200,25,0);
ClCheck sKotesa(380,295,0);
Крок 8.2. Оголосити об'єкти для виводу результатів методом прямокутників
ClLabel pryam(176,330,"Метод прямокутників ",10);
ClNumEdit Pryam(170,320,200,25,0);
ClNumEdit oldPryam(400,320,200,25,0);
ClCheck sPryam(380,325,0);
Крок 8.3. Оголосити об'єкти для виводу результатів методом трапецій
ClLabel trap(176,360,"Метод трапецій ",10);
ClNumEdit Trap(170,350,200,25,0);
ClNumEdit oldTrap(400,350,200,25,0);
ClCheck sTrap(380,355,0);
Крок 8.4. Оголосити об'єкти для виводу результатів методом Сімпсона
ClLabel parabol(176,390,"Метод парабол ",10);
ClNumEdit Parabol(170,380,200,25,0);
ClNumEdit oldParabol(400,380,200,25,0);
ClCheck sParabol(380,385,0);
Крок 9. Оголосити кнопку для визначення моменту необхідності обчислення інтеграла
//Кнопки для визначення інтеграла різними методами
ClButton start(400,150,100,25,"Порахувати");
Крок 10. Оголосити кнопку для виходу з програми
ClButton exit(10,10,50,20,"<--");
Крок 11. Визначити нескінченний цикл для забезпечення постійного запросу до всіх керуючих об'єктів програми for(;;){ Крок 11.1. Якщо натиснута кнопка виходу, то вийти з програми
if (exit.zapros()) break;
Крок 11.2. Якщо натиснута кнопка «Порахувати інтеграл», то обчислити інтеграл всіма методами і записати результати у відповідні поля виводу значень
if (start.zapros()){
}
Крок 11.2. Якщо скинутий прапорець напроти поля виводу значення інтегралу методом Ньютона-Котеса, то зберегти попереднє значення інтегралу й обчислити його нове значення по цьому методу
if (sKotesa.
GetState()==0){
oldKotesa.SetNum(Kotesa.Num);
Kotesa.SetNum(metod_Nyutona_Kotesa(FuncOfText.text, a.Num, b.Num, sh.Num));
}
Крок 11.3. Якщо скинутий прапорець напроти поля виводу значення інтеграла методом прямокутників, то зберегти попереднє значення інтегралу й обчислити його нове значення цим методом.
if (sPryam.GetState()==0){
oldPryam.SetNum(Pryam.Num);
Pryam.SetNum(metod_Pryam
(FuncOfText.text, a.Num, b.Num, sh.Num));
}
Крок 11.4. Якщо скинутий прапорець напроти поля виводу значення інтеграла за методом трапецій, то зберегти попереднє значення інтеграла й обчислити його нове значення цим методом.
if (sTrap.GetState()==0){
oldTrap.SetNum(Trap.Num);
Trap.SetNum
(metod_Trap(FuncOfText.text, a.Num, b.Num, sh.Num));
}
Крок 11.5. Якщо скинутий прапорець навпроти поля виводу значення інтеграла за методом парабол, то зберегти попереднє значення інтеграла й обчислити його нове значення цим методом.
if (sParabol.GetState()==0){
oldParabol.SetNum(Parabol.Num);
Parabol.SetNum(metod_Parabol(FuncOfText.text, a.Num,
b.Num, sh.Num));
Крок 11.6. Обчислити усереднене значення інтеграла
//Обчислення усередненого значення
Sredn.SetNum((Parabol.Num + Trap.Num + Uedlya.Num +
Bode.Num + Kotesa.Num + Chebisheva.Num + Gaussa.Num)/7);
};
Крок 11.7. Зробити запит на зміну стану об’єктів уведення границь інтегрування і кількості кроків.
a.zapros();
b.zapros();
sh.zapros();
Крок 11.8. Зробити запит на зміни стану прапорців допустимості обчислення інтеграла.
sBode.zapros();
sUedlya.zapros();
sKotesa.zapros();
sPryam.zapros();
sTrap.zapros();
sParabol.zapros();
sKotesa.zapros();
}
Крок 11.9. Якщо натиснута клавіша Esc вийти з програми.
if (kbhit()) if (getch()==27) break;
}
Крок 12. Закрити графічний режим.
closegraph();
Крок 13. Кінець.
}