CONST NEKONECNO=1,6 E38; {Pomocná konstanta pro nekonečno.}
Při výpočtu hodnot funkcí s přesností EPSILON platí, že čím menší hodnota EPSILON, tím vyšší přesnost.
Doporučené omezení argumentů u jednotlivých funkcí, které aproximujeme v příkladech 1 - 4:
Odmocnina: <0, 1*E15>
Sinus: <-100*PI, 100*PI> radiánů
Logaritmus: (0,3500>
E na x-tou: <-80, 60>
Algoritmy:
Výpočet odmocniny
Výpočet sinu X
Výpočet E na X-tou
Výpočet logaritmu X
Největší společný dělitel (REKURSE.PAS)
Goniometrické funkce
Cyklometrické funkce
Hyperbolické funkce
Hyperbolometrické funkce
Převod stupňů a radiánů
Výpočet určitého integrálu obdélníkovou metodou
Faktoriál (REKURSE.PAS)
Výpočet binomického koeficientu (REKURSE.PAS)
Rozptyl
Zadání:
Function Odmocnina(x,epsilon:real):real;
{Funkce vypocita odmocninu z nezaporneho cisla x s presnosti epsilon.
Je-li zadane cislo mensi nez 0, vraci funkce nulu.}
var Pocatecni,Clen,StaryClen:real;
begin {Odmocnina}
if x>0 then
begin
Pocatecni:=x;
StaryClen:=Pocatecni;
Clen:=0.5*(Pocatecni/StaryClen+StaryClen);;
while abs(Clen-StaryClen)>Epsilon*0.1 do
begin
StaryClen:=Clen;
Clen:=0.5*(Pocatecni/StaryClen+StaryClen);
end;
Odmocnina:=Clen;
end
else Odmocnina:=0;
end; {Odmocnina}
Seznam algoritmů
Zadání:
Function Sinus(x,epsilon:real):real;
{Funkce vypocita sinus realneho cisla x s presnosti epsilon}
var Soucet,Clen:real;
Poradi:integer;
begin {Sinus}
{Presun argumentu do intervalu <0,2*PI>}
while x>=2*Pi do x:=x-2*Pi;
while x<=0 do x:=x+2*Pi;
{Vlastni vypocet}
Clen:=x;
Poradi:=1;
Soucet:=Clen;
while abs(Clen)>(abs(Soucet)*Epsilon*0.1) do
begin
Poradi:=Poradi+2;
Clen:=-Clen*x*x/(Poradi*(Poradi-1));
Soucet:=Soucet+Clen;
end;
Sinus:=Soucet;
end; {Sinus}
Seznam algoritmů
Zadání:
Function EnaX(x,epsilon:real):real;
{Funkce vypocita hodnotu E na x-tou s presnosti epsilon}
var Soucet,Clen:real;
Poradi:integer;
begin {EnaX}
if x>=0 then
begin
Clen:=1;
Soucet:=Clen;
Poradi:=0;
while abs(Clen)>=Epsilon*0.1 do
begin
Poradi:=Poradi+1;
Clen:=Clen*x/Poradi;
Soucet:=Soucet+Clen;
end;
end
else Soucet:=1/Enax(abs(x),epsilon);
EnaX:=Soucet;
end; {EnaX}
Seznam algoritmů
Zadání:
( x-1 (x-1)^3 (x-1)^5 )
Ln x = 2 * ( --- + --------- + --------- + ... )
( x+1 3*(x+1)^3 5*(x+1)^5 )
Algoritmus:
Function Logaritmus(x,epsilon:real):real;
{Funkce vypocita prirozeny logaritmus cisla x s presnosti epsilon}
var clen,staryclen,soucet:real;
poradi:longint;
begin {Logaritmus}
Clen:=(x-1)/(x+1);
Soucet:=Clen;
Poradi:=1;
while abs(Clen)>Epsilon*abs(Soucet) do
begin
Clen:=(Clen*Poradi*(x-1)*(x-1))/((x+1)*(x+1)*(Poradi+2));
Poradi:=Poradi+2;
Soucet:=Soucet+Clen;
end;
Logaritmus:=2*Soucet;
end; {Logaritmus}
Seznam algoritmů
Zadání:
Function NSD(a,b:integer):integer;
{Funkce vypocte nejvetsi spolecny delitel dvou cisel.}
begin {NSD}
if a=b then NSD:=a
else if a>b then NSD:=NSD(a-b,b)
else NSD:=NSD(a,b-a);
end; {NSD}
Seznam algoritmů
Zadání:
Function TG(X:real):real;
{Funkce vypocte tangens X}
begin {TG}
if cos(x)< 1E-30 then Tg:=Nekonecno else
TG:=Sin(x)/Cos(x);
end; {TG}
Function CoTg(X:real):real;
{Funkce vypocte cotangens X}
begin {CoTg}
if sin(x)< 1E-30 then CoTg:=Nekonecno else
CoTg:=Cos(x)/Sin(x);
end; {CoTg}
Seznam algoritmů
Zadání:
Function ArcSin(x:real):real;
{Funkce vypocte arcussinus X}
begin {ArcSin}
ArcSin:=ArcTan(x/sqrt(1-sqr(x)));
end; {ArcSin}
Function ArcCos(x:real):real;
{Funkce vypocte arcuscosinus X}
begin {ArcCos}
ArcCos:=ArcTan(sqrt(1-sqr(x))/x)
end; {ArcCos}
Function ArcCoTg(x:real):real;
{Funkce vypocte arcuscotangens X}
begin {ArcCoTg}
if x< 0 then ArcCoTg:=ArcTan(1/x) else ArcCoTg:=ArcTan(1/x)+PI;
end; {ArcCoTg}
Seznam algoritmů
Zadání:
Function SinH(x:real):real;
{Funkce vypocte sinus hyperbolicky X}
begin {SinH}
SinH:=(Exp(x)-Exp(-x))/2;
end; {SinH}
Function CosH(x:real):real;
{Funkce vypocte cosinus hyperbolicky X}
begin {CosH}
CosH:=(Exp(x)+Exp(-x))/2;
end; {CosH}
Function TgH(x:real):real;
{Funkce vypocte tangens hyperbolicky X}
begin {TgH}
TgH:=(Exp(x)-Exp(-x))/(Exp(x)+Exp(-x));
end; {TgH}
Function CoTgH(x:real):real;
{Funkce vypocte cotangens hyperbolicky X}
begin {CoTgH}
CoTgH:=(Exp(x)+Exp(-x))/(Exp(x)-Exp(-x));
end; {CoTgH}
Seznam algoritmů
Zadání:
Function ArgSinH(x:real):real;
{Funkce vypocte agrument sinu hyperbolickeho X}
begin {ArgSinH}
ArgSinH:=ln(x+sqrt(sqr(x)+1));
end; {ArgSinH}
Function ArgCosH(x:real):real;
{Funkce vypocte agrument cosinu hyperbolickeho X}
begin {ArgCosH}
ArgCosH:=ln(x+sqrt(sqr(x)-1));
end; {ArgCosH}
Function ArgTgH(x:real):real;
{Funkce vypocte agrument tangens hyperbolickeho X}
begin {ArgTgH}
ArgTgH:=ln((1+x)/(1-x))/2;
end; {ArgTgH}
Function ArgCoTgH(x:real):real;
{Funkce vypocte agrument cotangens hyperbolickeho X}
begin {ArgCoTgH}
ArgCoTgH:=ln((x+1)/(x-1))/2;
end; {ArgCoTgH}
Seznam algoritmů
Zadání:
Function Rad2St(Rad:real):real;
{Funkce prevede radiany na stupne}
begin {Rad2St}
Rad2St:=Rad/Pi*180;
end; {Rad2St}
Function St2Rad(St:real):real;
{Funkce prevede stupne na radiany}
begin {St2Rad}
St2Rad:=St/180*Pi;
end; {St2Rad}
Seznam algoritmů
Zadání:
Function Obdelnik(function F(X:real):real;A,B,DX:real):real;
{Funkce vypocte integral realne funkce F(x) obdelnikovou metodou.
A - dolni mez, B - horni mez, DX - krok.}
var Soucet:real;
begin {Obdelnik}
Soucet:=0;
while A < B do
begin
Soucet:=Soucet+F(A);
A:=A+DX;
end;
Obdelnik:=Soucet*DX;
end; {Obdelnik}
Seznam algoritmů
Zadání:
Function Faktorial(N:longint):longint;
{Funkce vypocte faktorial zadaneho cisla (do 12)}
begin {Faktorial}
if N=1 then Faktorial:=1 else
Faktorial:=Faktorial(n-1)*n;
end; {Faktorial}
Seznam algoritmů
Zadání:
( n ) n! ( ) = -------- ( k ) k!(n-k)!Lze však odvodit následující rekurzívní vztahy:
( n ) ( n ) n ( n-1 ) ( ) = 1 ; ( ) = - ( ) ( 0 ) ( k ) k ( k-1 )Algoritmus:
Function BinKoef(n,k:integer):integer;
{Funkce vypocte binomicky koeficient (n nad k)}
begin {BinKoef}
if k=0 then
BinKoef:=1
else
BinKoef:=BinKoef(n-1,k-1) * n div k;
end; {BinKoef}
Seznam algoritmů
Zadání:
[( )2]
SUMA[(Nprum - Ni) ]
[( ) ]
ROZPTYL = -------------------
N
Jednoduchým řešením výpočtu rozptylu je užití dvou průchodů, což však zejména
při větším počtu položek není výhodné. Vhodnou matematickou úpravou lze dojít
k následujícímu vztahu:
2
SUMA
SUMAKV - 2*-----
N
ROZPTYL = ----------------
N
Kde SUMAKV se získá vztahem SUMAKV:=SUMAKV+SQR(POLOZKA), SUMA:=SUMA+POLOZKA,
N je počet položek.Algoritmus:
SUMA:=0;
SUMAKV:=0;
POCET:=0;
WHILE "Jsou polozky" DO BEGIN
"zpracovavej polozky"
SUMA:=SUMA+"Hodnota polozky";
SUMAKV:=SUMAKV+SQR("Hodnota polozky");
POCET:=POCET+1;
END; {while]
ROZPTYL:=(SUMAKV-2*SQR(SUMA)/POCET)/POCET;
Seznam algoritmů
|
|
13. 2. 2000 |
|
|
||
|
|