C++ Program of Simpson’s 1/3rd Rule for the Evaluation of Definite Integrals

//Simpson's 1/3rd Rule for Evaluation of Definite Integrals
#include<iostream>
#include<cmath>
using namespace std;
double f(double x)
{
    double a=1/(1+x*x);    //write the function whose definite integral is to be calcuated here
    return a;
}
int main()
{    cout.precision(4);        //set the precision
    cout.setf(ios::fixed);
    int n,i;            //n is for subintervals and i is for loop
    double a,b,c,h,sum=0,integral;
    cout<<"\nEnter the limits of integration,\n\nInitial limit,a= ";
    cin>>a;
    cout<<"\nFinal limit, b=";                //get the limits of integration
    cin>>b;
    cout<<"\nEnter the no. of subintervals(IT SHOULD BE EVEN), \nn=";        //get the no. of subintervals
    cin>>n;
    double x[n+1],y[n+1];
    h=(b-a)/n;                        //get the width of the subintervals
    for (i=0;i<n+1;i++)
    {                        //loop to evaluate x0,...xn and y0,...yn
        x[i]=a+i*h;                //and store them in arrays
        y[i]=f(x[i]);
    }
    for (i=1;i<n;i+=2)
    {
        sum=sum+4.0*y[i];                //loop to evaluate 4*(y1+y3+y5+...+yn-1)
    }
    for (i=2;i<n-1;i+=2)
    {
        sum=sum+2.0*y[i];                /*loop to evaluate 4*(y1+y3+y5+...+yn-1)+
                                        2*(y2+y4+y6+...+yn-2)*/ 
    }
    integral=h/3.0*(y[0]+y[n]+sum);    //h/3*[y0+yn+4*(y1+y3+y5+...+yn-1)+2*(y2+y4+y6+...+yn-2)]
    cout<<"\nThe definite integral  is "<<integral<<"\n"<<endl;
    return 0;
} 

c++ programExplanation of the Code:

[wpedon id="7041" align="center"]

9 thoughts on “C++ Program of Simpson’s 1/3rd Rule for the Evaluation of Definite Integrals

  1. Hi,

    I want to know how to calculate double definite integration using simpson rule.

    Thanks

    1. Hi there,
      umm you could try integrating one of the variables first and then substitute the value of the definite integral back into the original equation in place of the variable, and then integrate w.r.t the other variable.
      For example: If you have an equation: xy and you need to integrate w.r.t both ‘x’ and ‘y’ between some limits. Then you should first simply integrate ‘x’ within the limits given using the simpson’s method and then substitute this value in place of ‘x’ in the original equation and then integrate that w.r.t ‘y’.
      Hope it helps.

    1. Hi there,
      I’m not familiar with what you’re asking. I would need a little more information than that. And also tell me what your approach is to the problem. Then i might be able to help you in a better way.

    1. Hi there,
      I’m not familiar with what you’re asking. I would need a little more information than that. And also tell me what your approach is to the problem. Then i might be able to help you in a better way.

  2. dude, I think something is wrong with your code, I don’t know exactly what, but the definite integral of 1/(1+x*x) from 0 to 6 is 1.40564764938 instead 1.3662, I know that Simpsons 1/3 methode isn’t an exact methode, but I changed the function to 1/(pow((1-x),1/2)) from 0 to 0.9999 and the answer would be 1.98 and your code shows me 0.9999

    1. Hi there, The program is indeed correct.

      For the example you get 1.3662 because I only used 6 sub-intervals which is less. If you increase that you get the expected 1.405.

      Regarding the example you give : 1/(pow((1-x),1/2), this is written incorrectly.

      In C++ you should be careful with floats, write is as 1/(pow((1-x),0.5) and use a lot of sub-intervals n=1000 then you get something around 1.98.

      You can copy and paste the program here a and run and you will understand what I mean.
      https://www.onlinegdb.com/online_c++_compiler

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.