Tutorial - Sine Taylor

Tutorial - Programming sin(x) (In Class Activity)

Preparation

2) You must follow the Tutorial: Tutorial: NP Library Header Files

3) You must do: Assignment 0

Problem 1

Introduction

a) Create sinTaylor(x) that returns the output of sine x, where x is in [rad].

b) Create sindTaylor(x) that returns the output of sine x, where x in in [deg].

You must use your own function of power() and factorial() from Assignment 0

Procedure

  • Create a new empty project in Visual Studio Community

    • Name the project as: TU_TaylorSeries

  • It should be saved under \tutorial directory

    • i.e.: C:\Users\yourID\source\repos\NP\tutorial\TU_TaylorSeries

  • Create a new C/C++ source file for main()

    • Name the source file as TU_taylorSeries_exercise.cpp

  • Copy the source code from

C_taylorSeries_exercise.cpp
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define		PI		3.14159265358979323846264338327950288419716939937510582


double factorial(int _x);
double power(double _x, int N);
double sinTaylor(double _x);
double sindTaylor(double _x);

int main(int argc, char* argv[])
{

	double xdeg = 60;	
	double x = PI / 3;
	double sinN = 0;
	double sinDeg = 0;
	
	/*===== Select the function to call =====*/
	sinN = sinTaylor(x);  // in [rad]
		
	printf("\n\n");
	printf("=======================================\n");
	printf("    sin( %f[rad] ) Calculation   \n", x);
	printf("=======================================\n");	
	printf("   -  My     result = %3.12f    \n", sinN);
	printf("   -  Math.h result = %3.12f    \n", sin(x));
	printf("   -  absolute err. = %3.12f    \n", sinN - sin(x));
	printf("=======================================\n");


	sinDeg = sindTaylor(xdeg); // in [deg]
	printf("\n\n");
	printf("=======================================\n");
	printf("    sin( %f[deg] ) Calculation   \n", xdeg);
	printf("=======================================\n");	
	printf("   -  My     result = %3.12f    \n", sinDeg);
	printf("=======================================\n");
	
	
	system("pause");
	return 0;
}


// factorial function
double factorial(int N)
{
	int y = 1;
	for (int k = 2; k <= N; k++)
		y = y * k;
	return y;
}


// power function
double power(double _x, int N)
{
	double y = 1;
	for (int k = 1; k <= N; k++)
		y = y * _x;
	return y;
}

//  Taylor series approximation for sin(x) (input unit: [rad])
double sinTaylor(double _x)
{	
	int N_max = 10;
	double sinN = 0;			

	for (int k = 0; k < N_max; k++)
		// [TODO] add your algorithm here
	
	return sinN;
}


// Taylor series approximation for sin(x) (input unit: [deg])
double sindTaylor(double _x)
{
	double sinDeg=0;
	// [TODO] add your algorithm here
	return sinDeg;
}

  • Fill in the definition of sinTaylor(rad) in the main source.

  • Compare your answer and calculate the absolute error

    sin(π/3)= 0.86602540378

  • Create sindTaylor(deg) for degree unit input and output.

Hint: re-use sinTaylor(rad) definition

TIP

Approximation of Sine with Taylor series

image

Pseudocode for Programming Sine with Taylor series

image

Pseudocode for Programming power()

image

Video for Problem 1

See here for the TA Tutorial Video


Problem 2

Introduction

Define your sinTaylor(x) in the NP library header file

Procedure

  • Create a new empty project in Visual Studio Community

    • Name the project as: TU_TaylorSeries_Part2

  • It should be saved under \tutorial directory

    • i.e.: C:\Users\yourID\source\repos\NP\tutorial\TU_TaylorSeries_Part2

  • Create a new C/C++ source file for main()

    • Name the source file as TU_taylorSeries_exercise_part2.cpp

  • Copy the source code

C_taylorSeries_exercise_part2.cpp
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#define		PI		3.14159265358979323846264338327950288419716939937510582

#include "../../include/myNP_tutorial.h"

int main(int argc, char* argv[])
{
	double xdeg = 60;	
	double x = PI / 3;
	double sinN = 0;
	double sinDeg = 0;
	
	/*===== Select the function to call =====*/
	sinN = sinTaylor(x);  // in [rad]
		
	printf("\n\n");
	printf("=======================================\n");
	printf("    sin( %f[rad] ) Calculation   \n", x);
	printf("=======================================\n");	
	printf("   -  My     result = %3.12f    \n", sinN);
	printf("   -  Math.h result = %3.12f    \n", sin(x));
	printf("   -  absolute err. = %3.12f    \n", sinN - sin(x));
	printf("=======================================\n");


	sinDeg = sindTaylor(xdeg); // in [deg]
	printf("\n\n");
	printf("=======================================\n");
	printf("    sin( %f[deg] ) Calculation   \n", xdeg);
	printf("=======================================\n");	
	printf("   -  My     result = %3.12f    \n", sinDeg);
	printf("=======================================\n");
	
	
	system("pause");
	return 0;
}

(Library File Preparation)

These files should be saved in “ \include\” folder.

image

(Library File Update)

  • Update the header files

    • Your sinTaylor(rad) of Problem 1 should be declared and defined in the header file.

    • See below as example

/*----------------------------------------------------------------\
@ Numerical Methods by Young-Keun Kim - Handong Global University

Author           : SSS Lab
Created          : 05-03-2021
Modified         : 05-03-2021
Language/ver     : C in MSVS2019

Description      : myNP_tutorial.h
/----------------------------------------------------------------*/

#ifndef		_MY_NM_H		// use either (#pragma once) or  (#ifndef ...#endif)
#define		_MY_NM_H
#define		PI		3.14159265358979323846264338327950288419716939937510582

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// Factorial function
extern double factorial(double _x);
extern double power(double _x, int N);

// Taylor series approximation for sin(x) using pre-defined functions (input unit: [rad])
extern double sinTaylor(double _x);

// Taylor series approximation for sin(x) using pre-defined functions (input unit: [deg])
extern double sindTaylor(double _x);



#endif
  • Run and check the answer

Video for Problem 2

See here for the TA Tutorial Video


Exercise

  1. Create double cosTaylor(double rad)

  2. Create double expTaylor(double x)


After you have completed all the exercises, you can check sample solutions here

Exercise solutions


Last updated

Was this helpful?