%% Exponenttifunktion Taylorin polynomeja (mlGr10D.m)
%   mlGr10D.m
%
% <html>
% <a href="https://math.aalto.fi/opetus/Mattie/Blogi/Matlab/html/ExpTaylor.html">https://math.aalto.fi/opetus/Mattie/Blogi/Matlab/html/ExpTaylor.html</a>
% </html>
%
%%
close all                         % Suljetaan mahd. avoinna olevat 
                                  % grafiikkaikkunat
x = [-2:.01:2];                   % Diskreetti x-akselin väli
y = exp(x);                       % exp-funktion arvot x-pisteissä
%% Lasketaan Taylorin polynomien arvoja x-pisteissä
%
p0 = ones(size(x));               % Ykkösistä koostuva vektori
p1 = p0 + x;                      % Lisätään x-vektori
p2 = p1 + (x.^2)/2;               % Seuraava termi, huomaa .^
p3 = p2 + (x.^3)/6;               %  Ja vielä yksi.

%% Piirretään kaikki samaan kuvaan
%
plot(x,y)   
hold on
plot(x,p0)
plot(x,p1)
plot(x,p2)
plot(x,p3)
grid on
legend('e^x','p0','p1','p2','p3','Location','NW')  % NW=North West
shg  % "Show Graphics" Ei välttämätön, mutta hyvä.
%% Entä, jos halutaan laskea ja piirtää korkeamman asteisia?
%
%  Otetaan käyttöön for-silmukka, tehdään alusta saakka:
%

p{1}=ones(size(x)); % Matlab ei salli 0-indeksiä. Huomaa aaltosulut {}.
                    % p{k} voidaan ajatella indeksoituna (vektori)muuttujana. 
N=10;               % Muuttele tarpeen mukaan
for k=1:N
    p{k+1}=p{k}+(x.^(k))/factorial(k);
end
% plot(x,y,x,p{4},x,p{6},x,p{8},x,p{10})  % Nyt plot:n muoto, jossa monta
                                        % kuvaajaa samalla komennolla.
% grid on
% shg
% Jätettiin kommenttien taakse, selvennetään laittamalla värimääreitä:
%  'r' = red, 'g'=green, 'k'=black 
%%
%
hold off   % Seuraavat piirtokomennot pyyhkivät edelliset piirroket
plot(x,y,'r--',x,p{3},'g',x,p{5},'b',x,p{9},'k') % Parilliset polynomit
hold on    % Pidetään edelliset
plot(x,y,'r--','LineWidth',2)  % Punainen, paksumpi katkoviiva, jotta
                               % erottuisi seuraavassa p{9}:n kuvaajasta.
grid on
title('e^x ja parillisia Taylorin polynomeja') 
legend('e^x','T_2','T_4','T_8','Location','NW')
shg
% 
% Zoomaamalla gragfiikkaikkunaa suurennuslasilla nähdään, missä vaiheessa
% T_8 :n (eli p{9}:n) ja exp(x).n kuvaajat erkanevat.
% 
%% Approksimointivirhe
%
figure            % Avataan uusi grafiikkaikkuna.
plot(x,y-p{9})    % Piirretään erotus exp(x)-T8(x)
title('Virhe: e^x - T_8(x)') 
grid on
shg
%%
% Ja lasketaan maksimivirhe:
maksvirhe=max(abs(y-p{9}))
%
