Numerical Integration
Numerical Integration
Numerical Integration
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Numerical</strong> <strong>Integration</strong><br />
• Newton-Cotes <strong>Numerical</strong> <strong>Integration</strong> Scheme<br />
• See Chapter 10 of E-book – clear and easy to understand<br />
d<br />
derivation of formulae for Trapezoidal & Simpson’s rules<br />
• Replace complicated function (or tabulated data) with some<br />
approximating function that is easy to integrate<br />
n<br />
I<br />
b<br />
= ∫ f<br />
(<br />
x<br />
)<br />
dx<br />
≅ ∫ f<br />
(<br />
x<br />
)<br />
dx<br />
a<br />
b<br />
= ∫ ∫<br />
a<br />
n<br />
n−1<br />
n−<br />
1<br />
f ( x)<br />
= a + a x + L+<br />
a x +<br />
0<br />
1<br />
a<br />
n<br />
x<br />
n<br />
© 2003-2006 Roberto Muscedere 1
Trapezoidal Rule<br />
• Result of integration is<br />
bounded by f(x) and the x<br />
axis between x=a and x=b<br />
• Can be approximated<br />
numerically by dividing the<br />
region into small segments<br />
each of width ∆x<br />
• The area of each segment<br />
can be approximated by a<br />
trapezoid (approximating<br />
each segment of the curve<br />
by a straight line)<br />
© 2003-2006 Roberto Muscedere 2
Trapezoidal Rule<br />
• Trapezoidal Rule is the first of the Newton-<br />
Cotes closed integration formulas (n=1)<br />
I<br />
b<br />
= ∫ f x)<br />
dx ≅<br />
∫ ( )<br />
a<br />
b<br />
( f x dx<br />
1<br />
f ( b)<br />
− f ( a)<br />
f ( x)<br />
= f ( a)<br />
+<br />
( x − a)<br />
1 b − a<br />
• f 1 (x) () is a straight line<br />
a<br />
© 2003-2006 Roberto Muscedere 3
Trapezoidal Rule<br />
• The area under this straight line is an<br />
estimate of the integral of f(x) between the<br />
limits of a and b<br />
I<br />
b<br />
= ∫<br />
a<br />
⎡<br />
⎢<br />
⎣<br />
f<br />
f ( b)<br />
− f ( a)<br />
⎤<br />
(<br />
a<br />
)<br />
+<br />
(<br />
x −<br />
a<br />
)<br />
dx<br />
b − a<br />
⎥<br />
⎦<br />
I<br />
≅<br />
( b<br />
−<br />
a)<br />
f<br />
(<br />
b<br />
)<br />
+<br />
2<br />
f<br />
( a<br />
)<br />
© 2003-2006 Roberto Muscedere 4
Trapezoidal Rule<br />
• Same result if we<br />
calculated l trapezoid<br />
graphically<br />
I<br />
≅<br />
( b<br />
I<br />
⎛<br />
f<br />
(<br />
b<br />
)<br />
−<br />
f<br />
(<br />
a<br />
)<br />
− a)<br />
⎜<br />
⎝ 2<br />
f<br />
(<br />
b<br />
)<br />
+<br />
f<br />
≅ ( b − a)<br />
2<br />
+<br />
f<br />
(<br />
a<br />
)<br />
⎞<br />
( a)<br />
⎟<br />
⎠<br />
I<br />
⎛ f ( b)<br />
− f ( a)<br />
⎞<br />
≅ ( b − a)<br />
⎜ + f ( a)<br />
⎟ ⎝<br />
2<br />
⎠<br />
f ( b)<br />
+ f ( a)<br />
I ≅ ( b − a)<br />
2<br />
© 2003-2006 Roberto Muscedere 5
Trapezoidal Rule: Example<br />
• <strong>Numerical</strong>ly integrate:<br />
f<br />
( x<br />
) = 0.2 + 25x<br />
− 200x<br />
+ 675x<br />
2<br />
3<br />
−<br />
900x<br />
4<br />
+<br />
400x<br />
5<br />
a = 0, b = 0.8<br />
(Analytical answer = 1.6405333)<br />
© 2003-2006 Roberto Muscedere 6
Trapezoidal Rule: Example<br />
f<br />
(0)<br />
= 0.2<br />
f<br />
(0.8)<br />
=<br />
0.232<br />
I<br />
≅<br />
0.2<br />
0.232<br />
⎞<br />
0 .8<br />
⎜<br />
⎛ +<br />
⎟ =<br />
⎝ 2 ⎠<br />
0.1728<br />
• Significant difference from analytical solution<br />
of 1.6405333<br />
© 2003-2006 Roberto Muscedere 7
Trapezoidal Rule: Example<br />
• Why so bad?<br />
© 2003-2006 Roberto Muscedere 8
Trapezoidal Rule<br />
• Add a series of intervals<br />
b − a<br />
= x = a x = b<br />
n<br />
n<br />
h<br />
0<br />
x<br />
1<br />
x<br />
2<br />
x n<br />
I<br />
=<br />
∫<br />
f + + +<br />
( x<br />
) dx<br />
∫<br />
f<br />
( x<br />
) dx L ∫<br />
f<br />
( x<br />
) dx<br />
x<br />
0<br />
x<br />
1<br />
x n− 1<br />
© 2003-2006 Roberto Muscedere 9
Trapezoidal Rule<br />
• Substituting the trapezoidal rule for each<br />
integral yields:<br />
f<br />
( x<br />
) +<br />
f<br />
( x<br />
)<br />
f<br />
( x<br />
) +<br />
f<br />
( x<br />
)<br />
I ≅ h<br />
0 1<br />
+ h<br />
1 2<br />
+<br />
2<br />
2<br />
f ( x<br />
L+ + h<br />
n−<br />
)<br />
+<br />
f<br />
( x<br />
1 n<br />
2<br />
)<br />
© 2003-2006 Roberto Muscedere 10
• Grouping the terms:<br />
Trapezoidal Rule<br />
I<br />
≅<br />
h<br />
⎡<br />
⎢<br />
⎣<br />
f<br />
n−1<br />
⎤<br />
( x ) + 2∑<br />
f ( x ) + f ( x )<br />
0 i n ⎥<br />
i=11<br />
⎦<br />
2 i<br />
I<br />
≅<br />
x<br />
− x<br />
n −1<br />
n 0<br />
f ∑<br />
2n<br />
i<br />
⎡<br />
⎢<br />
⎣<br />
⎤<br />
(<br />
x<br />
)<br />
+<br />
2∑<br />
f<br />
(<br />
x<br />
)<br />
+<br />
f<br />
(<br />
x )<br />
0 i n<br />
⎥<br />
=1<br />
⎦<br />
© 2003-2006 Roberto Muscedere 11
Trapezoidal Rule: Example<br />
• <strong>Numerical</strong>ly integrate (using two segments, n=2):<br />
f<br />
( x<br />
) = 0.2 + 25x<br />
− 200x<br />
+ 675x<br />
2<br />
3<br />
−<br />
900x<br />
4<br />
+<br />
400x<br />
5<br />
a = 0, b = 0.8, n = 2<br />
(Analytical answer = 1.6405333)<br />
© 2003-2006 Roberto Muscedere 12
Trapezoidal Rule: Example<br />
f<br />
(0)<br />
=<br />
0.2<br />
f<br />
(0.4)<br />
=<br />
2.456<br />
f<br />
(0.8)<br />
=<br />
0.232<br />
I<br />
≅<br />
⎛ 0.2 + 2(2.456) + 0.232 ⎞<br />
0 .8<br />
⎜<br />
⎟ =<br />
⎝ 4 ⎠<br />
1.0688<br />
• Significantly better than with one segment of<br />
the trapezoidal rule (0.1728)<br />
© 2003-2006 Roberto Muscedere 13
Trapezoidal Code (p.1)<br />
class <strong>Integration</strong> {<br />
private:<br />
double x0, xn; // limits of integration<br />
double (*f)(double x); //function to be integrated<br />
public:<br />
<strong>Integration</strong>(double (*F)(double x), double a,<br />
double b) {<br />
f=F;<br />
x0=a;<br />
xn=b;}<br />
double Trapezoidal(int n);<br />
};<br />
© 2003-2006 Roberto Muscedere 14
Trapezoidal Code (p.2)<br />
double <strong>Integration</strong>::Trapezoidal(int n)<br />
{<br />
double h=(xn-x0)/n;<br />
double sum=0.0;<br />
double x=x0;<br />
double I;<br />
for(int i=1; i
Trapezoidal Code (p.3)<br />
double FUN(double x) // User supplied function<br />
{<br />
return 0.2 + 25*x - 200*x*x + 675*x*x*x - 900*x*x*x*x<br />
+ 400*x*x*x*x*x;<br />
}<br />
int main()<br />
{<br />
<strong>Integration</strong> I(FUN,0,0.8);<br />
0 int i;<br />
for(i=1;i
Trapezoidal Code -Output<br />
n=1, I=0.1728<br />
n=2, I=1.0688<br />
n=3, I=1.36957<br />
n=4, I=1.4848<br />
n=5, I=1.53988<br />
n=6, I=1.57027<br />
n=7, I=1.58874<br />
n=8, I=1.6008<br />
n=9, I=1.60909<br />
n=10, I=1.61504<br />
n=11, I=1.61945<br />
n=12, I=1.62281<br />
n=13, I=1.62542<br />
n=14, I=1.6275<br />
n=15, I=1.62918<br />
n=16 16, I=1 1.63055<br />
© 2003-2006 Roberto Muscedere 17
Simpson’s 1/3 Rule<br />
• Simpson’s Rule is the second of the Newton-<br />
Cotes closed integration formulas (n=2) using<br />
Lagrange Interpolating Polynomials<br />
f<br />
x<br />
2 2<br />
∫<br />
f<br />
x<br />
dx<br />
≅<br />
∫<br />
I =<br />
(<br />
)<br />
f<br />
(<br />
x<br />
)<br />
dx<br />
2<br />
n<br />
x<br />
( x)<br />
x<br />
x<br />
0 0<br />
n<br />
n<br />
x −<br />
= ∑ f ( x ) ∏ −<br />
i<br />
i=<br />
0 j=<br />
0<br />
j≠i<br />
x<br />
x x i<br />
© 2003-2006 Roberto Muscedere 18<br />
j<br />
j
Simpson’s 1/3 Rule<br />
( x − x1<br />
)( x − x2)<br />
( x − x0)(<br />
x − x2)<br />
f<br />
2<br />
(<br />
x<br />
) =<br />
f<br />
(<br />
x<br />
0<br />
)<br />
+<br />
f<br />
(<br />
x<br />
1<br />
)<br />
+<br />
( x − x )( x − x ) ( x − x )( x − x )<br />
0<br />
1<br />
0<br />
( x −<br />
( x −<br />
2<br />
2<br />
x<br />
x<br />
)( x<br />
)( x<br />
− x1<br />
)<br />
− x )<br />
0 f<br />
(<br />
x2<br />
0 2 1<br />
• After integration ti and algebraic manipulation:<br />
I<br />
h<br />
3<br />
0<br />
1<br />
+<br />
x −<br />
2<br />
x<br />
h = 0<br />
2<br />
≅<br />
[ f<br />
(<br />
x<br />
)<br />
+<br />
4<br />
f<br />
(<br />
x<br />
) +<br />
f<br />
(<br />
x<br />
)<br />
]<br />
© 2003-2006 Roberto Muscedere 19<br />
1<br />
0<br />
)<br />
2<br />
1<br />
2
Trapezoidal Rule: Example<br />
• What does this represent?<br />
© 2003-2006 Roberto Muscedere 20
Simpson’s 1/3 Rule: Example<br />
• <strong>Numerical</strong>ly integrate:<br />
f<br />
( x<br />
) = 0.2 + 25x<br />
− 200x<br />
+ 675x<br />
2<br />
3<br />
−<br />
900x<br />
4<br />
+<br />
400x<br />
5<br />
x 0 = 0, x 2 = 0.8<br />
(Analytical answer = 1.6405333)<br />
© 2003-2006 Roberto Muscedere 21
Simpson’s 1/3 Rule: Example<br />
f<br />
(0)<br />
=<br />
0.2<br />
f<br />
(0.4)<br />
=<br />
2.456<br />
f<br />
(0.8)<br />
=<br />
0.232<br />
I<br />
≅<br />
⎛ 0.2 + 4(2.456) + 0.232 ⎞<br />
0 .8<br />
⎜<br />
⎟ =<br />
⎝ 6 ⎠<br />
1.36746667<br />
• Better than with Trapezoidal Rule with two<br />
segments (1.0688)<br />
© 2003-2006 Roberto Muscedere 22
Simpson’s 1/3 Rule<br />
• Add a series of intervals<br />
x − x<br />
h =<br />
2<br />
0<br />
n<br />
x<br />
2<br />
x<br />
4<br />
x n<br />
I<br />
=<br />
∫<br />
f + + +<br />
( x<br />
) dx<br />
∫<br />
f<br />
( x<br />
) dx L ∫<br />
f<br />
( x<br />
) dx<br />
x<br />
0<br />
x<br />
2<br />
x n− 2<br />
© 2003-2006 Roberto Muscedere 23
Simpson’s 1/3 Rule<br />
• Substituting Simpson’s 1/3 rule for each<br />
integral yields:<br />
I<br />
≅<br />
+<br />
f<br />
(<br />
x<br />
)<br />
+<br />
4<br />
f<br />
(<br />
x<br />
)<br />
+<br />
f<br />
(<br />
x<br />
0 1<br />
2 h<br />
2<br />
f ( x ) + 4 f ( x ) + f ( x )<br />
2h<br />
2 3 4<br />
6<br />
f ( x ) + 4 f ( x<br />
+ L<br />
+ 2hh<br />
n−<br />
n−<br />
6<br />
6<br />
)<br />
)<br />
+<br />
( x<br />
2 1 n<br />
f<br />
)<br />
© 2003-2006 Roberto Muscedere 24
Simpson’s 1/3 Rule<br />
• Grouping the terms:<br />
I<br />
≅<br />
⎛<br />
⎜<br />
⎝<br />
x<br />
−<br />
x<br />
⎞<br />
⎟<br />
⎠<br />
⎡<br />
⎢<br />
⎢<br />
f<br />
n−1<br />
∑<br />
( x ) + 4 f ( x )<br />
0 i<br />
n 0 ⎢<br />
i<br />
=<br />
1,3,5<br />
3n<br />
⎢<br />
n − 2<br />
⎢<br />
+ 2<br />
∑<br />
f<br />
( x<br />
)<br />
j= 2,4, 6<br />
⎢<br />
⎣<br />
+<br />
f<br />
( x<br />
j n<br />
⎤<br />
⎥<br />
⎥<br />
⎥<br />
)<br />
⎥<br />
⎦<br />
• n must be even<br />
© 2003-2006 Roberto Muscedere 25
Simpson’s 1/3 Rule: Example<br />
• <strong>Numerical</strong>ly integrate:<br />
f<br />
( x<br />
) = 0.2 + 25x<br />
− 200x<br />
+ 675x<br />
2<br />
3<br />
−<br />
900x<br />
4<br />
+<br />
400x<br />
5<br />
x 0 = 0, x 2 = 0.8, n = 4<br />
(Analytical answer = 1.6405333)<br />
© 2003-2006 Roberto Muscedere 26
I<br />
f<br />
Simpson’s 1/3 Rule: Example<br />
(0.4)<br />
≅<br />
f<br />
( 0) = 0.2 f (0.2) = 1.288<br />
= 2.456 f (0.6) = 3.464 f<br />
(0.8)<br />
0.232<br />
⎛ 0.2<br />
+<br />
4(1.288<br />
+<br />
3.464)<br />
+<br />
2(2.456)<br />
+<br />
0.232<br />
⎞<br />
0.8⎜<br />
⎟<br />
⎝<br />
12<br />
⎠<br />
=1.62346667<br />
• Better than with Trapezoidal Rule with eight<br />
segments (1.6008)<br />
=<br />
© 2003-2006 Roberto Muscedere 27
Simpson’s 1/3 Code (p.1)<br />
class <strong>Integration</strong> {<br />
private:<br />
double x0, xn; // limits of integration<br />
double (*f)(double x); //function to be integrated<br />
public:<br />
<strong>Integration</strong>(double (*F)(double x), double a,<br />
double b) {<br />
f=F;<br />
x0=a;<br />
xn=b;}<br />
double Trapezoidal(int n);<br />
double Simpsons13(int n);<br />
};<br />
© 2003-2006 Roberto Muscedere 28
Simpson’s 1/3 Code (p.2)<br />
double <strong>Integration</strong>::Trapezoidal(int n)<br />
{<br />
double h=(xn-x0)/n;<br />
double sum=0.0;<br />
double x=x0;<br />
double I;<br />
for(int i=1; i
Simpson’s 1/3 Code (p.3)<br />
double <strong>Integration</strong>::Simpsons13(int n)<br />
{<br />
double h=(xn-x0)/n;<br />
double sum=0.0;<br />
double x=x0;<br />
double I;<br />
for(int i=1; i
Simpson’s 1/3 Code (p.4)<br />
double FUN(double x) // User supplied function {<br />
return 0.2 + 25*x - 200*x*x * + 675*x*x*x * * - 900*x*x*x*x* * *<br />
+ 400*x*x*x*x*x; }<br />
int main() {<br />
<strong>Integration</strong> I(FUN,0,0.8);<br />
int i;<br />
for(i=2;i
Simpson’s 1/3 Code -Output<br />
n=2, I(trap)=1.0688, I(simp)=1.36747<br />
n=4, I(trap)=1.4848, I(simp)=1.62347<br />
n=6, I(trap)=1.57027, I(simp)=1.63716<br />
n=8, I(trap)=1.6008, I(simp)=1.63947<br />
n=10, I(trap)=1.61504, I(simp)=1.6401<br />
n=12, I(trap)=1.62281, I(simp)=1.64032<br />
n=14, I(trap)=1.6275, I(simp)=1.64042<br />
n=16, I(trap)=1.63055, I(simp)=1.64047<br />
© 2003-2006 Roberto Muscedere 32