МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
ЗВІТ
До лабораторної роботи №4
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «Чисельне iнтегрування функції однієї змінної»
Варіант №9
МЕТА РОБОТИ
Ознайомлення з методами наближеного обчислення означених інтегралів.
КОРОСТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Метод Гаусса.
Формулу Гаусса називають формулою найвищої алгебраїчної точності, абсциси xi при інтерполяції (наближенні) функції вибираються з умови забезпечення мінімальної похибки інтерполяції. В методі Гаусса інтеграл
(23)
зводиться до вигляду
(24)
тобто точне значення заміняється на наближену квадратурну формулу.
Це зведення відбувається у наступній послідовності. У формулі (23) змінна x заміняється на
(25)
Тоді
(26)
І з врахуванням (24) можна записати, що:
. (27)
В формулі (24) коефіцієнти та абсциси (вузли) вибираються в залежності від числа вузлів. Значення невідомих є коренями поліномів Лежандра. Вузли розташовані на інтервалі (-1,1), завжди симетрично відносно нуля. Всі вагові коефіцієнти додатні, а їх сума дорівнює 2.
n
i
ti
Ai
5
1 ; 5
2 ; 4
3
0,906179846
0,538469310
0
0,236926885
0,478628670
0,568888889
ЗАВДАННЯ
№ вар.
Підінтегральна функція
Інтервал інтегрування
Метод
9
[1; 2,5]
Гаусса (n=5)
БЛОК-СХЕМА АЛГОРИТМУ
СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
i, n – змінні типу int, які використовуються в програмі; a, b, Sum, Integral, Function – змінні плаваючого типу, які використовуються в програмі;
Main() – головний метод; input() – метод зчитування введених даних; calc_integral()– метод розв’язування інтегралу за наближеною формулою; sum() – метод обчислення суми (див. формулу)
class Program – клас, який містить тільки головну функцію Main(); class Main – клас, у якому відбуваються усі дії;
Console.ReadLine() та Console.ReadKey() – функція зчитування з клавіатури;
Console.WriteLine() та Console.Write() – функції виведення на екран;
Convert.ToDouble() – функція конвертування у тип Double;
try {} catch (Exception) {} – функція перехоплення винятку;
goto – оператор переходу виконання коду до відповідної мітки; for() – оператор циклі з передумовою; if {} else {} – оператор умови;
ТЕКСТ ПРОГРАМИ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace kmd_lab4
{
class Program
{
static void Main(string[] args)
{
Main p = new Main();
p.input(); p.calc_integral();
Console.Write("\nPress <Enter> to exit..."); Console.ReadKey();
}
}
class Main
{
public int i;
public const int n = 5;
public double a, b, Sum, Integral, Function;
public double[] t = new double[] { 0.906179846, 0.538469310, 0.000000000, 0.538469310, 0.906179846 };
public double[] A = new double[] { 0.236926885, 0.478628670, 0.568888889, 0.478628670, 0.236926885 };
public void input()
{
Console.WriteLine(" Введiть iнтервал [a, b]:");
inpt: try
{
Console.Write(" Введiть a = "); a = Convert.ToDouble(Console.ReadLine());
Console.Write(" Введiть b = "); b = Convert.ToDouble(Console.ReadLine());
}
catch (Exception) { Console.WriteLine("\t Виникла помилка при введеннi! Ще раз:"); goto inpt; }
}
public void calc_integral()
{
sum(); Integral = ((b - a) / 2) * Sum;
Console.WriteLine("\n Iнтеграл = " + Integral);
}
public void sum()
{
for (i = 0; i < n; i++)
{
if (i == 0 || i == 1) { t[i] = t[i] * (-1); }
double tmp = ((b - a) / 2) * t[i] + ((b + a) / 2);
Function = Math.Sin(1 / tmp) / Math.Pow(tmp, 2);
Sum += A[i] * Function;
}
}
}
}
РЕЗУЛЬТАТ РОБОТИ ПРОГРАМИ
ВИСНОВОК
Отже, під час лабораторної роботи я ознайомився з методами наближеного обчислення означених інтегралів. За допомогою методу Гаусса склав алгоритм обчислення означеного інтегралу.