Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Method_Lab_Work_ANSI_C__2010_lab1-10_v2.doc
Скачиваний:
39
Добавлен:
22.11.2018
Размер:
1.14 Mб
Скачать

4.2. Приклад алгоритму та програми

Обчислити значення у, розвинувши функцію ех у ряд Тейлора, де x змінюється від -5 до 5 з кроком 1.

Алгоритм задачі

1. Увести початкове, кінцеве значення аргументу функції та його крок зміни.

2. Повторювати дії:

2.1. Задати поточне значення аргументу функції, що дорівнює початковому значенню;

2.2. Якщо поточне значення аргументу не більше за кінцеве, то виконати такі дії:

2.2.1. Якщо аргумент функції знаходиться в межах від -2 до +2, то визначити значення функції за стандартною функцією та за формулою ряду Тейлора, виконавши дії:

2.2.1.1. Визначити початкову суму ряду, що дорівнює 1;

2.2.1.2. Задати точність розрахунків поточного елемента ряду;

2.2.1.3. Задати початкову кількість елементів ряду, що дорівнює 1.

2.2.1.4. Поки значення поточного елемента ряду більше за значення точності розрахунків повторювати такі дії:

  • визначити значення елемента ряду;

  • додати значення елемента ряду до суми;

  • перейти до наступного елемента ряду.

2.2.2. Визначити похибку.

2.2.3. Якщо аргумент функції менший за -2, то визначити значення функції за формулою ряду Тейлора, стандартною функцією та похибку.

2.2.4. Якщо функцію не визначено при заданих значеннях аргументу, то задати значення 1 для ознаки невизначеності функції, вивести відповідне повідомлення, інакше вивести значення функції та похибку.

2.3. Змінити поточне значення аргументу функції.

2.4. Перейти до дій п. 2.2.

3. Кінець повторень

Код програми

// |e^x - e^x/2, if -2 ≤ x ≤ 2

// Y={

// |e^(x+3)+1, if x < -2

// x between -5, 5, step 1

//e^x=1 + x / 1! + x2 / 2! + x3 / 3! + ...

#include <stdio.h> //підключення бібліотек уведення-виведення

#include <conio.h>

#include <math.h> //підключення бібліотек математичних функцій

float y, //вираз за формулою Тейлора

st, //значення стандартної функції exp()

x, //аргумент функції

xn, xk, //початкове, кінцеве значення аргументу

xs, err, //крок зміни аргументу та похибка

t; //точність розрахунків

bool flag=true; // прапорець для визначення можливості //розрахунку функції

//////// обчислення експоненти за формулою Тейлора /////////

double expon(float a)

{ //e^a=1 + a^1 / 1! + a^2 / 2! + a^3 / 3! + ...

//параметр a - аргумент функції e^a

float sum=1; //сума членів ряду

int i=1; //знаменник елемента ряду

float member=1; //поточний елемент ряду

while (member>t) //поки поточний елемент перевищує

{ //точність розрахунків

member*= a/i; //поточний елемент за

// формулою Тейлора

sum+=member; //накопичення суми

i++;

} //перехід до нового елемента ряду

return sum; //повернення значення експоненти з функції

}

/////////////////// основна функція //////////////////////

int main (void)

{

puts("lab4: calculation exponention function");

printf("\n input xn, xk, xs (-5 5 1)\n");

scanf("%f%f%f", &xn, &xk, &xs);

printf("\n input t \n");

scanf("%f", &t);

puts("===================================================");

printf(" x y standart error \n");

puts("===================================================");

for ( x=xn;x<=xk;x+=xs) //цикл перебору значень аргументів функції

{ if (x>=-2&&x<=2) //перевірка умов вибору

{ //розрахункової функції

y=expon(x)-expon(x/2); //визначення функції за

// формулою Тейлора

st=exp(x)-exp(x/2); //визначення функції за

//стандартною формулою

err=fabs(st - y); //розбіжності між точним і

//наближеним значеннями функції

}

else if (x<-2)

{

y=expon(x+3)+1;

st=exp(x+3)+1;

err=fabs(st-y);

}

else if (x>2) flag =false; // функцію не визначено

if ( flag) //якщо функцію визначено, то вивести

// її значення

printf (" %f %f %f %f \n", x, y, st, err);

else printf (" %f not define \n", x ); //функцію не визначено

}

getch();

}

Рис. 4.1. Результати роботи програми ex4.1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]