Лабораторна робота
Тема:
Числове інтегрування
Мета роботи: Вивчення методів обчислення означеного інтегралу та засобiв мови Сi для програмування процедур, оволодiння прийомами складання алгоритмiв i програм з пiдпрограмами.
Завдання:
№
вар. | Підінтегральна
Функція | n | a | b
15 | tg2(x)+ctg2(x) | 54 | /6 | /3
Короткі теоретичні відомості:
Числове інтегрування функцій:
Постановка задачі обчислення означеного інтегралу функції має вигляд
.
Інтеграл функції чисельно дорівнює площі (на рисунку 1 заштрихована), обмеженій лініями: t=a, t=b, y=0 i y=f(t). Для її наближеного обчислення застосовуються методи: прямокутників, трапецій і парабол, які передбачають заміну кривої y=f(t) відповідно ступінчатою та ламаною лініями або параболою. Суть цих методів полягає в тому, що діапазон інтегрування [a, b] ділять на n елементарних відрізків довжиною h, після чого виконують обчислення за поданими нижче формулами, які називаються квадратурними. При цьому h=(b-a)/n, t0 = a, tn = b, ti+1 = ti+h, yi=f(ti).
Алгоритм числового інтегрування функцій представляє собою цикл з накопиченням суми.
Метод правих прямокутників s = h*(y1 + y2 + y3 + ... + yn) або .
Метод трапецій s=h*[(y0 + yn)/2 + y1 + y2 + ... + yn-1] або
Метод парабол (Сімпсона) s=(y0 + 4y1 + 2y2 + 4y3 + 2y4 + 4y5 + ... + 4yn-1 + yn) або , де k=n/2 (n – парне число).
Процедура-функція:
Мова Сi дозволяє використовувати лише один вид пiдпрограми:
процедуру-функцiю з параметрами. Характерною особливiстю процедури-функцiї є наявнiсть багатьох вхiдних параметрiв i одного вихiдного, який присвоюється iменi функцiї. Всi пiдпрограми повиннi
бути оголошенi в головнiй або пiдпорядкованих програмах. Оголошення процедури-функцiї має такий вигляд:
ТПЗ IПФ(СТП);,
де ТПЗ – тип значення, яке повертає процедура-функцiя;
IПФ – iм’я процедури-функцiї, iдентифiкатор;
СТП – список типiв дiйсних параметрiв.
Крiм оголошення, функцiя має бути визначена, тобто має бути вказано, що ця функцiя власне виконує. Визначення функцiї має вигляд:
ТПЗ IПФ(СФП){ОЗП;ТПФ;},
де:СФП - список формальних параметрiв i їх типiв;
ОЗП - оголошення внутрiшнiх (власних) змiнних функцiї;
ТПФ - тiло процедури, оператори та вирази.
Тiло процедури-функцiї може мiстити один або декiлька операторiв return(вираз); Його виконання приводить до завершення процедури i повернення в програму, з якої функцiя викликалася. Якщо цей оператор має вираз, то його значення присвоюється iменi процедури i є результатом її виконання. Формальнi параметри функцiї,
якщо вони є, локалiзованi в її тiлi, пам’ять пiд них дублюється.
Локалiзованими є також внутрiшнi змiннi функцiї, їх значення теж
втрачаються пiсля виходу з процедури, якщо вони не мають клас пам’ятi static. Звернення до процедури-функцiї в головнiй програмi
вiдбувається шляхом вказування її iменi, пiсля якого в круглих
дужках дається список дiйсних параметрiв.
Забороняється передавати масиви в якостi параметрiв функцiї.
Натомiсть можна використовувати вказівники на масиви. Масиви в
процедурi не дублюються.
Звернення до процедури графiчно вiдображається за допомогою
прямокутника з подвоєними бiчними сторонами.
Ідентифікація змінних:
Змінна | a |
b | Кількість інтервалів | Крок | yi | р |
Ідентифікатор | a | b | n | h | Y | S | y[i] | M_PI | func(x)
Програма:
#include<math.h>
/*********
* Функція*
*********/
float func(float x)
{
float y;
y=pow(tan(x),2)+pow(1/tan(x),2);
return y;
}
/******************
* Головна програма*
*******************/
main()
{
int n=54; float a=M_PI/6,b=M_PI/3,
prjam(float,float,float),
trap(float,float,float,int),
parab(float,float,float,int),h;
h=(b-a)/n;
clrscr();
printf(" Метод прямокутникiв:\n %.4f;\n",prjam(a,b,h));
printf(" Метод трапецiй:\n %.4f;\n",trap(a,b,h,n));
printf(" Метод парабол:\n %.4f.",parab(a,b,h,n));
getch();
}
/*********************
* Метод прямокутникiв *
**********************/
float prjam(float a,float b,float h)
{
float func(float),x,Y=0,S;
for(x=a+h;x<=b;x+=h)
{
Y+=func(x);
}
S=h*Y;
return S;
} |
/****************
* Метод трапецiй *
*****************/
float trap(float a,float b,float h,int n)
{
int i=0;
float x,y[55],Y=0,S;
for(x=a;x<=b;x+=h)
{
y[i]=func(x);
i++;
}
for(i=1;i<=(n-1);i++)
{
Y+=y[i];
}
S=h*((y[0]+y[n])/2+Y);
return S;
}
/***************
* Метод парабол *
****************/
float parab(float a,float b, float h,int n)
{
int i=0;
float x,y[55],Y=0,S;
for(x=a;x<=b;x+=h)
{
y[i]=func(x);
i++;
}
for(i=1;i<=(n/2-1);i++)
{
Y+=4*y[2*i-1]+2*y[2*i];
}
S=h/3*(y[0]+4*y[n-1]+y[n]+Y);
return S;
}
Результати:
Метод прямокутникiв:
1.2624;
Метод трапецiй:
1.2624;
Метод парабол:
1.2622.
Висновок: Я вивчив методи обчислення означеного інтегралу та засоби мови Сi для програмування процедур, оволодiв прийомами складання алгоритмiв i програм з пiдпрограмами.
Блок-схема
/******************
* Головна програма*
*******************/
|
/*********************
* Метод прямокутникiв *
**********************/ |
/****************
* Метод трапецiй *
*****************/ |
/***************
* Метод парабол *
****************/
/*********
* Функція*
*********/