Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Кафедра ЗІ
ЗВІТ
до лабораторної роботи №4
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «ЧИСЛОВЕ ІНТЕГРУВАННЯ ФУНКЦІЇ ОДНІЄЇ ЗМІННОЇ»
Варіант 23
Мета роботи – ознайомлення з методами наближеного обчислення означених інтегралів.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Метод Сімпсона
Цей метод значно точніший у порівнянні з методами прямокутників або трапецій.. Для досягнення тої ж точності в ньому можна брати менше число n ділянок розбиття та відповідно більший крок h, а при одному й тому ж кроці h він дає менші абсолютну та відносну похибки.
Розіб’ємо відрізок на парне число 2n частин довжиною
(9)
Нехай точкам розбиття ,, відповідають значення підінтегральної функції (тобто ,, i=)
Рис. 4
На відрізку проведемо через три точки параболу, якою замінимо підінтегральну функцію .
Рівняння параболи
(10)
(причому значення коефіцієнтів А, В, С невідомі). Якщо замінити площу криволінійної трапеції на відрізку площею криволінійної трапеції, обмеженої параболою (10), то можна записати
(11)
Винесемо спільний множник
(12)
Невідомі коефіцієнти А, В, С в рівняннях (10), (11) шукаються з умови, що при
Враховуючи, що
(13)
Перемножуючи другу рівність (13) на 4 та додаючи всі три рівності, знайдемо
(14)
що співпадає з квадратною дужкою рівняння (12). Отже,
(15)
Очевидно, що для кожної наступної пари ділянок одержимо таку ж формулу:
(16)
Додаючи рівності вигляду (15) та (16) по всіх відрізках, одержимо :
(17)
Це і є формула Сімпсона. Похибка методу (формули парабол) визначається за формулою :
, (18)
При написанні програм доцільно формулу Сімпсона зобразити у вигляді
, (19)
де , тобто i=
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
№ вар.
Підінтегральна функція
Інтервал інтегрування
Метод
Абсолютна похибка
23
[0; 1,5]
Сімпсона
0,001
БЛОК-СХЕМА АЛГОРИТМУ ПРОГРАМИ
Схема до методу Сімпсона
ТЕКСТ ПРОГРАМИ
using System;
namespace Pavlo
{
class Program
{
static double func(double x)
{
double r;
r = Math.E * (1 + Math.Sin(x)) / (1 + Math.Cos(x));
return r;
}
static void Main()
{
double I;
double a, b, h;
double I2 = 0, I4 = 0;
Console.Write("a=");
a = Convert.ToDouble(Console.ReadLine());
Console.Write("b=");
b = Convert.ToDouble(Console.ReadLine());
Console.Write("h=");
h = Convert.ToDouble(Console.ReadLine());
I4 = func(a + h);
for (int k = 2; k <= b; k += 2)
{
I4 += func(a + (k + 1) * h);
I2 += func(a + k * h);
}
I = func(a) + func(b) + 4 * I4 + 2 * I2;
I *= h / 3;
Console.WriteLine("I=" + I);
Console.ReadKey();
}
}
}
РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ
/