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

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: iostream, cmath, assert.h
  2. Определение функции arcctg, которая принимает два аргумента: x и eps.
  3. В функции main() производится вызов функции arcctg(0.5, 1e-3), результат выводится на экран.
  4. Значение eps определяет необходимую точность вычислений.
  5. В функции arcctg() используется цикл, который продолжает выполняться, пока значение последнего члена ряда Тейлора (терма) не станет меньше заданной точности eps.
  6. В цикле происходит добавление очередного члена ряда к сумме.
  7. Значение числителя (numerator) умножается на -x^2, а знаменателя (denominator) увеличивается на 2.
  8. Цикл завершается, когда числитель и знаменатель принимают значения, при которых fabs(term) становится меньше eps.
  9. Возвращаемое значение функции arcctg() — это сумма всех членов ряда Тейлора.
  10. В функции main() вычисляется значение функции arcctg(0.5, 1e-3) и сравнивается с теоретическим значением (M_PI_2 - atan(0.5)).
  11. Если значения совпадают, то программа завершается с успехом (EXIT_SUCCESS).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы