Разложить sin и cos в ряд Тейлора - C (СИ)

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

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

Помогите с задачей. Необходимо разложить sin и cos в ряд Тейлора. Программа работает только для промежутка [-П/4;П/4]. Подскажите как дописать для остальных х(я понимаю, что разница в начальных значениях и знаках, но реализовать не выходит).
#define _USE_MATH_DEFINES
 
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
void main(){
double x,e;
printf("vvedite x,e \n");
scanf("%lf %lf",&x,&e);
 
int n,f=0,s=1;// s-знак, f-функция sin или cos, n-число вхождений периода(в х)
//сносим x на промежуток [-Pi/4,Pi/4]
//1
if(x<0)
{x=-x; s=-s;}
//2
if(x>=M_PI*2)
{n=x/(2*M_PI); x-=2*M_PI*n; f=0;}
//3
if(x>=M_PI)
{x=2*M_PI-x; s=-s;f=0;}
//4
if(x>=(M_PI/2))
{x=M_PI-x; f=0;}
//5
if(x>=M_PI/4)
{x=M_PI/2-x; f=!f;} 
 
if (f==0){
int i = 1;
double sin=x,p=x,q=1,l=x; // начальные условия: p-числитель, q-знаменатель, l-член ряда
 
while(l>=e){
    i+=2;
    s=-s;
    double x2=x*x;
    p*=x2;
    q/=(i-1)*i;
    l=s*p*q;
    sin+=l;
    }
printf("sin=%lf",sin);
}
//else 
//?
getch();
}

Решение задачи: «Разложить sin и cos в ряд Тейлора»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415926535897932384626433832795
float myFabs(float x){
    return x>0?x:-x;
}
float mySin(int nx,float e){
    float y,y0,a,b,x;
    int n;
    x=(nx%360)*PI/180;
    for(y=0,a=x,b=n=1;;){
        if(myFabs(y0=a/b)<e)
            break;
        y+=(n&1?1:-1)*y0;
        a*=x*x;
        b*=(2*++n-1)*(2*n-2);
    }
    return y;
}
int main(){
    float e;
    int x;
    printf("vvedite x: \n");
    scanf("%d",&x);
    printf("vvedite e: \n");
    scanf("%f",&e);
    printf("sin(%d)=%f\n",x,mySin(x,e));
    system("pause");
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем константу PI с помощью математической константы 3.1415926535897932384626433832795
  3. Объявляем функцию myFabs(float x), которая возвращает абсолютное значение числа x
  4. В функции mySin(int nx,float e) объявляем переменные y, y0, a, b, x, n
  5. Вычисляем значение x в радианах, используя формулу (nx%360)*PI/180
  6. Задаем начальные значения для y, a и b равными x
  7. Начинаем цикл, который будет выполняться до тех пор, пока абсолютное значение y0 меньше заданной точности e
  8. В каждой итерации цикла прибавляем к y значение y0, умноженное на (n&1?1:-1)
  9. Умножаем a на xx и b на (2n-1)(2n-2)
  10. Увеличиваем значение n на 1
  11. После завершения цикла возвращаем значение y
  12. В функции main() запрашиваем у пользователя ввод значения x и e
  13. Вызываем функцию mySin(x,e) и выводим результат на экран
  14. Ждем нажатия клавиши пользователем с помощью system(pause)
  15. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

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