Brook Taylor
|
Ariketa hau egiteko, ikusitako hauek gogoratu Azp-1 (zero bertsioa), Azp-2 (zero bertsioa) eta Azp-3 (zero bertsioa). Klikatu irudi honen gainean eta grafikoki ikusiko duzu Taylor polinomioa kosinu funtzioarentzat:
Angelu baten kosinua Taylor-ren arabera honela kalkula daiteke:
Non x radianetan emaniko angelua den.
|
Programa bat idatzi kosinua kalkulatuko duena aurreko segidaren N batugai erabiliz. Batugaien N kopurua ez da ezaguna, batugaiak aintzat hartuko dira azken batugaiaren balio absolutua 0.00001 baino txikiagoa izan arte adibidez (doikuntza hori teklatuaren bitartez emango du programaren erabiltzaileak, edo bestela balio konstante bat izan dadila).
Algoritmoa:
- Erabiliko den rDoikuntza prezisioa teklatuz irakurri (edo konstante ezagun bat izan dadila)
- Lehenego koadranteko rAng angelua graduetan, teklatuz irakurri
- Lehenego koadranteko rAng angelua radianetara igaro rX lortuz
- rX angeluari dagokion rKos kosinua lortu Taylor bitartez (azken batugaia rDoikuntza baino txikiagoa)
- Taylor bitartez lortu den rKos emaitza eta cos(rX) balioa pantailan erakutsi eta bi balioak elkar alderatu
Demagun lehen kasu honetan batukaria kalkulatzen duen azpiprogramak emaitza bakarra itzuli behar duela, kosinua. Hori dela eta, funtzio baten bitartez programatuko dugu. Diogunez, azpiprograma hori funtzio bat izango da bere goiburukoa hauxe delarik:
function fnrKosinuaKalkulatu(rX, rDoikuntza: real): real ;
Sarrera: rX radianak (teklatuz irakurritako rAngelua graduak radianetara igarota)Sarrera: rDoikuntza (gogoratu bertsio honetan doikuntza programa nagusian irakurtzen dela)
Hauxe izan daiteke lehen bertsioaren Programa Nagusia:
12345678910111213141516171819202122232425262728{-----------------------Programa Nagusia-----------------------}
var
rAng, rX, rKosinua, rDoikuntza:
real
;
begin
clrscr;
repeat
write
(
' Angelu baten kosinua kalkulatzeko prezisioa eman (adibidez 0.0005): '
);
readln(rDoikuntza);
until
(rDoikuntza >
0.0
)
and
(rDoikuntza <
0.0005
);
repeat
write
(
' Eman lehenengo koadranteko angelua graduetan: '
);
readln(rAng);
until
(rAng >=
0.0
)
and
(rAng <
90.0
);
rX := rAng*
2
*Pi/
360
;
(* sarrerako angelua radianetara igaro *)
writeln
(
' 1. koadrantean: '
, rAng:
0
:
3
,
' gradu = '
, rX:
0
:
5
,
' radian'
);
writeln
;
rKosinua := fnrKosinuaKalkulatu(rX, rDoikuntza);
writeln
;
writeln
(
' Gure programaz lortutako kosinua['
,rX:
0
:
5
,
' radian] -----> '
,rKosinua:
0
:
5
);
writeln
(
' cos() funtzioak ematen duena cos('
,rX:
0
:
5
,
' radian) -----> '
,cos(rX):
0
:
5
);
writeln
;
writeln
(
' RETURN tekla sakatu programatik irteteko'
);
readln;
end
.
Programaren...
TaylorFuntzioz1.pas
...lehen hurbilketa honek x sarrerako angelua 0 eta Π/2 artekoa izan dadila. Gero, programa ongi dabilenean kodifikazioa aberastu edozein koadranteko angelurako, hau da sarrerako x angelua 0 eta 2Π artekoa izan daitekeela. Amaitzeko, programa osatu edozein angelurako, hots, sarrerako x angelua 2Π baino handiagoa denean ere, laguntza hemen.
Demagun orain bigarren bertsio honetan bi aldaketa egingo ditugula. Batetik doikuntza konstante batekin lan egingo dugula, eta bestetik programa nagusiak beste emaitza bat agertu behar duela ere (iterazioen kopurua). Beraz, kosinua kalkulatzeko metodo bera erabiliko dugu baina azpiprogramak itzuli beharko dituen emaitzak bi izango dira:
- kosinuaren balioa, eta horrez gain
- zenbat iteraziotan lortu den kalkulatzea
procedure KosinuaKalkulatu(rX: real; var iKont: integer; var rEmaitza: real) ;
Sarrera: rX angelua radianetan (gogoratu bertsio honetan doikuntza konstante bat dela)Irteera: iKont iterazioen kopuruaIrteera: rEmaitza kosinuaren kalkulua
Hauxe da bigarren bertsioaren Programa Nagusia, non EPSILON doikuntza konstante bat den:
1234567891011121314151617181920212223242526{------------------PROGRAMA NAGUSIA------------------}
var
rAng, rX, rKosinua:
real
;
iIterazioKopurua:
integer
;
begin
clrscr;
writeln
(
'1. koadranteko angelu baten kosinua kalkulatu '
, EPSILON:
0
:
4
,
' prezisioarekin'
);
writeln
;
repeat
write
(
'Lehenengo koadranteko angelua graduetan: '
);
readln(rAng);
until
(rAng <=
90
)
and
(rAng >=
0
);
rX := rAng*
2
*Pi/
360
;
(* sarrerako angelua radianetara igaro *)
KosinuaKalkulatu(rX, rKosinua, iIterazioKopurua);
(* bi emaitza *)
writeln
;
writeln
(
'Emaitza '
, iIterazioKopurua,
' iterazioetan lortu da'
);
writeln
(
'Gure programaz lortutako kosinua['
,rAng:
0
:
3
,
' gradu] -----> '
,rKosinua:
0
:
5
);
writeln
(
'cos() funtzioak ematen duena cos('
,rAng:
0
:
3
,
' gradu) -----> '
,cos(rX):
0
:
5
);
writeln
;
writeln
(
'RETURN tekla sakatu programatik irteteko'
);
readln;
end
.
Programaren...
TaylorProzeduraFuntzioak.pas
...bigarren bertsio honek x sarrerako angelua 0 eta Π/2 artekoa izan dadila. Gero, programa ongi dabilenean kodifikazioa aberastu edozein koadranteko angelurako, hau da sarrerako x angelua 0 eta 2Π artekoa izan daitekeela. Amaitzeko, programa osatu edozein angelurako, hots, sarrerako x angelua 2Π baino handiagoa denean ere, laguntza hemen.
Emaitza laster...
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.