Главная страница

лабораторная с. Лаб2. Задание Вычислить данную функцию итерационным методом. Постановка задачи


Скачать 120.58 Kb.
НазваниеЗадание Вычислить данную функцию итерационным методом. Постановка задачи
Анкорлабораторная с
Дата01.11.2020
Размер120.58 Kb.
Формат файлаdocx
Имя файлаЛаб2.docx
ТипЗадача
#147208

Задание




Вычислить данную функцию итерационным методом.

Постановка задачи


Из формулы видно, что задача решается следующим образом: результат выводится прибавлением или вычитанием слагаемого, зависящего от предыдущего. Будем отслеживать текущий результат result, новое слагаемое delta, которое состоит из неизвестного в определенной степени x_res, знака sign и коэффициента k. Результат на первой итерации равен единице. Новое слогаемое получается умножением неизвестного в степени, коэффициента и знака (-1 или 1). Неизвестное умножается на икс каждую итерацию для получения необходимой степени. Знак меняется по следующему закону: если остаток от деления номера итерации на 5 равен 0 или 2, знак равен +, иначе -. Коэффициент получается делением high на low, которые вычисляются следующим образом: high умножается каждую итерацию на 5, 3 или 1 по кругу на одно из чисел. К low кажду итерацию прибавляется 2.
Алгоритм функции




Алгоритм основной программы



Листинг программы

#include

#include

#include

double f(double x, double eps)

{

double ostatok,k;

double high = 5., low = 2.;

int i=3,sign;

int flag = 1;

double result = 1.0;

ostatok =(-5.0/2.0)*x;

result+=ostatok;

printf("ostatok= %lf\n",ostatok);

i=2;

while (fabs(ostatok)>eps)

{

if (i % 5 == 0 || i % 5 == 2)

sign = 1;

else

sign = -1;

if (high == 5 && flag == -1) {

flag = 1;

}

else if (high == 5 && flag == 1) {

flag = 1;

high = 3;

}

else if (high == 3 && flag == 1) {

high = 1;

}

else if (high == 3 && flag == -1) {

high = 5;

}

else if (high == 1 && flag == 1) {

flag = -1;

}

else if (high == 1 && flag == -1) {

high = 3;

}

low += 2;

k =(double)high / low;

ostatok = fabs(ostatok)*x*k* sign;

result+=ostatok;

i++;

}

return result;

}

int main()

{

double x,eps,res;

printf("Введите х от -1 до 1\n");

scanf("%lf", &x);

while (fabs(x)> 1)

{

printf("Введите х от -1 до 1\n");

scanf("%lf", &x);

}

printf("Введите точность вычисления eps>0\n");

scanf("%lf", &eps);

while (eps<= 0)

{

printf("Введите точность вычисления eps>0\n");

scanf("%lf", &eps);

}

res=f(x,eps);

printf("Значение функции с точностью eps=%lf равно %lf",eps,res);

return 0;

}
Результат работы программы:



написать администратору сайта