% Dette er en kommentert utgave av Matlab-gjennomgangen 20.01.14
% Inkluderer også litt mer informasjon rundt bruk av ett resultat for å
% regne ut et annet.

clear all; %Fjerner alle aktive variable.

N = 1000;

% Lager inputvektor (x-akse) fra 0 til 4*pi. N er her antall steg altså
% antall arrayplasser.
t = linspace(0, 4*pi, N); 
%Alternativ metode: definerer heller steglengden som 0.01:
% t = 0:0.01:4*pi; %Merk N må da settes til en annen verdi i loopene

%Lager en 1xN vektor der alle plassene er satt til 0.
sag = zeros(1, N);
teller = 0;

%Lager en sagtann.
%Merk at man i Matlab har arrayer som begynner på indeks 1, altså blir 
% sag(1) det samme som sag[0] i f.eks Java.
for i=1:N
   sag(i) = teller;
   teller = teller + 1;
   if teller > 500
       teller = 0;
   end
end

%Det går også ann å bruke innebygde funksjoner for sagtann:
% sag2 = sawtooth(t); %Får da en litt annen amplitude enn den versjonen vi
% laget for å demonstrere for-loops og if-tester ovenfor.


%% Eksempel på bruk av et resultat for å regne ut et annet:
% To prosenttegn definerer dette som en egen seksjon. Kan bruke "run
% section" for å bare kjøre denne delen. Kjekt når man har store prosjekter

%Lager en trekantpuls ved å bruke sagtannspulsen som input
%(For at plottet skal vises bedre halverer jeg også amplituden)
tre = zeros(1, N);
for i=1:N
    if sag(i) > 250 %Slår opp og tester mot forrige resultat
        %Nedadgående del av trekantpulsen
        tre(i) = (500 - sag(i)) / 2;
    else
        %Oppadgående del av trekantpulsen
        tre(i) = sag(i) / 2;
    end
end

%Legger begge resultatene inn i samme plot
plot(t, sag, t, tre); %Altså: plot(X1, Y1, X2, Y2)

%Alternativ måte å plotte på:
%plot(t, sag);
%hold on; %Låser innholdet i figuren slik at nye plot kommer oppå i stedet for å overskrive
%plot(t, tre, 'red');
%hold off; %Viktig å skru hold av igjen etterpå. Hvis ikke blir neste kjøring av fila feilaktig


%Aksene passer nå ikke helt. Vi har litt ekstra plass på høyre kant som
%ikke har data. Stiller da litt på aksene slik at de passer helt med
%datasettet.
axis tight; %Kommenter ut denne linja, se hva som skjer
title('plot 1');
xlabel('Tid');
ylabel('Amplitude');
%Legger på en tegnforklaring. Se "help legend" for forskjellig plassering
legend('sagtann', 'trekant', 'Location', 'NorthWest');

%Lagrer til pdf. MERK: unngå navn med mellomrom. Kopier saveFigure.m til
%arbeidskatalogen først. Du finner denne i zipfila nevnt i obligteksten.
saveFigure('figur2');



%%
%Noen ganger kan det være kjekt å stoppe et øyeblikk før man går videre.
%Kan da trykke en tast i selve Matlabvinduet eller med plottet oppe for å
%gå forbi pause-kommandoen.
disp('trykk en tast');
pause;

%% Eksempel på bruk av arraynotasjon som alternativ til for-løkker.

%Klipper ut en bit av sagtannpulsen og viser den i  ett nytt bilde

figure; %Ny figur. Nye plot kommer nå i et annet vindu

utklipp = zeros(1, N);
%Plukker ut alle verdier i utklipp der t > 2*pi. Fyller så disse 'boksene' med
%innholdet fra samme utklipp fra sagtannspulsen. (For slik notasjon må høyre
%og venstre side ha like mange elementer.)
utklipp(t > 2*pi) = sag(t > 2*pi);

plot(t, utklipp);
hold on;
plot(t, 15*t, 'red');
hold off;
title('Utklipp av plot 1');

%Hvordan man setter akser manuelt:
axis([0, 4*pi, -50, 550]); % altså: [x_start, x_slutt, y_start, y_slutt]
%Dette er kjekt dersom firkantpulsen i obligen kommer kant i kant med
%bildekanten. Det kan da bli vanskelig å se hvorvidt den er høy eller lav.