Results 1 to 14 of 14
Thread: Definite Integral Calculation

092509, 15:27 #1Registered User
 Join Date
 Jul 2009
 Location
 NY
 Posts
 963
Unanswered: Definite Integral Calculation
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.e3) 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
INTEGRAL_VALUE............................ INTEGRAL_IMAGE
4.40005859378289E+001............... interval: [2.0E0, 4.0E0]: S(3 * X^2  2 * X)dx = 4.4001E1
Lenny

092509, 15:50 #2Registered User
 Join Date
 Jul 2009
 Location
 NY
 Posts
 963
This query is working fast for short intervals.
Do not use it for intervals with length > 10....
Also, if you want calculate yours integral, you have to change
Code:table (select 3 * power(Xc + step, 2)  2 * (Xc + step) Fc from sysibm.sysdummy1 ) it
Code:Source (Xstart, Xfinish, imgFunc, eps) as (select double(1), double(12), '3 * X^2  2 * X', double(1.e3) from sysibm.sysdummy1

092509, 23:42 #3Registered User
 Join Date
 Jul 2009
 Posts
 150
Lenny, do you think somebody here remember what is it "definite integral" ?
Kara S.

092609, 23:15 #4Registered User
 Join Date
 Jul 2009
 Posts
 150
Just better look
For me looks better if looks so:
Code:With Source (Xstart, Xfinish, imgFunc, eps) as (select double(2), double(4), '3 * X^2  2 * X', double(1.e3) 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 3 * power(X, 2)  2 * X as FuncVal From (select (Xc + step) as X rom 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, 3)) from Integral_calc, Source where iterno = (select max(iterno) from Integral_calc) ) select integral_value, integral_image from Integral

092709, 00:00 #5:)
 Join Date
 Jun 2003
 Location
 Toronto, Canada
 Posts
 5,516
Provided Answers: 1Originally Posted by DB2Plus
"It does not work" is not a valid problem statement.

092709, 02:03 #6SPAMMER
 Join Date
 Sep 2009
 Posts
 4
wow that is so difficul for me...to bad

092709, 08:14 #7Registered User
 Join Date
 Jul 2009
 Posts
 150
Originally Posted by n_i
Kara S.

092709, 12:39 #8Registered User
 Join Date
 Jul 2009
 Posts
 150
In my opinion 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.)
Kara S.Last edited by DB2Plus; 092709 at 15:49.

092709, 13:15 #9Registered User
 Join Date
 Jul 2009
 Posts
 150
Example with trigonometric function
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.e4) 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 rom 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

092709, 17:20 #10Registered User
 Join Date
 Jul 2009
 Posts
 150
Some notes
Originally Posted by Lenny77
We have to change
Code: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)
round(curint, 3)
Kara S.

092909, 11:20 #11Registered User
 Join Date
 Jul 2009
 Location
 NY
 Posts
 963
Small correction to trigonometric integral
Thank you Kara for yours trigonometric example !
One small correction:
Code:With Source (Xstart, Xfinish, imgFunc, eps) as (select double(0), 1.5 * asin(1.), 'sin(x)', double(1.e4) 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
Result:
interval: [0E0, 2.35619449019234E0]: S(sin(x))dx = 1.7072E0

092909, 11:57 #12Registered User
 Join Date
 Jul 2009
 Location
 NY
 Posts
 963
Check the result
We can check the result of calculation (less then 1 second).
We know, or you can find in the smart books:
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
S(six(x))dx = 1.70710678118654E+000

092909, 21:16 #13Registered User
 Join Date
 Jul 2009
 Posts
 150
Thank you, Lenny.
But where is my mistake ?
Kara S.Last edited by DB2Plus; 092909 at 21:21.

092909, 21:19 #14Registered User
 Join Date
 Jul 2009
 Posts
 150
Lenny, thanks.
Now I found my mistake:
(select (Xc + step) as X rom sysibm.sysdummy1 ) ii ....
where has to be:
Code:(select (Xc + step) as X From sysibm.sysdummy1 ) ii ....
I have made this query without test, because I don't have DB2 at my home.
Kara S.