%% Ratkaisuja (valikolituihin) tehtäviin 1
%  25.5.2010
%% Teht 1
clear               % Puhdistetaan työtila vanhoista muuttujista.
x = [1 2 3 4 5];    % Puolipisteisiin on hyvä tottua.
y = [0 2 4 6];
z = [-4 -2 0 2 4 ];
who                 % Katsotaan työtilan muuttujat.
format compact      % Tiivistetty tulostusmuoto
x                   % Kirjoittamalla muttujan nimen, näet sen sisällön.
x,y,z               % Komentoja voidaan antaa samalla rivillä pilkulla tai
                    % puolipisteellä erotettuna.
why                 % Leikitään vähän (Moler-huumoria)      

% Jos haluat tutustua jo nyt Matlab-ohjelmointiin, sano: type why

%% 
length(x),length(y),length(z)  
x.*z       % Pisteittäinen kertolasku, onneksi x ja z samanpituiset.
x'*z       % Ulkotulo: Matriisi: (x(i)*z(j)). Ei tarvitse olla samanpituiset.
% Parempi olisi ollut tässä pyytää
x'*y   % ja/tai 
y'*x

% x*x' on x:n sisätulo itsensä kanssa, eli koordinaattien neliösumma.
% norm(x,2)  laskee saman (Euklidinen normi). Norm-funktion oletusarvona
%             on 2-normi. Kts. help norm

x.^2       % Pisteittäinen potenssi; koordinaatit korotetaan toiseen.
'x^2'        % Matriisipotenssi, tässä x*x, mahdollinen vain neliömatriisille.

%% Teht 2.
clear          % Tyhjennetään vanhoista muuttujista (selkeyttää).
u=[3;4;5;6]; v=[0;2;4;6];
u,v
% Tai: 
u=(3:6)', v=(0:2:6)'

% c,b,a voidaan rakentaa monilla tavoilla, tietysti ihan kirjoittamalla
% alkio kerrallaan tyyliin:
c=[1 2 3;1 3 6;1 4 9]
% Muita tapoja:
c=[ones(3,1) (2:4)' (3:3:9)']    % tai
c=[(1:3);1 3 6;1 4 9]

a=[1:4;5:8;9:12]  % tai
a=reshape(1:12,3,4)

b=[3:6;2:-1:-1;5 4 2 0;1 2 1 1]

%% Teht 3
n=4;k=3;
In=eye(n,n); Ynk=ones(n,k); Nnk=zeros(n,k);
Ik=eye(k,k);Nn=zeros(n,n);


A=[In Ynk;Nnk' Ik]
B=[Nn In;-In Nn]

%% Teht 3.5

% a)
% v(end:-1:1)    % Vektori
% A(:,end:-1:1)  % Matriisin sarakkeet
% A(end:-1:1,:)  % Matriisin rivit

type fliplr
%type flipud

% b)
u=1:7
v=-u
N=length(u);
u_alle_v = [u;v]
limitetty=u_alle_v(:)'

%% Teht. 4 ja 6
A=magic(5)

sarakesummat=sum(A)  % tai:
sum(A,[1])
rivisummat=sum(A')  % tai
sum(A,[2])
lavistajasumma=sum(diag(A))
sivulavistajasumma=sum(diag(fliplr(A)))

[ov,oa]=eig(A)

V=ov;D=oa; IV=inv(V);
A,V*D*IV
A-V*D*IV   % A:n diagonalisointi A=V*D*inv(V)

%{
Koska rivisummat =  vakio = 65, niin yksi ominaisvektori on v=[1 1 1 1 1]',
sillä A*v = [65;65;65;65;65] = 65*[1;1;1;1;1] = 65*v.
Laskemalla nähdään, että muut ovat pienempiä.

Normeerataan luvulla 65 näin:

      A = 65*V*D/65*inv(V)

Merkitään D1=D/65

D1 on diagonaalimatriisi, jonka (itseisarvoltaan) suurin alkio = 1,
muut ovat aidosti pienempiä.

Nyt  A^k = 65^k * V * D1^k * inv(V).

Jos diagonaalimatriisilla kerrotaan vasemmalta jokin matriisi C, niin 
C:n rivit tulevat kerrotuiksi diagonaalialkioilla. Mieti kynää ja 
paperia käyttäen, voithan kokeilla myös Matlabilla vaikka tyyliin:

      C=reshape(1:9,3,3)',Dm=diag(-1:1), Dm*C, C*Dm

Oikelta kerrottaessa kerrotaan vastaavasti sarakkeet, kuten laskukin 
vahvistaa.

     
No, muodostetaan D1:n potensseja:

%}
format long
D1=D/65;
k=1,Dk=D1
k=k+1, Dk=Dk*Dk    % toista nuolinäppäimellä
k=k+1, Dk=Dk*Dk
k=k+1, Dk=Dk*Dk
k=k+1, Dk=Dk*Dk

%{
Arvolla k=6 tulee Matlabin laskentatarkkuudella diagonaalimatriisi:
diag([1 0 0 0 0]), joten D1^k*inv(V) on matriisi, jossa 1. vaakarivi
on inv(V):n eka vaakarivi, loput ovat nollarivejä. Matriisin rangi
on siten 1, ja se ei siitänsä kasva kerrottaessa vasemmalta millä tahansa 
matriisilla.

(Jos tässä oli vieraita lineaarialgebran käsitteitä, niin älä huoli, 
muistetele näitä laskuja lämmöllä sitten, kun noihin törmäät.)
%}

%% Tehtävä 5.
% 
t=linspace(0,2*pi);x=cos(t);y=sin(t);plot(x,y)
axis equal; axis square
hold on;t=linspace(0,2*pi,10);x=cos(t);y=sin(t);plot(x,y,'r')
