Määratud integraal

Määratud integraal on kõverjoonelise trapetsi pindala; trapets moodustub integreerimisvahemiku otste, s.t. sirgete X=a ja X=b, sirge Y=0 (x-telg) ja integreeritava funktsiooni f(x) graafiku vahel. Integraali numbrilise väärtuse saamiseks asendatakse funktsiooni graafik (kõver) sirglõikudega, kõige lihsamal juhul vaid yhe sirglõiguga.
Täpsema tulemuse saamiseks jagatakse integreerimisvahemik pooleks, arvutatakse integraali väärtused I1, I2 pooltel ja saadakse kogu integraal pindalate summana I = I1+I2. Et saada veel täpsemat tulemust, võib osade poolitamist jätkata; poolitamiste arvu nimetatakse integreerimismeetodi astmeks. Kuna integreerimismeetodi astme tõstmisel arvutusvead akumuleeruvad (liituvad), ei saa astme tõstmisega tulemust lõpmatuseni parandada. Õigete kümnendkohtade arvu tulemuses võib hinnata näiteks nii, et arvutatakse integraal kaks korda, tõstes teine kord meetodi järku ühe võrra; kokkulangevad kümnendkohad on kindlasti õiged.
funktsioon(X,Y) :-
Y is X * X.
integraal(X1,X2,1,I) :-
funktsioon(X1,Y1),
funktsioon(X2,Y2),
trapets(X1,Y1,X2,Y2,I).
integraal(X1,X2,N,I) :-
N > 1,
X is (X1 + X2) / 2,
N1 is N - 1,
integraal(X1,X,N1,I1),
integraal(X,X2,N1,I2),
I is I1 + I2.
integraal :-
write('Anna integreerimisvahemik: a= '),
read(A),
write('b= '),
read(B),
write('Integreerimismeetodi aste: '),
read(N),
integraal(A,B,N,I),
nl,
write('Tulemus: '),
write(I),
nl.
trapets(X1,Y1,X2,Y2,S) :-
H is (Y1 + Y2) / 2,
S is (X2 - X1) * H.

Ülesandeid:
1. Ülalkirjeldatud meetod on väga ebaeffektiivne. Kuna integreerimismeetodi järgu tõstmine suurendab Prologi alamülesannete arvu kaks korda, tekib näiteks kuuendat järku meetodi kasutamisel 2^6 = 64 alamülesannet ja isegi madala järguga meetod võib anda teate "Stack overflow".
"Prologilik" lähenemine oleks lõpprekusriive: algul arvutatakse meetodi järgu põhjal kõige lühema integreerimislõigu pikkus (selle lõigu pikkus, millel kasutatakse trapetsit) ja hakatakse siis nende trapetsite pindala vasakult-paremale järjest arvutama ja kokku liitma. Koosta lõpprekursiivne predikaat numbriliseks integreerimiseks.
2. Teha programm, mis arvutab määratud integrale ristkülikvalemi põhjal: esimest järku valemiga arvutades leitakse lõigu keskpunk ja asendatakse integraal ristkülikuga, mille kõrgus on võrdne integreeritava funktsiooni väärtusega lõigu keskpunktis; kõrgemat järku valem saadakse lõigu järk-järgulisel poolitamisel.


Küsimused, probleemid: ©2004 Jaak Henno