slide4

advertisement
Lab session on week 8 (4th meeting)
IT1005
Say No to
Plagiarism
Email Submission System (Review)
• Good, just one-two “email subject” violations for lab 4 .
– For those who are still blur, write “IT1005-2B YourName” in your
email subject! This helps my Gmail to auto sort your submissions.
• Now, I have one more request.
– For lab 5, instead of naming “u0xxxxxx-lab5.zip”,write in your name!
• “StevenHalim.zip”, “StevenHalim.doc”, “StevenHalim_q51.m”, “StevenHalim_q52.m”,
“my_mean.m”, “my_var.m”, “my_sort.m”, “my_sort2.m”.
• Ignore Colin’s instruction, I am using my own standard here.
• DO NOT COPY THE INDIVIDUAL *.m FILES INTO *.doc!
– No need to send me duplicate things >.<
– Your MS-Word file will just contain ‘explanation’ of your code.
– Or you can just embed that explanation as comments inside your m files,
no need to send me an MS-Word file for this lab…
– Reason:
•
•
•
•
I cannot grade one student per student, too slow…
It is better/faster to grade one question per question…
So I need to download your files individually anyway.
With so many files for lab 5, it will be a chaos if all of them are ‘u07xxxxx’! ><
Lab 4 – Plagiarism
•
What are NOT ok?
–
–
–
–
Blindly/partially copy your friend’s M-file/MS-Word file with/without his/her consent!
‘Just’ looking at other student’s MS-Word file, your answer will then tend to follow his/hers,
especially if you are not sure with your own answer…
Working together to create the M-file, then copy-paste the SAME M-file to each of
your MS-Word files.
Blind/partial copy from past year solution... It happens for lab 4 q2, q3, and q4.
•
•
Anyway, past year solution is not always 100% correct according to current grader (me)…
What are ok?
–
–
–
–
Gentle discussion: there is only thin line between plagiarism and proper discussion.
Positive discussion is ok, and it helps learning.
After ‘gentle’ discussion, you must type in Matlab code from scratch by yourself!
From your discussion, create two different Matlab programs that do the same thing!
•
•
Say No to
Plagiarism
That shows me that you really understand what you are doing.
This is a strong warning for Lab 4!
–
–
–
No more mercy for lab 5 onwards!
Plagiarism will just make your life more difficult for upcoming labs/assignment/final exam!
Note that labs is just 10%, midterm test is 20%, assignment is 30%, final is 40%!
Lab 4 – Quick Check
• Have you all received my reply for lab 4?
– My reply contains:
• Your Microsoft Word file
• With my comments, and
• Your marks.
– If there is something wrong with the marks, clarify it with me.
– Note that your file is renamed to YOUR matriculation card name.
– Help me by naming your files for lab 5
(the zip file, the Microsoft Word file) with your name!
• See the previous two slides for details.
Lab 4 – Answers (Q1)
•
Q1 – Mastering the command ‘find’
A. [r c] = find(F < -0.8)
B. Either you write 4 coordinates: (2,1) (2,2) (1,3) (2,3),
or you create program to enumerate these.
for index=1:numel(r) % if r has 4 elements, it will display 4 lines
disp(sprintf('(%d, %d)', r(index), c(index)));
end
C. [r c] = find(-1 < F & F < -0.8) % computer can only do BINARY comparison!
% Note: -1 < F & F < -0.8 is a better style compared with F < -0.8 & F > -1
% as it clearly shows the range that F is in.
% The resulting coordinates (not asked): (2,2) (1,3) (2,3).
Lab 4 – Answers (Q2)
•
Q2 – for loop versus while loop
A.
Observations:
•
•
•
B.
While loop version of the same program:
1.
2.
3.
4.
5.
6.
7.
8.
9.
C.
Loops ‘max’ number of times, each time prints the value of i and cnt, then finally prints the value of cnt / i.
When swapped, ‘i' tells the value of ‘cnt’ in scientific notation (cannot print floating point using %d),
‘cnt’ tells the value of ‘i‘, which is not really correct if you just look at the output.
The final value of ‘cnt’/i does not change since the physical ‘cnt’ actually never altered!
‘\n’ is newline character.
max = input('please enter maximum count: ');
cnt = 0; i = 1; % must set the initial value
while i <= max % keep looping while this statement is still true
cnt = cnt + 0.125 * i; % if you start from i = 0; do i = i + 1; before executing this line!
sprintf('i is %d and cnt is %g\n', i, cnt)
i = i + 1; % must do this so that after looping ‘max’ number of times, condition in line 3 is no longer true.
end
cnt = cnt / (i - 1); % we will over count by one after exiting the while loop! Alternative: loop from 0 to < max!
sprintf('cnt divided by i gives %g\n', cnt)
Differences are the one highlighted in part b above. See the comments there.
•
•
Some of you are not really answering the question: for loop is “bla bla”, while loop is “bli bli”.
The context is q2b! Say that the while loop version needs to have i initialized to 1 outside the loop, incremented by one inside the
loop, and stopped when i <= max, it will be over count by 1 at the end, etc…
Lab 4 – Answers (Q3-standard)
% This may be your first ever Matlab program with repetition control flow.
num = 0; denom = 0;
n = input('Please enter the number of modules: ');
% with just ONE loop, you can get input, and compute the results simultaneously. Assume VALID inputs!
for moduleID = 1:n % it is better to use ‘for loop’ as we know how much to count here (1 to n).
% use meaningful variable name, e.g. ‘MC’, ‘grade’, rather than ‘f’, ‘s’ (do not follow the lab hints too much >.<)?
MC = input(sprintf('Please enter the modular credit for module %d: ', moduleID));
% denom can already be updated now.
% num must be latter, since it requires both ‘MC’ and ‘grade’(sequence issue!)
denom = denom + MC;
grade = input(sprintf('Please enter the grade point for module %d: ', moduleID));
num = num + MC * grade;
end
cap = num / denom;
disp(sprintf('CAP = %g\n', cap)); % better use ‘disp’ so that the ‘ans’ is not printed!
Lab 4 – Answers (Q3+protection)
num = 0; denom = 0; n = 0; % initialize n properly!
while n < 1
n = input('Please enter the number of modules (integer >= 1): ');
end
for moduleID = 1:n
MC = -1; grade = -1; % initialize MC and grade properly!
Good that some of you
remember that I have
mentioned extreme cases
during lab 0/1 (the division
by zero stuff).
while MC < 1
MC = input(sprintf('Please enter the modular credit (integer >=1) for module %d: ', moduleID));
end
denom = denom + MC;
while grade ~= (0:0.5:5) % complex statement, this is to test whether grade is one of the valid option?
grade = input(sprintf('Please enter the grade point (floating point within [0.0 .. 5.0]) for module %d: ', moduleID));
end
num = num + MC * grade;
end
cap = num / denom;
disp(sprintf('CAP = %g\n', cap));
Lab 4 – Answers (Q4-standard)
% This may be your first ever Matlab program with decision control flow.
… continued from q3
% Please… DO NOT give me the answer for q3 again! Redundant!
% Either write this line “continued from q3” or just combine your q3 and q4 answers!
% use if-elseif-elseif-elseif-end rather than using nested if-else-end (too skewed to the right and you may confused with ‘end’s!)
if cap > 4.5
% what if cap == 4.5?
disp('Genius!!');
elseif cap >= 4.0 & cap < 4.5
% is this cap < 4.5 needed?
disp('Pretty darn smart!!')
elseif cap >= 3.5 & cap < 4.0
disp('Smart!');
elseif cap >= 3.0 & cap < 3.5
% how to explain the overlapping ranges?
disp('Quite Clever!');
elseif cap >= 3.2 & cap < 3.5
% this is subset of the above
disp('Clever!');
elseif cap >= 2.5 & cap < 3.2
% 3.0 – 3.2 are already classified as ‘Quite Clever!’ above
disp('Hmmm…');
elseif cap >= 2.0 & cap < 2.5
disp('Ohh need to work harder!');
elseif cap < 2.0
disp('Oops.. ');
end
Lab 4 – Answers (Q4-better)
… continued from q3
if cap >= 4.5
% what if cap == 4.5? Assume it is genius (first class), cap value cannot be > 5.0 anyway
disp('Genius!!');
% if our previous inputs are valid (see slide 7, q3+protection).
elseif cap >= 4.0
% cap < 4.5 is NOT needed as it is true if it does not fit into the first case above!
disp('Pretty darn smart!!')
elseif cap >= 3.5
disp('Smart!');
elseif cap >= 3.2
% reordered, ‘Clever!’ is cleverer than ‘Quite Clever!’
disp('Clever!');
% new range = [3.2 .. 3.5)
elseif cap >= 3.0
disp('Quite Clever!');
% new range = [3.0 .. 3.2)
elseif cap >= 2.5
disp('Hmmm…');
% new range = [2.5 .. 3.0)
elseif cap >= 2.0
disp('Ohh need to work harder!');
else
% obviously this case is cap < 2.0
disp('Oops..');
end
% Note: there are other ways to answer this question, all are ok as long as proper assumption is given!
The Art of Indentation (1)
• Indentation depth = 1 tab, 2/3/4 spaces
– It is a matter of style, stick with one and be consistent!
• Increase the indentation level after
– Decision statements (‘if’, ‘switch’), or
– Repetition statements (‘for’, ‘while’)!
• Decrease the indentation level
– As soon as you hit an ‘end’ statement.
• If you still unsure, study the next few slides!
The Art of Indentation (2)
• Wrong Example
• Too flat:
a = 2;
if a >= 1
b = 0;
while b < 7
disp(‘hey’);
b = b + 1;
end
end
disp(‘last line’);
• Wrong Example
• Zig Zag:
a = 2;
if a >= 1
b = 0;
while b < 7
disp(‘hey’);
b = b + 1;
end
end
disp(‘last line’);
The Art of Indentation (3)
• Wrong Example
• Indenting if/while:
a = 2;
if a >= 1
b = 0;
while b < 7
disp(‘hey’);
b = b + 1;
end
end
disp(‘last line’);
• Wrong Example
• Wrong match:
a = 2;
if a >= 1
b = 0;
while b < 7
disp(‘hey’);
b = b + 1;
end
end
disp(‘last line’);
The Art of Indentation (4)
• Wrong Example
• Too many white spaces:
a = 2;
if a >= 1
b = 0;
while b < 7
disp(‘hey’);
b = b + 1;
end
end
disp(‘last line’);
• Good Example
• Balanced, neat:
a = 2;
if a >= 1
b = 0;
while b < 7
disp(‘hey’);
b = b + 1;
end Indentation level 2
end Indentation level 1
disp(‘last line’);
Indentation level 0
Review on Functions
•
So far, codes that we have written reside in ONE M-file only.
– As the code getting more complex, it can be very messy.
•
We need to ‘modularize’ them into logical functions.
– Group of codes that can be reused again in the future.
•
Example of functions that we have used so far:
– sin, cos, abs, input, disp, sort, max, min, etc.
•
Input(s) to your function
The syntax is easy, just remember this:
function returnValue = functionName(argument1, argument2,…,argumentN)
% If you want to add help messages, write it here. Separate it with blank line!
% Write your Matlab codes here, get the arguments, process them, return the result!
% Usually, functions do NOT ask for input/print output! (exception: input, sprintf, etc)
% Usually, we suppress all the ‘intermediate’ output by giving ‘;’ at every line
returnValue = finalValue; % assign the result to this variable (returned to caller)!
•
Output(s)
of your
function
Save the function into a new M-file
– With exactly the same file name as the function name!
Example (Related to Lab 5)
•
Create a function “my_max.m” that given an array of numbers,
return the maximum number inside the array.
Example:
•
–
–
–
–
–
•
A = [ 1 3 ; 4 2 ]; % This is an example with 2-D array
% Not all Matlab commands behave similarly for 1-D (row array) versus 2-D!
my_max(A)
ans =
4
Testing:
–
–
–
Compare our own implementation with Matlab’s default ‘max’!
my_max(A) == max(max(A)) % must do max(max(A)) for 2-D array!
my_max(A) == max(A(:)') % or do this , clever trick for any dimension!
• If ans = 1 for various types of A, likely that you have done it correctly =).
• If ans = 0 for an instance of A, then you are still wrong.
• This is ok since my input are all Integers
– The test is different if the input is not integers! % test if absolute difference < eps
my_max.m
function maxValue = my_max(inputArray)
% my_max(inputArray)
% This function will return the max element of inputArray
% Only one argument will be accepted...
% This is the last line of the help message...
% Find the max element in inputArray
maxValue = inputArray(1); % Assume that the first element is the max
for index = 2:numel(inputArray) % Iterate through the rest to find the true max
if inputArray(index) > maxValue
maxValue = inputArray(index);
end
end
% Look, I do NOT assign returnValue = maxValue as the last line of my function
% I can use maxValue (return value) like normal variable, highlighted in red :)
Lab 5 - Overview
• Sample Mean = sum all n items divided by n
• Sample Variance = (standard deviation)2 =
sum of squared deviation divided by (n – 1)
– Not by ‘n’.
• There is a reason for this. *See Statistics textbook*
• Sorting
– Given unsorted input, e.g. [5 2 3 1];
– Do something with these numbers (sort it).
– Return the sorted output of the input, e.g. [1 2 3 5];
• Bubble sort = one of the ‘easiest’ (but slow) sorting algorithm.
– Google this term to study more!
• rand [0.0 .. 1.0] versus randn (normalized with mean 0, var 1).
– randn(x) will give you n*n matrix of random numbers
• You need to do something else to create row array! % randn(1,number_of_columns)
Lab 5 – Free and Easy Time
• Now, you are free to explore Matlab,
especially to find answers for Lab 5.
• No extra challenge this time >.<
• Let’s just focus on finishing lab 5 on your own,
catch up if you are still behind,
or to do your 30% term assignment .
• PS: Now we are entering the second half of the semester.
Your lecturer have changed to Dr Saif Khan.
And the topics shifted to ‘applications’ of Matlab .
Download