Ряд Тейлора. Вычисление синуса - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть проблема. Дана функция sinx, нужно разложить x по ряду Тейлора. В коде, видимо, что-то не хватает. Буду очень благодарен любой помощи.
//xn - начальное x
//xk - конечное x
//dx - шаг
//eps - погрешность
//x - главная переменная
//q - представление главной переменной
//n - переменная, присутствующая в степени
//a - числитель дроби
//b - знаменатель дроби
//k - счетчик значений (Идентификатор)
//v - счетчик четности и нечетности 
for(x=xn; xn<=xk+0.0000001; x+=dx)
    {   k=0;
        a=x;
        b=1;
        sinx=0;
        n=3;
        v=2;
            while((a/b)>eps) 
            {
                sinx=sinx+(a/b);
                b=0;
                a=a*x*x;
                a=fabs(a);
                for (j=1; j<=n; j++)
                {
                    b=b*j;
                }
                n=n+2;
                k++;
                if ((v%2)==0)
                a=-a;
                v=v+1;
                q=siny;
                    if(sinx==xn)

Решение задачи: «Ряд Тейлора. Вычисление синуса»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
double sinx(double x) {
 
    double n = x, sum = 0.L;
    int i = 1;
 
    do {
        sum += n;
        n *= -1.0 * x * x / ((2 * i) * (2 * i + 1));
        ++i;
    } while ((n > 0.0 ? n : -n) > 1e-9);
 
    return sum;
}
 
int main () {
 
    printf("sin pi / 2 = %lf\n", sinx(M_PI_2));
 
    return 0;
}

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

В данном коде реализован метод приближенного вычисления синуса функции sinx, используя ряд Тейлора. Список элементов кода выделены пронумерованными парами строк:

  1. #include Включает в код функции файла стандартного ввода/вывода
  2. #include Включает в код функции файла стандартной библиотеки
  3. #include Включает в код математические функции файла math.h
  4. double sinx(double x) { Определяет функцию sinx с одним аргументом типа double
  5. double n = x; Присваивает аргумент функции переменной типа double
  6. double sum = 0.0; Инициализирует переменную sum для хранения суммы ряда
  7. int i = 1; Инициализирует переменную i для контроля цикла
  8. do { Начало цикла do-while
  9. sum += n; Добавляет значение переменной n к сумме
  10. n = -1.0 x x / ((2 i) (2 i + 1)); Обновляет значение переменной n для следующего члена ряда
  11. ++i; Увеличивает значение переменной i на единицу
  12. } while ((n > 0.0 ? n : -n) > 1e-9); Цикл выполняется до тех пор, пока абсолютное значение n больше заданного порога
  13. return sum; Возвращает значение суммы в качестве результата функции
  14. int main () { Определяет точку входа в программу
  15. printf(sin pi / 2 = %lf\n, sinx(M_PI_2)); Выводит результат вычисления синуса функции sinx с аргументом M_PI_2
  16. return 0; Завершает программу Значения переменных и выражений в коде:
    • x - аргумент функции sinx, представляющий угол в радианах
    • n - текущий член ряда Тейлора
    • sum - текущая сумма ряда
    • i - счетчик итераций цикла
    • M_PI_2 - значение числа π/2 в библиотеке math.h

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

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