Thử thách khá là đơn giản: Sử dụng SQL để viết một function tính toán cho hàm sau:

Không phải mọi hàm đều có tích phân, nhưng đối với nhiều hàm, một phép tính gần đúng hợp lý của giá trị có thể được thực hiện với Riemann Sums hoặc bạn thường có thể nhận được một giá trị gần đúng hơn với cùng một lượng tính toán bằng cách sử dụng Quy tắc Trapezoidal

Với một chút sử dụng các biểu thức bảng phổ biến (hay còn gọi là mệnh đề WITH) và thực tế là các hàm do người dùng xác định có thể được nhúng trực tiếp vào bên trong chúng, đây là một SQL tích hợp đơn giản
SQL> with
2 function f(x number) return number is
3 begin
4 return 3*x*x + 2*x;
5 end;
6 boundaries as ( select 1 x_start, 5 x_end, 0.000001 delta from dual )
7 select
8 sum(
9 case when level in (1, ( x_end - x_start ) / delta) then 1 else 2 end *
10 f(x_start + (level-1)*delta)
11 )*delta/2 integ
12 from boundaries
13 connect by level <= ( x_end - x_start ) / delta;
14 /
INTEG
----------
147.999915
Hoặc nếu bạn thích ANSI và thích đệ quy WITH hơn là CONNECT BY thì bạn có thể làm tương tự với điều này:
SQL> with
2 function f(x number) return number is
3 begin
4 return 3*x*x + 2*x;
5 end;
6 boundaries as ( select 1 x_start, 5 x_end, 0.00001 delta from dual ),
7 integral(seq,fnc,inp) as
8 (
9 select 1 seq, f(x_start) fnc, x_start inp from boundaries
10 union all
11 select seq+1, f(inp+delta), inp+delta
12 from integral, boundaries
13 where inp+delta <= x_end
14 )
15 select
16 sum(decode(seq,1,1,x_end,1,2)*fnc)*delta/2
17 from integral, boundaries
18 /
SUM(DECODE(SEQ,1,1,X_END,1,2)*FNC)*DELTA/2
------------------------------------------
148.0004
Leave a Review