Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора - 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).