%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Eksperimentel Fysik, Niels Bohr Institutet, Københavns Universitet
% Tirsdag d. 12. april, 2011
%
% Dette dokument indeholder løsninger til opgaverne fra hjemmesiden
%   http://www.facstaff.bucknell.edu/maneval/help211/exercises.html
% 
% 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 ---------------------------------------

% Create a vector of the even whole numbers between 31 and 75. 
x = 32:2:75


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

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

% a. Add 16 to each element
x + 16

% b. Add 3 to just the odd-index elements
x(1:2:end) + 3

% c. Compute the square root of each element
sqrt(x)

% d. Compute the square of each element
x.^2


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

% Let x = [3 2 6 8]' and y = [4 1 3 5]' (NB. x and y should be column vectors).
x = [3 2 6 8]';
y = [4 1 3 5]';

% a. Add the sum of the elements in x to y
x + y

% b. Raise each element of x to the power specified by the corresponding element 
% in y.
x.^y

% c. Divide each element of y by the corresponding element in x
y./x

% d. Multiply each element in x by the corresponding element in y, calling the 
% result "z".
z = x.*y

% e. Add up the elements in z and assign the result to a variable called "w".
w = sum(z)

% f. Compute x'*y - w and interpret the result
x'*y - w
%dette er et normalt prikprodukt, minus det samme prikprodukt fundet manuelt


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

% Evaluate the following MATLAB expressions by hand and use MATLAB to check the 
% answers

% 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 \ 5 - 3 + 2 * 4
10 / 2 \ 5 - 3 + 2 * 4
(10/2)/5 - 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 ---------------------------------------

% Create a vector x with the elements ...

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

% Create a vector x with the elements x_n = (-1)^(n+1)/(2n-1). Add up the 
% elements of the version of this vector that has 100 elements.
n = 1:100;
x = ( (-1).^(n+1) ) ./ (2*n - 1);
sum(x)


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

% Given a vector, t, of length n, write down the MATLAB expressions that will 
% correctly compute the following (test that your solution works 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)  (this is the inverse tangent function)
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 --------------------------------------------------

% Given x = [3 1 5 7 9 2 6], explain what the following commands "mean" by 
% summarizing the net result of the command.
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 --------------------------------------------------

% Given the array A = [ 2 4 1 ; 6 7 2 ; 3 5 9], provide the commands needed to
A = [ 2 4 1 ; 6 7 2 ; 3 5 9];

% a. assign the first row of A to a vector called x1
x1 = A(1,:)

% b. assign the last 2 rows of A to an array called y
y = A(end-1:end,:)

% c. compute the sum over the columns of A
sum(A)

% d. compute the sum over the rows of A
sum(A,2)

% e. compute the standard error of the mean of each column of A (NB. the standard
% error of the mean is defined as the standard deviation divided by the square 
% root of the number of elements used to compute the mean.)
N = size(A,1)
e = std(A)/sqrt(N)


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

% Given the arrays x = [1 4 8], y = [2 1 5] and A = [3 1 6 ; 5 2 7], determine
% which of the following statements will correctly execute and provide the result.
% If the command will not correctly execute, state why it will not. Using the
% command whos may be helpful here.
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
