%% Első gyakorlat
%% Lebegőpontos számábrázolás, alapműveletek, 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: Előadáson tanultuk, hogy lebegőpontos számok esetén az összeadás és a 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!

format long
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 tanult gépi számok témakör fényében?

help eps
help realmin
help realmax

eps
realmin
realmax

%
% 4. 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, azaz (10^6 - 1) esetén!

%

%
% 5. 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 0.
% 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?

%  Irhatnank ide, ha a MATLAB nem lenne ennyire szeszelyes. Irjuk kulon file-ba
%function I = rekurzio(n)
%    
%    % Az n lesz a bemeneti paraméter.
%    % Legyen I az a tömb, ami tartalmazza a rekurzió értékeit.
%
%end

% Futtassuk ezt a programot

rekurzio(32)

% A különös viselkedés oka, hogy a 10-zel való szorzások során a gépi hiba minden egyes lépésben tízszeresére nő, így 14 lépés után már nagyobb lesz, mint maga a valós eredmény (a gépi hiba körülbelül {10}^{-16} nagyságrendű, lásd a korábban vizsgált esp parancsot).
% Í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)

%  Irhatnank ide, ha a MATLAB nem lenne ennyire szeszelyes. Irjuk kulon file-ba
%
%function I = stabilrekurzio(n)
%    % Az n lesz a bemeneti paraméter.
%    % Legyen I az a tömb, ami tartalmazza a rekurzió értékeit. 
%
%end

% Futtassuk a programot!

stabilrekurzio(25)

% Így megkaptuk a stabil rekurziót (hiszen az első elem pont az előző algoritmus első eleme lesz).
%
% 6. 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

% plot
% legend

%
% 7. 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}.

%

%                     (b) Melyik az a legkisebb n \in \mathbb{N} szám, amelyre a 2^{66} + n == 2^{66} MATLAB-kifejezés értéke hamis!



%
% Szorgalmi feladat: Tekintsük az alábbi integrált:
% I_n = \int_0^{1} x^n \sin(x) dx, \qquad n \in \mathbb{N}.
%                                 (a) Mutassuk meg, hogy I_n \geq 0, I_{n+1} \leq I_n, és ezek alapján I_n  \rightarrow 0, ha n \rightarrow 0.
%                                 (b) Adjunk rekurziót I_n-re, továbbá egy program segítségével számoljuk ki I_{10}, I_{20} és I_{30} értékeit! Mit tapasztalunk?
% I_{n}=-\cos(1)+n \sin(1)-n(n-1)I_{n-2}



% Szorgalmi feladat: Tekintsük a következő függvényt:
% f(x) = \frac{1 - \cos(x)}{x^2/2}.
%                                 (a) A matematika szerint hogyan viselkedik a függvény a 0 körül? Ábrázoljuk a függvényt MATLAB segítségével a [-1e-7, 1e-7] intervallumon, például 100 pontból álló egyenletes rácson. Mit tapasztalunk?

%

%                                 (b) Cseréljük le a függvény számlálóját egy matematikailag ekvivalens formulára, mely legyen a következő alakú, valamely h valós-valós függvényre:
% g(x) = \frac{h(\sin(x))}{x^2/2}.
%                                 (c) Végezzük el a fenti ábrázolást a g függvénnyel is. Mit tapasztalunk?

%

%                                 (d) Cseréljük le az f és g függvényeket az őket a 0-ban közelítő alacsonyfokú Taylor-polinomjaikra. Ismételjük meg a fenti ábrázolást. Mit tapasztalunk?

%

%                                 (e) Reprodukáljuk a jelenséget alacsonyab fokú, hasonló alakú polinomokkal. Az új függvény legyen tehát két elsőfokú polinom hányadosa.

%

%                                  (f) Az eddigieket felhasználva próbáljuk meg kitalálni, hogy mi állhat a jelenség hátterében.

%