%% Második gyakorlat: Lebegőpontos számábrázolás, példák stabil/instabil eljárásokra
% 1. feladat: Gépeljük be az 1/3 értéket MATLAB-ban. Használjuk a begépelés után a format long és format parancsokat. A help függvény segítségével értelmezzük a format parancs opcióit és kísérletezzünk azokkal!

1/3

format long 
1/3

format
1/3

% Nézzük meg a help segítségével a különböző format opciókat és kísérletezzünk!

help format

% Kísérletezés:

format short
1/3

format shorte
1/3

format shorteng
1/3

format longe
1/3

%
%
% 2. feladat: Lebegőpontos számok esetén az összeadás és  szorzás nem asszociatív művelet, valamint a disztributív tulajdonság sem áll fenn. Győzödjünk meg erről összeadás esetében, ha
% 𝑎 = 0.4, 𝑏 = − 0.5, 𝑐 = 0.1.
% Formálisan logikai operátor segítségével is ellenőrrizük az állítás mivoltát!

a=0.4;
b=-0.5;
c=0.1;
(a+b)+c==a+(b+c)

% Relációk MATLAB-ban:
% egyenlőség: ==,
% nem egyenlő: ~=.
% Logikai értékek:
% igaz: 1,
% hamis: 0.

1+2 == 2+1
1+2 ~= 2+1
1+2 == 1+1

% Alkalmazva a mi példánkra:

a+(b+c)==(a+b)+c

%
% 3. feladat: A help parancs segítségével értelmezzük az eps, realmin és realmax parancsokat. Mit jelentenek ezek az értékek a gépi számok témakörében?

help eps
help realmin
help realmax

eps
realmin
realmax

%
% Gépi számhalmaz:
% M(a,t,k^-, k^+)= \left\{ \pm a^k \left. \sum_{i=1}^t
%  x_i \; a^{-i} \; \right|\; k^- \leq k \leq k^+, \; 0 \leq x_i \leq a-1,\; i=1, \dots t \right\},
% továbbá fel szoktuk tenni, hogy x_1=1és a nullát pedig mindig hozzáadjuk a halmazhoz.
% \mathcal{M}_{\infty}: a fenti halmaz legnagyobb eleme (a legnagyobb "ábrázolható" szám).
% \varepsilon_0: a legkisebb pozitív elem (a legkisebb "ábrázolható" pozitív szám).
% \varepsilon_1: az 1 és az őt követő szám távolsága (kis egész számok esetén ez a számhalmaz "felbontása").
% Ha egy szám abszolútértéke kisebb, mint \varepsilon_0, akkor nullának tekinthető, ellenkező esetben a hozzá legközelebbi, fenti halmazban szereplő elemmel azonosítjuk, az x számhoz rendelt, halmaz-beli elem jele fl(x).
%
% 4. feladat: (a) Írjuk fel azM(2,2,-2,1)halmaz elemeit! Mi lesz \varepsilon_0, \mathcal{M}_{\infty}, \varepsilon_1?
%                   (b) Adjuk meg a fenti halmazban az alábbi számokat:
% \frac12, \; \frac{3}{16}, \; \frac{1}{10}, \; \frac{6}{10}, \; \frac{1}{\pi}.
%
% 5. feladat: Tekintsük az $a_1 + a_2 + \dots + a_n$ alakú összegek kiszámítására az alábbi két algoritmust:
% Algoritmus 1
%
% s=0;
% for i=1:n
%    s=s+a_i;
% end
% Algoritmus 2
%
% s=0;
% for i=n:-1:1
%    s=s+a_i;
% end
% Mit csinál a két algoritmus? Az eddig tanultak fényében a futtatás előtt mit várunk? Írjunk szkriptet, mely kiszámolja az S_n = \sum_{i=1}^n \frac{1}{i(i+1)} értékét mindkét algoritmussal n=999999 esetén!

...

%
% 6. feladat: Tekintsük az alábbi integrált:
% I_n = \int_0^1 \frac{x^n}{10+x} dx
% ahol n \in \mathbb{N}.
% Igazoljuk, hogy I_n \geq 0, I_{n+1} \leq I_n, és ezek alapján I_n  \rightarrow 0, ha n \rightarrow \infty.
% Igazoljuk, hogy igaz az alábbi rekurzió: I_n = \frac{1}{n} - 10 I_{n-1}, \quad I_0 = ln(1.1).
% Írjunk programot, mely adott n-ig kiszámolja a rekurzió lépéseinek értékeit. Mit tapasztalunk nagy n értékek esetén?
% Futtassuk ezt a programot!

rekurzio(32)

% Írjunk programot stabilrekurzió néven, amely az alábbi, "visszafelé" lejátszott rekurziót valósítja meg:
% I_n:=0, \quad I_{n-1}= \frac{1}{10}\left( \frac1n - I_n\right)
%                Futtassuk a programot!

stabilrekurzio(25)

%
% 7. feladat: Írjunk programot, mely ábrázolja az 1 környezetében az (x-1)^8 kifejezés értékét az alábbi függvények segítségével!
% f(x)=(x-1)^8
% g(x) =x^8-8x^7+28x^6-56x^5+70x^4-56x^3+28x^2-8x+1
%             Megoldás:

x = linspace(0.98, 1.02, 100);
f=(x-1).^8;
g=x.^8 - 8*x.^7 + 28*x.^ 6 - 56*x.^5 + 70*x.^4 - 56*x.^3 + 28*x.^2 - 8*x + 1;
plot(x, f, 'm*', x, g, 'bo')
legend('f(x)','g(x)')

%
% 8. feladat: (a) Vizsgáljuk meg az alábbi logikai kifejezések értékeit!
% 2^{66}+1==2^{66},\\
% 2^{66}+10==2^{66},\\
% 2^{66}+100==2^{66},\\
% 2^{66}+1000==2^{66},\\
% 2^{66}+10000==2^{66}.

2^66 + 1 == 2^66
2^66 + 10 == 2^66
2^66 + 100 == 2^66
2^66 + 1000 == 2^66
2^66 + 10000 == 2^66

%                     (b) Keressük meg azt a legkisebb n \in \mathbb{N} számot, amelyre a 2^{66} + n == 2^{66} kifejezés értéke hamis!

...