Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора - C (СИ) (77316)
Формулировка задачи:
Здравствуйте. Нужно вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от xn до xk с шагом dx с точностью eps.
arcctg x=(p/2)-x+(x^3/3)-(x^5/5)+..., |x|<=1
Написал. Но получилось большое расхождение. Да и вообще криво. Подскажите, что не так. Программа компилируется нормально. Есть сомнения, правильно ли я записал "y+=(p/2)-(a/i)*c;". Конкретно "p/2". Подскажите. Заранее спасибо.
#include "stdafx.h" #include "clocale" #include "conio.h" #include "math.h" int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Russian"); setlocale(LC_ALL, "rus"); float xn, xk, dx, e, y=0, a, p = 3.14, d; int j, c, i=0; while (i==0) { printf("введите начальное и конечное значение аргумента x, шаг dx и точность e:\n"); scanf("%f %f %f %f", &xn, &xk, &dx, &e); if ((abs(xn)<=1)&&(xn<xk)&&(dx>0)) break; } printf("---------------------------------------\n"); printf("| Аргумент |Значение| Шаг |Кол.членов|\n"); printf("---------------------------------------\n"); for(xn; xn <= xk; xn = xn + dx) { a = xn; c = 1; i = 1; j = 0; while ((a/i)>=e) { c=c*-1; y+=(p/2)-(a/i)*c; a=a*xn*xn; i+=2; j++; } printf("| %8.2f | %6.2f | %.2f | %8d |\n",xn,y,dx,j); printf("---------------------------------------\n"); } getch(); return 0; }
Решение задачи: «Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define _USE_MATH_DEFINES #include <math.h> #include <assert.h> double arcctg(double x, double eps) { assert(fabs(x) < 1); double sum = M_PI_2, numerator = - x, x_2 = x * x, term; size_t denominator = 1; while(fabs(term = numerator / denominator) >= eps) { sum += term; numerator *= - x_2; denominator += 2; } return sum; } int main(void) { printf("%f %f\n", arcctg(0.5, 1e-3), M_PI_2 - atan(0.5)); /* test */ exit(EXIT_SUCCESS); }
Объяснение кода листинга программы
- Подключение необходимых библиотек: iostream, cmath, assert.h
- Определение функции arcctg, которая принимает два аргумента: x и eps.
- В функции main() производится вызов функции arcctg(0.5, 1e-3), результат выводится на экран.
- Значение eps определяет необходимую точность вычислений.
- В функции arcctg() используется цикл, который продолжает выполняться, пока значение последнего члена ряда Тейлора (терма) не станет меньше заданной точности eps.
- В цикле происходит добавление очередного члена ряда к сумме.
- Значение числителя (numerator) умножается на -x^2, а знаменателя (denominator) увеличивается на 2.
- Цикл завершается, когда числитель и знаменатель принимают значения, при которых fabs(term) становится меньше eps.
- Возвращаемое значение функции arcctg() — это сумма всех членов ряда Тейлора.
- В функции main() вычисляется значение функции arcctg(0.5, 1e-3) и сравнивается с теоретическим значением (M_PI_2 - atan(0.5)).
- Если значения совпадают, то программа завершается с успехом (EXIT_SUCCESS).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д