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