Using Taylor Series

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • wuzertheloser
    New Member
    • Oct 2006
    • 22

    Using Taylor Series

    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\nPar t 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.
  • Banfa
    Recognized Expert Expert
    • Feb 2006
    • 9067

    #2
    The pseudo code to calculate the value of any series goes something like this

    Code:
    INITIALISE SERIES VALUE
    
    FOR EACH TERM IN THE SERIES
        SERIES VALUE = SERIES VALUE + VALUE OF TERM
    END FOR
    
    OUTPUT SERIES VALUE

    Comment

    • wuzertheloser
      New Member
      • Oct 2006
      • 22

      #3
      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?

      Comment

      • Banfa
        Recognized Expert Expert
        • Feb 2006
        • 9067

        #4
        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

        Code:
        #include <stdio.h>   /* For the pow function */
        #include <math.h>    /* For the pow function */
        
        int main() 
        { 
            double value;
            int term;
            int number_of_terms = 10; /* Note I have arbitarily chose this value for this case */
        
            value = 0.0;  /* Initialise series value */
        
            /* For each term required */
            for( term=0; term<number_of_terms; term++)
            {
                value += 1.0 / pow(2.0, term); /* Add the value of this term to the total */
            }
        
            printf( "The sum of the recipricol of the powers of 2 to %d terms is %f\n",
                    number_of_terms, 
                    value);
            return 0;
        }

        Comment

        • wuzertheloser
          New Member
          • Oct 2006
          • 22

          #5
          okay thanks
          i'll see if that works and update if it does or not =]

          Comment

          • wuzertheloser
            New Member
            • Oct 2006
            • 22

            #6
            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\nPar t 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

            Comment

            • wuzertheloser
              New Member
              • Oct 2006
              • 22

              #7
              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\nPar t 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)!])

              Comment

              • Banfa
                Recognized Expert Expert
                • Feb 2006
                • 9067

                #8
                You never initialise the value factorial

                Comment

                • jhex21
                  New Member
                  • Apr 2008
                  • 3

                  #9
                  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..

                  Comment

                  • Banfa
                    Recognized Expert Expert
                    • Feb 2006
                    • 9067

                    #10
                    Originally posted by jhex21
                    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?

                    Comment

                    • jhex21
                      New Member
                      • Apr 2008
                      • 3

                      #11
                      can nyou try it using the taylor series?

                      Comment

                      • jhex21
                        New Member
                        • Apr 2008
                        • 3

                        #12
                        Originally posted by Banfa
                        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!....

                        Comment

                        • Laharl
                          Recognized Expert Contributor
                          • Sep 2007
                          • 849

                          #13
                          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.

                          Comment

                          Working...