
- •Міністерство освіти і науки україни
- •Розділ 1. Арифметичні основи обчислювальних машин
- •1.1. Позиційні системи числення. Переведення числа з однієї системи числення в іншу
- •1.2. Форма представлення чисел. Кодування чисел
- •1.3. Арифметичні операції над двійковими числами. Машинні одиниці інформації
- •Контрольні питання
- •Завдання
- •Розділ 2. Основи алгоритмізації обчислювальних процесів
- •2.1. Поняття і властивості алгоритму
- •2.2. Засоби представлення алгоритмів
- •2.3. Типи алгоритмічних процесів. Приклади
- •Контрольні питання
- •Завдання
- •3.1. Загальна характеристика програми
- •3.3. Кроки для створення та виконання програми
- •3.4. Змінні та константи
- •3.5. Директиви препроцесора
- •Контрольні питання
- •Розділ 4. Введення-виведення даних
- •4.1. Об’єкт виведення даних cout
- •4.2. Функція виведення даних printf
- •4.3. Об’єкт введення даних cin
- •4.4. Функція введення даних scanf
- •Контрольні питання
- •5.2. Операції відношення
- •5.3. Логічні операції
- •5.4. Додаткові операції
- •5.5. Порозрядні операції
- •Контрольні питання
- •Завдання Лінійний обчислювальний процес
- •1. Визначити значення функції y
- •2. Геометричні завдання
- •Розгалужений обчислювальний процес
- •1. Визначити значення функції y
- •3. Перевірити, чи міститься точка з заданими координатами усередині заштрихованої області.
- •Розділ 6. Організація циклів
- •6.1. Організація арифметичних циклів з використанням оператору for
- •6.2. Організація ітераційних циклів з передумовою while та післяумовою do...While
- •6.3. Оператори switch та goto
- •Контрольні питання
- •Завдання Арифметичний цикл
- •Вкладені цикли
- •Ітераційний цикл
- •Суміщення розгалуженого та циклічного процесів
- •Розділ 7. Зовнішні пристрої та символьне введення/виведення. Рядкові, числові функції та функції роботи з датою та часом
- •7.1. Загальна концепція та функції символьного введення-виведення
- •7.2. Символьні функції
- •7.3. Рядкові функції
- •7.4. Числові функції
- •7.5. Функції роботи з датою та часом
- •Контрольні питання
- •Завдання
- •Розділ 8. Вказівки, посилання та масиви
- •8.1. Вказівки
- •8.2. Посилання
- •8.3. Одновимірні масиви
- •8.4. Багатовимірні масиви
- •8.5. Символьні масиви
- •Контрольні питання
- •Завдання Одновимірні масиви
- •Двовимірні масиви
- •Розділ 9. Робота з функціями
- •9.1. Засоби створення функцій
- •9.2. Видимість змінних
- •9.3. Параметри функції та передача значень
- •9.4. Передача масивів в якості параметрів функцій
- •9.5. Функції та вказівки
- •9.6. Перевантаження та шаблони функцій
- •Контрольні питання
- •Завдання
- •Розділ 10. Рекурсивне програмування
- •10.1. Основні поняття рекурсії. Визначення факторіалу числа
- •10.2. Приклади рекурсій
- •Контрольні питання
- •Розділ 11. Робота з файлами
- •11.1. Робота з текстовими та бінарними файлами
- •Можливі режими доступу
- •11.2. Довільний доступ у файлах
- •11.3. Файли потокового введення/виведення з використанням структури file.
- •Контрольні питання
- •Завдання
- •Розділ 12. Структури
- •12.1. Загальна характеристика структури
- •12.2. Масиви структур
- •12.3. Використання масивів, як елементів структур
- •3. Робота зі структурами є універсальною, передбачено додавання записів до файлу (флаг ios:app). Для підрахунку кількості структур на диску приведемо наступні рядки програми:
- •Контрольні питання
- •Завдання
- •Розділ 13. Об’єднання та інші типи даних. Обробка виключних ситуацій
- •13.1. Об’єднання
- •13.2. Перелічені типи даних (enum)
- •13.3. Бітові поля
- •13.4. Обробка виключних ситуацій
- •Контрольні питання
- •Розділ 14. Динамічні структури даних
- •14.1. Стек
- •14.2. Черга
- •14.3. Лінійний список
- •Контрольні питання
- •Завдання
- •Розділ 15. Типові методи сортування масивів
- •15.1. Бульбашкове сортування (bubble sort)
- •15.2. Сортування за допомогою вибору (choice sort)
- •15.3. Сортування вставками (insert sort)
- •15.4. Сортування Шелла
- •15.5. Швидке сортування (quick sort)
- •Контрольні питання
- •Завдання
- •Розділ 16. Чисельне диференціювання та інтегрування
- •16.1. Методи правих та центральних різниць чисельного диференціювання
- •16.2. Методи прямокутників, трапецій, Сімпсона (парабол) чисельного інтегрування
- •Контрольні питання
- •Завдання Чисельне диференціювання
- •Чисельне інтегрування
- •Розділ 17. Чисельні методи розв’язання алгебраїчних рівнянь
- •17.1. Метод половинного ділення (дихотомія)
- •17.2. Метод Ньютона (метод дотичних)
- •17.3. Метод Рибакова
- •Контрольні питання
- •Завдання
- •Розділ 18. Чисельні методи розв’язання системи лінійних алгебраїчних рівнянь
- •18.1. Визначник. Дії над матрицями. Обчислення оберненої матриці
- •18.2. Метод оберненої матриці.
- •18.3. Метод Крамера
- •18.4. Метод Гауса
- •Контрольні питання
- •Завдання
- •1. Розв’язати систему алгебраїчних рівнянь.
- •2. Обчислити добуток матриць.
- •3. Розв’язати матричні рівняння.
- •Список літератури
Розділ 16. Чисельне диференціювання та інтегрування
16.1. Методи правих та центральних різниць чисельного диференціювання
Приріст аргументу і приріст функції. Нехай функція y = f(x) визначена в точках x0 та x1 = x0 + Δx. Різниця x1 – x0 = Δx називається приростом аргументу, а різниця f(x1) – f(x0)= f(x0 + Δx) – f(x0) називається приростом функції при переході від значення аргументу x0 до аргументу x1 = x0 + Δx. Приріст функції позначається Δf або Δy, тобто Δf = f(x0 + Δx) – f(x0).
Похідною функції f(x) в точці x0 (позначають f'(x0)) називається межа відношення приросту функції до приросту аргументу при умові, що приріст аргументу прямує до нуля, тобто
,
де Δx = x1 – x0 – приріст аргументу; x1 і x0 – два значення незалежної змінної з області визначення функції f(x); f(x0 + Δx) – f(x0) = Δf – приріст функції в точці x0.
Наприклад, якщо f(x)= 3x2 + 2, то f'(x0) =
=
=
=
.
Функція, яка має похідну в точці x0, називається такою, що диференціюється в цій точці. Якщо функція має похідну в кожній точці деякого проміжку, то вона диференційована на цьому проміжку. Похідна функції f(x), що диференціюється на проміжку, сама є функцією аргументу x.
Похідна широко використовується в різних методах аналізу даних, причому від ефективності обчислення похідної залежить ефективність, а часто і сама можливість реалізації вживаних методів аналізу. Похідні можуть визначатися аналітично або чисельно.
Кінцево-різницеві схеми чисельного визначення похідних побудовані на ідеї застосування такого малого приросту аргументу (похитування), що обчислення дає достатню для практичного застосування точність. Формула методу правих різниць є класичною формулою визначення похідної і виглядає наступним чином:
,
а метод центральних різниць може бути записаний як
,
де в обох випадках h – кінцево-різницевий інтервал (крок похитування).
Крок похитування h повинен наближуватись до нуля (дорівнює маленькій величині).
Наведемо фрагмент програми чисельного диференціювання.
#include <iostream>
using namespace std;
double func(double x)
{
return x*x + 5*x + 6;
}
void main()
{
double x,h,t1,t2;
h = 0.0000000001;
x = 3;
t1 = (func(x+h)-func(x))/h;
t2 = (func(x+h)-func(x-h))/(2*h);
cout<<"\nПохідна (метод правих різниць) "<<t1;
cout<<"\nПохідна (метод центральних різниць) "<<t2;
}
У даному фрагменті на прикладі функції y = x2 + 5x + 6 реалізовано методи правих та центральних різниць, відповідно змінні t1 та t2. Результат виконання програми при значенні аргументу x = 3 виглядатиме наступним чином:
Похідна (метод правих різниць) 11
Похідна (метод центральних різниць) 11
16.2. Методи прямокутників, трапецій, Сімпсона (парабол) чисельного інтегрування
Задача обчислення визначеного інтеграла, тобто вирази вигляду
,
часто виникає в аналізі даних. Числа а і b називають відповідно нижньою і верхньою межами інтеграції, а відрізок [а, b] називається ділянкою інтеграції. Функція f(x) називається підінтегральною функцією. Якщо підінтегральна функція безперервна на ділянці інтеграції і одна межа або обидві відразу покладені рівними ∞, а також якщо підінтегральна функція має один або декілька розривів на ділянці інтеграції, інтеграл називається невласним. Невласний інтеграл сходиться (існує), якщо існує межа інтеграла в даних випадках, інакше говорять, що невласний інтеграл розходиться (не існує). Невласні інтеграли часто виникають, наприклад, при обчисленні теоретичних функцій розподілу. Із зменшенням або збільшенням, залежно від типу розподілу, меж інтеграції ці функції зменшуються дуже швидко, тому практично обчислення можна здійснювати по тих же алгоритмах, що і для звичайних визначених інтегралів, тільки відповідна нескінченній нижній або верхній межі величина підбирається, відповідно, достатньо малою або достатньо великою для того, щоб точність обчислень була допустимою. Типовими для обчислення визначених інтегралів є методи прямокутників, трапецій, Сімпсона (парабол).
Формула за методом прямокутників має наступний вигляд:
,
де h = (b – а)/n – крок інтеграції;
n – задане число ділянок розбиття області інтегрування;
xi = а + ih, i = 0, 1, 2 ., n.
Формула за методом трапецій виглядає наступним чином:
.
Формула за методом Сімпсона (парабол) представлена в наступному вигляді:
,
де n – парне.
Наведемо фрагмент програми реалізації методів чисельного інтегрування.
#include <iostream>
using namespace std;
double func(double x)
{
return x*x + 5*x + 6;
}
void main()
{
double a,b,h,x;
double s,s1,s2,t1,t2,t3;
int i,n;
a = 1;
b = 4;
n = 100;
h = (b-a)/n;
// Метод прямокутників
s = 0;
for(i=0;i<n;i++)
{
x = a + i*h;
s+= func(x);
}
t1 = s*h;
cout<<"\nІнтеграл (метод прямокутників) "<<t1;
// Метод трапецій
s = 0;
for(i=1;i<n;i++)
{
x = a + i*h;
s+= func(x);
}
t2 = ((func(a)+func(b))/2+s)*h;
cout<<"\nІнтеграл (метод трапецій) "<<t2;
// Метод Сімпсона (парабол)
s1 = s2 = 0;
for(i=1;i<n;i++)
{
x = a + i*h;
if (i&1)s1+= func(x);
else s2+= func(x);
}
t3 = (func(a)+func(b)+2*s2+4*s1)*h/3;
cout<<"\nІнтеграл (метод Сімпсона) "<<t3;
}
Для інтегрування вибрано функцію y = x2 + 5x + 6, межі інтегрування: a = 1, b = 4. Фігура обмежена цими величинами розбивається на 100 частин (n = 100). Слід зауважити, що для реалізації методу Сімпсона (парабол) число n повинне бути парним.
Результат виконання програми:
Інтеграл (метод прямокутників) 76,0505
Інтеграл (метод трапецій) 76,5005
Інтеграл (метод Сімпсона) 76,5
Найточнішим методом є метод Сімпсона (метод парабол).