%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Eksperimentel Fysik, Niels Bohr Institutet, Københavns Universitet
% Opgaver tirsdag d. 24. april (uge 1), 2012
%
% Dette dokument indeholder løsninger til opgaverne fra hjemmesiden
%   http://www.facstaff.bucknell.edu/maneval/help211/exercises.html
% der er blevet en smule omskrevet til dette kursus
% 
% Opgaverne var Basic Syntax and command-line opgave 1-6 og 8 samt Basic Array 
% Syntax opgave 1-3
% 
% Pia Jensen, bozack@bozack.dk
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all   %tømmer alle gemte variable
close all   %luk alle eksterne vinduer (figurer o.lign.)
clc         %rens kommando-vinduet


%% Basic Syntax and Command-Line opgave 1 ---------------------------------------

% Lav en vektor bestående af de lige heltal mellem 31 og 75.
x = 32:2:75


%% Basic Syntax and Command-Line opgave 2 ---------------------------------------

% Lad x = [2 5 1 6].
x = [2 5 1 6];

% a. Lav en ny vektor af x ved at addere 16 til hvert element.
y = x + 16

% b. Lav en ny vektor der indeholder alle ulige-indeks elementerne af x, 
% adderet med 3
z1 = x(1:2:end) + 3

% alternativ: få hele x, hvor der kun er lagt 3 til de ønskede steder:
z2 = x + 3*[1 0 1 0]

% andet alternativ: brug loops for at gøre det mere generelt:
for i = 1:length(x)
    if mod(i,2) == 0
        bool = 0;   %lige tal
    else
        bool = 1;   %ulige tal
    end
    z3(i) = x(i) + 3*bool;
end
z3

% c. Udregn kvadratroden af hvert element.
sqrt(x)

% d. Udregn kvadratet af hvert element.
x.^2


%% Basic Syntax and Command-Line opgave 3 ---------------------------------------

% Lad x = [3 2 6 8]' og y = [4 1 3 5]'. (NB. x og y bør være søjlevektorer).
x = [3 2 6 8]';
y = [4 1 3 5]';

% a. Addér summen af elementerne i x til y.
x + y

% b. Hæv hvert element af x i potensen specificeret af det tilsvarende element 
% i y.
x.^y

% c. Dividér hvert element i y med det tilsvarende element i x.
y./x

% d. Gang hvert element i x med det tilsvarende element i y, og gem resultatet 
% i den ny variabel z.
z = x.*y

% e. Addér elementerne i z og gem resultatet i den ny variabel w.
w = sum(z)

% f. Udregn x'*y - w og fortolk resultatet.
x'*y - w
%dette er et normalt prikprodukt, minus det samme prikprodukt fundet manuelt


%% Basic Syntax and Command-Line opgave 4 ---------------------------------------

% Udregn de følgende MATLAB udtryk i hånden, og brug så MATLAB til at tjekke 
% resultaterne:

% a. 2 / 2 * 3
2 / 2 * 3
(2/2) * 3

% b. 6 - 2 / 5 + 7 ^ 2 - 1
6 - 2 / 5 + 7 ^ 2 - 1
6 - (2/5) + (7^2) - 1

% c. 10 / 2 \ 3 - 3 + 2 * 4
10 / 2 \ 3 - 3 + 2 * 4
3/(10/2) - 3 + (2*4)

% d. 3 ^ 2 / 4
3 ^ 2 / 4
(3^2) / 4

% e. 3 ^ 2 ^ 2
3 ^ 2 ^ 2
(3^2) ^ 2

% f. 2 + round(6 / 9 + 3 * 2) / 2 - 3
2 + round(6 / 9 + 3 * 2) / 2 - 3
2 + (round((6/9) + (3*2))/2) - 3
%rount() runder op/ned automatisk

% g. 2 + floor(6 / 9 + 3 * 2) / 2 - 3
2 + floor(6 / 9 + 3 * 2) / 2 - 3
2 + (floor((6/9) + (3*2))/2) - 3
%floor() runder ned 

% h. 2 + ceil(6 / 9 + 3 * 2) / 2 - 3
2 + ceil(6 / 9 + 3 * 2) / 2 - 3
2 + (ceil((6/9) + (3*2))/2) - 3
%ceil() runder op


%% Basic Syntax and Command-Line opgave 5 ---------------------------------------

% Lav en vektor x med elementerne...

% a. 2, 4, 6, 8, ...
2:2:10     %10 er bare et maks man selv vælger

% b. 10, 8, 6, 4, 2, 0, -2, -4
10:-2:-4

% c. 1, 1/2, 1/3, 1/4, 1/5, ...
x = 1:10   %10 er bare et maks man selv vælger
1./x

% d. 0, 1/2, 2/3, 3/4, 4/5, ...
x = 0:10
y = 1:11
x./y


%% Basic Syntax and Command-Line opgave 6 ---------------------------------------

% Lav en vektor x med elementerne x_n = (-1)^(n+1)/(2n-1). Summér elementerne i 
% versionen af denne vektor med 100 elementer.
n = 1:100;
x = ( (-1).^(n+1) ) ./ (2*n - 1);
sum(x)


%% Basic Syntax and Command-Line opgave 8 ---------------------------------------

%Givet en vektor, t, med længde n, lav MATLAB udtryk der vil udregne de følgende 
% udtryk. Test at de virker for t = 1:0.2:2.
t = 1:0.2:2;

% a. ln(2 + t + t^2)
log(2+t+t.^2)

% b. e^t (1 + cos(3t))
exp(t).*(1 + cos(3*t))

% c. cos^2(t) + sin^2(t)
cos(t).^2 + sin(t).^2

% d. tan^(-1)(1)  (dette er den inverse tangentfunktion) 
atan(t)

% e. cot(t)
cot(t)

% f. sec^2(t) + cot(t) - 1
sec(t).^2 + cot(t) - 1


%% Basic Array Syntax opgave 1 --------------------------------------------------

% Givet x = [3 1 5 7 9 2 6], forklar hvad de følgende kommandoer "betyder":
x = [3 1 5 7 9 2 6];

% a. x(3)
x(3)
% Dette er bare element nummer 3 i x

% b. x(1:7)
x(1:7)
% Dette er elementerne mellem (og inkl.) element 1 og 7, som en vektor

% c. x(1:end)
x(1:end)
% Dette er alle elementer fra og med element 1 til og med det sidste element

% d. x(1:end-1)
x(1:end-1)
% Dette er alle elementer fra og med element 1 til og med det næstsidste element

% e. x(6:-2:1)
x(6:-2:1)
% Dette er element 6,4,2 - altså alle elementer fra og med 6, med to mindre for 
% hvert tal, indtil man når 1

% f. x([1 6 2 1 1])
x([1 6 2 1 1])
% Dette er giver x-elementerne i rækkefølgen element 1, 6, 2, 1 og 1 igen

% g. sum(x)
sum(x)
% Dette er summen af alle elementer i x


%% Basic Array Syntax opgave 2 --------------------------------------------------

% Givet array'et A = [ 2 4 1 ; 6 7 2 ; 3 5 9], find kommandoerne der behøves 
% for at...
A = [ 2 4 1 ; 6 7 2 ; 3 5 9];

% a. definere en vektor x1 der indholder den første række af A.
x1 = A(1,:)

% b. definere et array y der indeholder de sidste 2 rækker af A.
y = A(end-1:end,:)

% c. udregne summen over kolonnerne i A.
sum(A)

% d. udregne summen over rækkerne i A.
sum(A,2)

% e. udregne standardafvigelsen af gennemsnittet for hver kolonne i A (NB. 
% standardafvigelsen af gennemsnittet er defineret som standardafvigelsen 
% divideret med kvadratroden af antallet af elementer der bruges til at udregne 
% gennemsnittet). 
N = size(A,1)
e = std(A)/sqrt(N)


%% Basic Array Syntax opgave 3 --------------------------------------------------

% Givet arrays'ene x = [1 4 8], y = [2 1 5] og A = [3 1 6 ; 5 2 7], find ud af 
% hvilke udtryk der kan udføres korrekt, og giv resultaterne. Hvis udtrykket 
% ikke kan udføres, så find ud af hvorfor. Kommandoen whos kan være smart at 
% bruge her. 
x = [1 4 8];
y = [2 1 5];
A = [3 1 6 ; 5 2 7];

% a. x + y
x + y
% Denne vil virke, og den er en ny vektor der indeholder summen af de samme 
% elementer i x og y

% b. x + A
x + A
% Denne vil ikke virke, da x og A ikke har samme dimensioner

% c. x' + y
x' + y
% Denne vil ikke virke, da x' er en søjlevektor og y er en rækkevektor

% d. A - [x' y']
A - [x' y']
% Denne vil ikke virke, da A er "flad" og [x' y'] er "høj"

% e. [x ; y']
[x ; y']
% Denne vil ikke virke, da man ikke kan samle en matrix af to vektorer der
% har forskellige dimensioner på denne måde (en række og en søjle)

% f. [x ; y]
[x ; y]
% Denne virker, og laver en ny matrice med x i den første række og y i den anden

% g. A - 3
A - 3
% Denne virker, og trækker 3 fra alle elementer i A
