DZone Forums
Go Back   DZone Forums > Community > Databases & SQL > IBM DB2
Reload this Page Definite Integral Calculation
Notices
Reply
 
LinkBack Thread Tools Display Modes
  (#1 (permalink)) Old
Member
 
Posts: 28
Thanks: 0
Thanked 0 Times in 0 Posts
Join Date: Sep 2009
Arrow Definite Integral Calculation - 09-30-2009, 11:27 PM

Definite Integral interval [a, b]: Sf(x)dx = G(b) - G(a) where G'(x) = f(x) , or differential of G(x) = f(x).

Integrals appear in many practical situations.
Consider a swimming pool. If it is rectangular, then from its length, width, and depth we can easily determine the volume of water it can contain (to fill it), the area of its surface (to cover it), and the length of its edge (to rope it).

But if it is oval with a rounded bottom, all of these quantities call for integrals. Practical approximations may suffice for such trivial examples, but precision engineering (of any discipline) requires exact and rigorous values for these elements.

I create the query which calculate integral of 3 * X^2 - 2 * X in interval [2, 4]....

S(3 * X^2 - 2 * X)dx = X^3 - X^2 and exact value of integral will be
S = (4^3 - 4^2) - (2^3 - 2^2) = 48 - 4 = 44.

We know nothing in our solution about exact value and differential and suppose to calculate approximate value of integral.
Process will stop when the absolute difference between current value of integral and previous become less or equal some eps real number.

Code:
With
Source (Xstart, Xfinish, imgFunc, eps) as
(select double(2), double(4), '3 * X^2 - 2 * X', double(1.e-3)
   from sysibm.sysdummy1 
)
,
Integral_calc (Xs, Xf, Xc, step, curint, prevint, eps, iterno) as
(select Xstart, Xfinish, double(Xstart - (Xfinish - Xstart) / 10.) Xc, 
                double((Xfinish - Xstart) / 10.) step,  double(0), double(0), eps, int(0) 
 from Source
union All
select Xs, Xf, Xc + step, step, curint + Fc * step, prevint, eps, iterno + 1
  from Integral_calc, table
(select 3 * power(Xc + step, 2) - 2 * (Xc + step) Fc 
   from sysibm.sysdummy1 ) it
where  Xc + step <= Xf 
Union All
select Xs, Xf, Xs - (step / 2.), step / 2., 0., curint, eps, iterno + 1
  from Integral_calc
where Xc + step > Xf 
  and abs(curint - prevint) > eps
)
,
Integral(integral_value, integral_image) as 
(select curint, 'interval: [' || varchar(Xs) || ', ' || varchar(Xf) || ']:  S' || '(' 
                              || imgFunc || ')dx = ' || varchar(round(curint, 3))    
from Integral_calc, Source 
where iterno = (select max(iterno) from Integral_calc)
)
select integral_value, integral_image from Integral
Result of calculation:

Quote:
INTEGRAL_VALUE............................ INTEGRAL_IMAGE
4.40005859378289E+001............... interval: [2.0E0, 4.0E0]: S(3 * X^2 - 2 * X)dx = 4.4001E1
Could be very useful for students and engineers.

Lenny
Reply With Quote
  (#2 (permalink)) Old
Member
 
Posts: 28
Thanks: 0
Thanked 0 Times in 0 Posts
Join Date: Sep 2009
Arrow Example with trigonometric function - 10-01-2009, 06:05 AM

When interval includes special numbers pi or e, we have to use something special,
because we don't know exact values of these two numbers and have to use scalar functions, e.g.
pi = 2 * asin(1.0) , e = exp(1.)...

For example: interval [0, 3/4pi] S sin(x)dx:

Code:
With
Source (Xstart, Xfinish, imgFunc, eps) as
(select double(0), 1.5 * asin(1.), 'sin(x)', double(1.e-4)
   from sysibm.sysdummy1 
)
,
Integral_calc (Xs, Xf, Xc, step, CurInt, PrevInt, eps, iterno) as
(select Xstart, Xfinish, double(Xstart - (Xfinish - Xstart) / 10.) Xc, 
                double((Xfinish - Xstart) / 10.) step,  double(0), double(0), eps, int(0) 
 from Source
union All
select Xs, Xf, Xc + step, step, CurInt + FuncVal * step, PrevInt, eps, 
        iterno + 1

From Integral_calc, 
table (select sin(x) as FuncVal 
           From 
           (select (Xc + step) as X from sysibm.sysdummy1 ) ii     ) it
where  Xc + step <= Xf 

Union All
select Xs, Xf, Xs - (step / 2.), step / 2., 0., CurInt, eps, iterno + 1
  from Integral_calc
where Xc + step > Xf 
  and abs(curint - prevint) > eps
)
,
Integral(integral_value, integral_image) as 
(select curint, 'interval: [' || varchar(Xs) || ', ' || varchar(Xf) || ']:  S' || '(' 
                              || imgFunc || ')dx = ' || varchar(round(curint, 4))    
from Integral_calc, Source 
where iterno = (select max(iterno) from Integral_calc)
)
select integral_value, integral_image from Integral
We can check the result of calculation (less then 1 second).

We know, or you can find in the smart books:

Quote:
S(six(x))dx = -cos(x)
So, on interval: [0E0, 2.35619449019234E0] exact value of integral will be:

Code:
select -cos(2.35619449019234E0) - (-cos(0E0)) 
from sysibm.sysdummy1
E.g.

Quote:
S(six(x))dx = 1.70710678118654E+000
Lenny
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off



Copyright 1997-2009, DZone, Inc.
vBulletin Skin developed by: vBStyles.com