By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,972 Members | 1,454 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,972 IT Pros & Developers. It's quick & easy.

Using Taylor Series

P: 22
I need help with Taylor Series

Part A:
Scan the angle in degrees x_deg. Express this angle in
radians by using x=PI*x_deg/180, and calculate Y=cos^2(x)
by using the math.h library of functions (pow() and cos()
functions). Compare the so calculated value of Y=cos^2(x)
with the approximate value y obtained by using n_term
terms of the Taylor series

cos^2(x)=0.5*(1+Sum[(-1)^n (2*x)^(2n)/(2n)!]),

where n goes from 0 to n_term. Print the relative error
100*(Y-y)/Y.

Scan an integer value of n_term. Evaluate (2n)! by an embedded
for-loop statement. Use two do/while statements to continue
the calculations for different n_term and different x_deg. For
example, use flag=1 to continue calculations for different n_term
within the inner do/while loop, and flag=0 to exit that loop.
Use Flag=1 to continue calculations for different x_deg
within the outer do/while loop, and Flag=0 to exit that loop
and go to Part B. (Recall that 0!=1).

This is my program:
#include <stdio.h>
#include <math.h>
#define PI 3.141592654

main()
{
int n_terms, n=0;
double angle_deg, angle_rad, csa, csa2, taylor, sum;
printf("\n\nPart A:\nCalculation of True and Approximate Values of cos^2(x)\n\n");
printf("Enter x_deg: \n");
scanf("%lf", &angle_deg);
angle_rad = angle_deg * (PI/180.);
csa = cos(angle_rad);
csa2 = pow(csa, 2.);
printf("True value of cos^2(x) = %f\n\n", csa2);
printf("n_term approximation of cos^2(x)\n\n");
printf("Enter number of terms:\n");
scanf("%d", &n_terms);
printf("\n%d term approximation\n", n_terms);


}

so far everything shows up correctly. I'm just stuck on how to use the for loop to calculate the taylor series.
Oct 25 '06 #1
Share this Question
Share on Google+
12 Replies


Banfa
Expert Mod 5K+
P: 8,916
The pseudo code to calculate the value of any series goes something like this

Expand|Select|Wrap|Line Numbers
  1. INITIALISE SERIES VALUE
  2.  
  3. FOR EACH TERM IN THE SERIES
  4.     SERIES VALUE = SERIES VALUE + VALUE OF TERM
  5. END FOR
  6.  
  7. OUTPUT SERIES VALUE
  8.  
Oct 25 '06 #2

P: 22
sorry, i'm new to programming
could you give like a simple example of how to do it? how many double / float values would i need to define?
Oct 26 '06 #3

Banfa
Expert Mod 5K+
P: 8,916
A minimum of 1 double value to hold the total and 2 integer values, 1 to hold the current term number and 1 to hold the number of terms to evaluate. You may need more for complex terms or to make the calculation more readable.

so taking ** to mean to the power of (e.g. 3 ** 2 = 9) to evaluate the series

1 / (2**0) + 1 / (2**1) + 1 / (2**2) + 1 / (2**3) + 1 / (2**4) + ... + 1 / (2**n)

i.e. the some of recipricals of the powers of 2 (this tends to the value 2)

the code could look something like

Expand|Select|Wrap|Line Numbers
  1. #include <stdio.h>   /* For the pow function */
  2. #include <math.h>    /* For the pow function */
  3.  
  4. int main() 
  5.     double value;
  6.     int term;
  7.     int number_of_terms = 10; /* Note I have arbitarily chose this value for this case */
  8.  
  9.     value = 0.0;  /* Initialise series value */
  10.  
  11.     /* For each term required */
  12.     for( term=0; term<number_of_terms; term++)
  13.     {
  14.         value += 1.0 / pow(2.0, term); /* Add the value of this term to the total */
  15.     }
  16.  
  17.     printf( "The sum of the recipricol of the powers of 2 to %d terms is %f\n",
  18.             number_of_terms, 
  19.             value);
  20.     return 0;
  21. }
Oct 26 '06 #4

P: 22
okay thanks
i'll see if that works and update if it does or not =]
Oct 27 '06 #5

P: 22
okay, i tried to do what you said. this is the code i came up with.

#include <stdio.h>
#include <math.h>
#define PI 3.141592654

main()
{
int n_terms, n=0;
double angle_deg, angle_rad, csa, csa2, value;
printf("\n\nPart A:\nCalculation of True and Approximate Values of cos^2(x)\n\n"
);
printf("Enter x_deg: \n");
scanf("%lf", &angle_deg);
angle_rad = angle_deg * (PI/180.);
csa = cos(angle_rad);
csa2 = pow(csa, 2.);
printf("True value of cos^2(x) = %f\n\n", csa2);
printf("n_term approximation of cos^2(x)\n\n");
printf("Enter number of terms:\n");
scanf("%d", &n_terms);
printf("\n%d term approximation\n", n_terms);
for(n=0; n<n_terms; n++){
value += 0.5 * 1 + (pow(-1.0, n) * pow((2 * angle_rad), (2 * n)) / (2 * n));
}
printf("cos^2(x) = %g", value);
}


is there a definition in C programming that lets me do factorials? because when i defined the value...i need the last (2 * n) to be (2 * n)!.
thanks
Oct 28 '06 #6

P: 22
This is my program so far. I got the factorial to work.


#include <stdio.h>
#include <math.h>
#define PI 3.141592654

main()
{
int n_terms, n=0;
double angle_deg, angle_rad, csa, csa2, value, sum, factorial;
printf("\n\nPart A:\nCalculation of True and Approximate Values of cos^2(x)\n\n");
printf("Enter x_deg: \n");
scanf("%lf", &angle_deg);
angle_rad = angle_deg * (PI/180.);
csa = cos(angle_rad);
csa2 = pow(csa, 2.);
printf("True value of cos^2(x) = %f\n\n", csa2);
printf("n_term approximation of cos^2(x)\n\n");
printf("Enter number of terms:\n");
scanf("%d", &n_terms);
printf("\n%d term approximation\n", n_terms);
for(n=0; n<n_terms; n++){
value = 0.5 * (1 + sum);
sum += (pow(-1.0, n_terms) * (pow((2. * angle_rad), (2. * n_terms))/ factorial));
factorial += (2 * (n_terms - n));
}
printf("cos^2(x) = %g\n", value);
}


however, the value for the taylor series will not come out correctly. anyone have any suggestions. this is what the taylor series should be.

cos^2(x)=0.5*(1+Sum[(-1)^n (2*x)^(2n)/(2n)!])
Oct 29 '06 #7

Banfa
Expert Mod 5K+
P: 8,916
You never initialise the value factorial
Oct 30 '06 #8

P: 3
but what if there is no math.h

can you still make a program converting the sine of a number using taylor series?

how? pls help thnx..
Apr 29 '08 #9

Banfa
Expert Mod 5K+
P: 8,916
but what if there is no math.h

can you still make a program converting the sine of a number using taylor series?

how? pls help thnx..
Why would there be no math.h?
Apr 29 '08 #10

P: 3
can nyou try it using the taylor series?
Apr 29 '08 #11

P: 3
Why would there be no math.h?
using this format:
in getting the sin of a value x:

sin(x) = x^1/1! - x^3/3! + x^5/5!....
Apr 29 '08 #12

Expert 100+
P: 849
You do know that is a Taylor series, right? Whether or not <math.h> is there has no effect on that...and <math.h> is a standard library. It should always be there, unless you're on a microcontroller or something. Note that if you're using gcc, you need to compile with the -lm flag to actually have the math library included, as well as the #include.

Thread necromancy aside, you'd just need to write your own exponent function to replace pow(), as that's the only math.h function involved in the computations.
Apr 29 '08 #13

Post your reply

Sign in to post your reply or Sign up for a free account.