лабораторная с. Лаб2. Задание Вычислить данную функцию итерационным методом. Постановка задачи
Скачать 120.58 Kb.
|
ЗаданиеВычислить данную функцию итерационным методом. Постановка задачиИз формулы видно, что задача решается следующим образом: результат выводится прибавлением или вычитанием слагаемого, зависящего от предыдущего. Будем отслеживать текущий результат 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; } Результат работы программы: |