Міністерство освіти і науки України
Національний університет "Львівська політехніка"
Лабораторна робота №5
ОБЧИСЛЕННЯ СУМ ФУНКЦІОНАЛЬНИХ РЯДІВ
Мета роботи:
засвоїти методику та виробити практичні навики застосування циклів для обчислення значень шляхом поступового накопичення.
Завдання 1 :
Розрахувати значення заданої елементарної функції f(x) безпосередньо за формулою та як суму функціонального ряду (f(x)=, де an = xn(n!). При обчисленні забезпечити похибку не більше за (= 10-4. Похибку оцінювати за абсолютною величиною наступного члену ряду. Значення аргументу x задано:
X=0.0285.
Аналіз завдання:
Для того, щоб розрахувати значення функції як суму функціонального ряду і забезпечити похибку не більше ( потрібно зробити цикл. Для організації циклу в програмі можна використати оператори «while» , «for» і «do…while». Також потрібно, щоб цикл виконався хоча б один раз, для того треба використати цикл «do…while».
У формулі для розрахунку an використовується факторіал, такої функції у бібліотеці math.h немає, тому цю функцію ми маємо реалізувати у програмі за допомогою циклу «for».
Алгоритм програми:
Текст програми:#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define D 0.0001
#define x 0.0285
int main(int argc, char *argv[])
{
double y,an,delta,s;
double fact=1;
int i=1,n=0;
puts("RT-11, Lojik Vitalij, Lab5 : FunkzionalnujRjad");
y=exp(x);
s=pow(x,n)/fact;
do {
n++;
for (i=1;i<=n;i++)
fact=fact*i;
an=pow(x,n)/fact;
s=an+s;
printf("#%d\tS=%0.5e\tx=%0.2f\tD=%0.4f\t\n", n, s, x, D);
}
while(an>=D);
printf("\nx=%.5f\ty=%.6f\ts=%.6f\nD=%.5f\t an=%.6f\t n=%d\n",x,y,s,D,an,n);
system("PAUSE");
return 0; }
Результати:
Завдання 2 :
Розрахувати значення M точок заданої елементарної функції f(x) безпосередньо за формулою та як суму функціонального ряду () в інтервалі [a;b] з кроком h. Межі обчислення та крок визначаються згідно формул: , , .
При обчисленні забезпечити похибку не більше за D. Похибку оцінювати за абсолютною величиною наступного члену ряду. Значення аргументу x0 задано.Результат вивести у формі таблиці.
F(x)= ex , n0 =0, an =xnn!, x0=0.0285, 10-4
Блок – схема:
Текст програми:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define D 0.0001
#define x0 0.0285
int main(int argc, char *argv[])
{
puts("Lojik Vitalii, RT-11");
puts("Laboratorna robota 5/2,Programuvan'a obchyslen'");
double S=1,an;
double y, fact=1;
double a, b, h, x;
int i, n=0, M=10;
a=x0-(x0/10);
b=x0+(x0/10);
h=(b-a)/(M-1);
x=a;
printf("\na=%0.4f\tb=%0.4f\th=%0.4f\n\n", a, b, h);
do
{
do
{
n++;
for (i=1; i<=(n); i++)fact*=i;
an=pow(x,n)/fact;
S+=an;
}
while(fabs(an)>=D);
printf("y=%0.5f\tS=%0.5f\tx=%0.5f\tD=%0.4f\n", S, x, D);
x=x+h;
}
while(x<b);
system("PAUSE");
return 0;
}
Результати:
Висновок:
Я навчився застосовувати цикли для для обчислення значень шляхом поступового накопичення. При створенні цієї програми я використав оператори циклу «for» і «do…while». Для того, щоб обчислити факторіал я використав цикл «for», а для обчислення функції як суму функціонального ряду – цикл «do…while».