week 9 matlab: algorithms, numerical precision, animation,...

Post on 17-Jun-2018

225 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ENGG1811 © UNSW, CRICOS Provider No: 00098G1 W9 slide 1

Week 9 Matlab: Algorithms, numerical precision, animation, debugging

ENGG1811 Computing for Engineers

An engineering challenge

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 2

http://www.zdnet.com/sydneys-harbour-bridge-gets-sensor-tech-7000000296/ http://www.engineeringchallenges.org/cms/8996/9136.aspx

Maintenance and monitoring aging infrastructure is a grand research challenge

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 3

http://www.zdnet.com/sydneys-harbour-bridge-gets-sensor-tech-7000000296/

Limitations of computation

•  Your computer can do almost 100 billion multiplications in one second

•  Tiny computers can do far less –  Need efficient or new algorithms

•  In any case, we want efficient algorithms

•  Computers also have finite precision

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 4

This week

•  Three topics –  Algorithms –  Numerical precision –  Animation

•  Matlab programming –  While –  Animation –  More Matlab functions

•  Computer science concepts –  Efficient algorithms/computational complexity –  Finite precision

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 5

Algorithms •  A sequence of instructions for the computation

•  Two important criteria –  Correctness –  Efficiency

•  Example: An algorithm for multiplying 2 integers –  Correctness means the algorithm returns the correct

answer all the time –  Efficiency: How many multiplications the algorithm can do

in a given amount of time

•  An efficient algorithm takes a shorter time to arrive at the correct outcome

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 6

Challenge: Locate a name in a sorted list of names

•  You are given: –  A list of names arranged in alphabetical order –  Names are indexed with 1, 2, 3 etc. in their order

•  Rules –  You are not allowed to see the list –  You can choose an index and query what the name at that

index is

•  The challenge: –  Given a name, what is the minimum number of indices that

you need to query to locate that name?

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 7

1.  Abraham

2.  Adam

3.  Eve

4.  Sarah

Example: Simple Scan

1.  Henry

2.  John

3.  Michael

4.  Peter

5.  Tinker

6.  Wendy

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 8

•  Example: –  There is a list with 6 names on the left –  Given Peter is one of the names, you

want to find which index it is at

•  A simple algorithm is to scan the name one by one from the beginning until you have found the name

•  Quiz: If the name that you want to locate is at the k-th position, how many queries do you need to locate the name using simple scan? k

•  Which type of loop will you use to implement a simple scan? while

Other possible algorithms

•  Make a guess of where the name is and then start from there –  Example: 6 names on the left. The

name to locate is Yvonne. Since this name is near the end of the alphabet so we scan from the last name.

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 9

1.  Ava

2.  Yvonne

3.  Zac

4.  Zoe

5.  Zorina

6.  Zwi •  Comment: This algorithm assumes that names are distributed in the usual way but sometimes you can get an unusual data set

•  What will be an efficient algorithms?

Towards a general principle •  Consider this game:

–  I think of a living person in this world –  To win this game, you need to guess who this person is in as

few questions as possible

•  Consider two sets of questions below, which one will you ask and why?

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 10

•  Is the person from Zambia?

•  Is the person from Fiji?

•  Is the person a current student of UNSW?

•  Is the person a he or she?

•  Is the person from Asia?

•  Is the person from South America?

Question set 1 Question set 2

•  Narrow down the possibilities as quickly as possible

•  How can you use this principle to locate a name quickly in a sorted list?

Name search using binary search

•  The purpose of the query is narrow down the possibilities as much as possible –  Idea: Eliminate half of the possibilities with each query

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 11

•  Binary search: –  Initialization: Query the name in the middle of the list –  Eliminate nearly half of the possibilities with each

additional query –  Stop when the name is found

Binary search example (1)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 12

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

•  To eliminate half of the possibilities, pick the name in the middle

•  Middle of 1 and 11 = (1+11)/2 = 6

•  Initialisation: Query 6

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

Binary search example (2)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 13

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

•  Where should we look next?

•  Can forget indices 1-5

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

Binary search example (3)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 14

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

•  Search between 6-11

•  Middle of 6 and 11 = (6+11)/2 = 8.5

•  Let us round up

•  Query index 9

•  Which section can we forget now?

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

Binary search example (4)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 15

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

•  Can forget 10-11

•  Quiz: What is the next index to query? –  (9+6)/2 = 7.5 –  Round up to 8 –  Query index 8

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

Binary search: A detail

•  Note that when we select the mid-point, we have chosen to round up

•  We can also choose to round down

•  As long as one consistent rounding method is used throughout the algorithm, that’s fine

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 16

Algorithmic complexity

•  Computer scientists are very interested in how the complexity of algorithms –  Roughly speaking, higher complexity

translates to a longer running time on the same computer

•  Computer scientists like to derive efficient algorithms

•  For the name search example earlier: –  Binary search needs 3 queries –  Simple scan needs 8 queries

•  The difference does not appear to be a lot for this example, but let us increase the size of the list

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 17

1.  Ava

2.  Ben

3.  Campbell

4.  Jessica

5.  John

6.  Liam

7.  Logan

8.  Peter

9.  Quentin

10. Sammy

11. Timothy

?

Demo

•  I took all the first names of the all students enrolled in ENGG1811 in 15s2

•  Remove all duplicates and sort the names

•  There are 412 unique names

•  A Matlab function –  Will randomly pick 10 names –  Uses simple scan and binary search to locate those 10

names –  The function will also report the number of queries

made by each method

•  There are a number of points that I’d like you to think about when you watch the demo (next slide)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 18

A number of questions

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 19

•  Is binary search always better?

•  What is the largest number of queries required by –  simple scan –  binary search

Number of queries required by binary search

•  Each query reduces the number of possibilities by half

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 20

# queries Remaining # possibilities after the query 1 412 * (1/2) 2 3

412 * (1/2) * (1/2)

412 * (1/2) * (1/2) * (1/2)

•  After n additional queries, # possibilities = 412 * (1/2)n

•  Finished when only one possibility left

412 * (1/2)n ≤ 1 ! n ≥ log2(412) ! n ≥ 9

•  Maximum queries needed = 9

Worst case complexity

•  A way to measure the efficiency of an algorithm is to look at its worst case complexity

•  If there are n names in a sorted list –  Worst case complexity for

•  Simple scan is n

•  Binary search log2(n)

•  Computer scientists also use other ways to measure complexity, such as average complexity

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 21

Quiz: Which is more efficient?

Binary: query one name and eliminate half of the names at a time

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 22

“Quad”-nary: query three names and eliminate 3 quarters of the names at a time

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 23

Data load/save

•  Data can be saved in two simple formats –  .mat, a Matlab-specific format that preserves names,

types and values from one or more variables –  ascii (text) format, data values only but readable with

other applications

>>  save  mydata.mat  image  h  vec          %  .mat  format  >>  save  export.dat  image  –ascii        %  data  only,  space  separated    >>  load  mydata.mat    %  reloads  image,  h  and  vec  >>  load  export.dat      %  stores  result  in  variable  export  

•  Loading from a mat file restores the saved variables, overwriting them if necessary

•  Loading from a text file (any extension except .mat) stores into a variable named after the file

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 24

round / ceil / floor

•  Matlab has 3 functions for rounding –  round(x): round to the nearest integer of x –  ceil(x): round to the nearest integer bigger than or

equal to x –  floor(x): : round to the nearest integer smaller than

or equal to x

>>  round(1.4)        %  =  1  >>  round(1.5)        %  =  2    >>  ceil(1.4)    %  2    >>  ceil(1.5)      %  2  >>  ceil(1)            %  1  

>>  floor(1.4)        %  =  1  >>  floor(1.5)        %  =  1    

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 25

rand()

•  Matlab function rand() generates random numbers in the interval (0,1) –  Always between 0 and 1. Will never be 0 nor 1.

>>  rand              %  one  random  number  >>  rand(2,3)    %  a  2-­‐by-­‐3  random  matrix,  6  random  numbers    

>>  ceil(n*rand(10,1))  %  10  random  integers  in  [1,n]        

•  If you want random integers in [1,n] (assuming n has been defined) –  rand is between (0,1) –  n*rand is between (0,n) –  Round up to get a random integer in [1,n]

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 26

Iteration – while

•  Same principle as the while statement in OOB

while  BooleanExpression        statements  

end  

Finding roots

•  It’s easy to find the roots of polynomial equations in Matlab

•  Example: To find the roots of the polynomial equation 4x3 + 12 x2– 64 x + 16

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 27

>>  roots([4  12  -­‐64  16])  

•  For the sake of learning algorithms, we look at two different ways to find roots in Matlab –  By simple scan –  By bisection search

Polynomial 4x3 + 12 x2– 64 x + 16

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 28

Finding a root by simple scan •  Evaluate the polynomial y(x) at many values of x:

–  f(x1), f(x2), f(x3), f(x4), f(x5), …

•  Find the value of xk such that f(xk) is closest to zero

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 29

•  How to measure distance from 0? –  Distance of 0.2 to 0 is 0.2 –  Distance of -0.1 to 0 is 0.1

•  What function can you use to compute distance from 0?

Absolute value abs()

•  Equivalent problem: Find the value of xk such that |f(xk)| is smallest

Matlab code

•  Matlab code for finding roots by simple scan is in the file findRootByScan.m

•  It uses the function min()

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 30

>>  [minvalue,  index]  =  min([21  4  12  64  16])    minvalue  =            4      index  =          2    

         

Another application of bisection search

•  Bisection search can be used to find the root of a continuous function f(x)

•  Assuming you know two numbers x1 and x2 such that f(x1) < 0 and f(x2) > 0 then there is a root of f(x) = 0 between x1 and x2

•  We don’t know where the root is, we find the mid-point

of x1 and x2 , and eliminate half of the interval

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 31

221 xxxmid

+= x1

x2

xmid

f

Bisection search: updating, case 1

ENGG1811 © UNSW, CRICOS Provider No: 00098G W7 slide 32

x

f (x)

x1

x2

xmid

•  Compute xmid = (x1+x2)/2

•  If f(xmid) < 0, then replace x1 by xmid

Bisection search: updating, case 2

ENGG1811 © UNSW, CRICOS Provider No: 00098G W7 slide 33

x

f (x)

x1

x2 xmid

•  Compute xmid = (x1+x2)/2

•  If f(xmid) > 0, then replace x2 by xmid

Stopping criterion

ENGG1811 © UNSW, CRICOS Provider No: 00098G W7 slide 34

x

f (x)

x1

x2

•  Stop when x1 and x2 are close enough

•  Stop if abs(x1 – x2) <= TOL where TOL is a pre-defined tolerance

•  Question: What is the loop-guard for the while statement?

while abs(x1 – x2) > TOL

% continue to iterate

end

A)  abs(x1 – x2) <= TOL

B)  abs(x1 – x2) > TOL

ENGG1811 © UNSW, CRICOS Provider No: 00098G W7 slide 35

Bisection Pseudocode:

choose  x1  and  x2  such  that  f(x1)  <  0  and  f(x2)  >  0  

while  Abs(x1-­‐x2)  >  TOL  

 xmid  =  (x1  +  x2)  /  2  

 if  f(xmid)  <  0  

   x1  =  xmid  

 else  

   x2  =  xmid  

 end  

end  

             

Matlab implementation

•  A Matlab implementation is in findRootByBisection_prelim.m

•  We will complete it in the lecture

•  It uses the Matlab function polyval which calculates the value of the polynomial y(x) at given values of x

•  Example: Want to know the value of y(x) = 4x3 + 12 x2– 64 x + 16 at x = 2

•  Specify the polynomial with a vector containing the coefficients in descending power

•  polyval([4 12 -64 16],2)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 36

Comments on

•  The program has a limitation –  The script assumes that f(x1)  <  0  and  f(x2)  >  0  

but  it  is  possible  to  write  code  so  that  it  can  work  for  either  of  the  following:  •  f(x1)  <  0  and  f(x2)  >  0    •  f(x1)  >  0  and  f(x2)  <  0    

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 37

Comments on root finding

•  Using bisection search to find a root requires you to specify two points which bound the root

•  If you recall Goal Seek from OpenOffice Calc, you specify only one starting point

•  There are algorithms which require you to specify one starting point and find the “closest” root. These algorithms require advance calculus to understand you will learn them later years

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 38

Iterations

•  Iteration is a very important part of computation and algorithms

•  OpenOffice Calc functions Goal Seek and Optimisation are based on iterations

•  Computation of square roots, logarithms, exponentials, trigonometric functions, matrix inverse (i.e. / or \ in Matlab) and many others are all based on iterations

•  Many iteration methods require advanced knowledge of calculus, we present a method to compute square root without calculus

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 39

Computing square root

•  Assume that you want to compute √A

•  Consider a rectangle with length A and width 1 –  What is the area?

•  Consider a square with length √A –  What is the area?

•  The idea is to iteratively reshape a rectangle into a square of the same area

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 40

1

A

√A

√A Same area A

Reshaping a rectangle into a square

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 41

Starting rectangle L

W

L1 =L +W2

W1 =LWL1

Reshape into a rectangle which looks more like a square

Both rectangles have area LW

Example: Computing square root of 9

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 42

L = 9.000

W = 1.000

L = 5.000

W = 1.800

L = 3.400

W = 2.647

L = 3.024

W = 2.977

ENGG1811 © UNSW, CRICOS Provider No: 00098G W7 slide 43

Computing square root Pseudocode

% Computing square root of A

% Initialisation

L = A

W = 1  

while  abs(L-­‐W)  >  TOL    L  =  (L  +  W)  /  2    W  =  A/L  

end  Output  L  as  the  square  root  of  A                  

Writing the Matlab code

•  We will write a Matlab function called mySqrt in the lecture

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 44

•  It’s amazing that you can find the square root with just 7 lines of code!

•  People calculated square root by long division in the past! (http://nrich.maths.org/5955)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W7 slide 45

Question Pseudocode for computing square root

% Computing square root of A

% Initialisation

L = A

W = 1  

while  abs(L-­‐W)  >  TOL    L  =  (L  +  W)  /  2    W  =  A/L  

end  Output  L  as  the  square  root  of  A                  

Can we have L ~= W?

Finite precision

•  Computers have only finite precision

•  Computers use binary (i.e. 0 and 1) but you won’t be learning binary in this course

•  We will explain everything using a hypothetical computer that uses the decimal system

•  This computer uses only a finite number of digits to represent numbers

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 46

Finite precision representation

•  Our hypothetical computer represents 2.41 x 10-3 as:

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 47

+ 3 1 2 4 -

Decimal point is assumed to be here but not shown

•  Each number has 6 storage places –  One for sign of the number, one for sign of the exponent –  One digit before the decimal points –  Two digits after the decimal point –  One digit for the exponent

Some numbers are approximated

•  The computer can represent some numbers exactly, e.g 2 x 10-7 as:

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 48

+ 7 0 2 0 -

•  And some numbers approximately, e.g 1/3 = 0.3333… becomes

+ 1 3 3 3 - Finite precision

Insight Through Computing

Add:

+ 3 1 2 4 -

+ 3 0 1 0 -

+ 3 1 3 4 - Result:

=1 x 10-3

Insight Through Computing

Add:

+ 3 1 2 4 -

+ 3 0 0 1 -

+ 3 1 2 5 - Result:

=1 x 10-4

Insight Through Computing

Add:

+ 3 1 2 4 -

+ 3 1 0 0 -

+ 3 2 2 4 - Result:

=1 x 10-5

Insight Through Computing

Add:

+ 3 1 2 4 -

+ 6 0 1 0 -

+ 3 1 2 4 - Result:

=0.001 x 10-3

=1 x 10-6

Not enough room to

represent .002411

Losing precision in Matlab

•  Testing whether numbers are equal

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 53

>>  3  ==  3        %  Boolean  comparison,  returns  1,  which  means  true  >>  3  ==  4        %  returns  0  which  mean  false      

•  Try the following in Matlab

>>  1+2^(-­‐52)  ==  1        %  False    >>  1+2^(-­‐53)  ==  1        %  True:  2^(-­‐53)  is  lost  if  added  to  1    

>>  1000+2^(-­‐43)  ==  1000        %  False    >>  1000+2^(-­‐44)  ==  1000        %  True:  2^(-­‐44)  is  lost      

Be careful if you add or subtract a small number from a big

number

Hypothetical computer: Smallest positive number possible

•  The smallest possible number represented by our hypothetical computer is 0.01 x 10-9 as follows:

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 54

+ 9 1 0 0 -

•  This computer considers any number smaller 0.01 x 10-9 as zero

Smallest +ve number in Matlab

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 55

•  Try the following in Matlab

>>  2^(-­‐1074)  ==  0        %  False    >>  2^(-­‐1075)  ==  0        %  True:  2^(-­‐1075)  is  considered  zero    

Why can’t we use (x1 == x2) in checking whether two floating point numbers are equal?

•  x = 1/3 is represented 3.33 x 10-1 in our computer:

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 56

+ 1 3 3 3 -

•  Comparing y == 1 will be false

•  Need to use abs(y-1) < TOL

x

•  What is y = 3*x?

+ 1 9 9 9 - y

Finite precision and software design

•  Country X has an anti-missile system Y

•  It uses our hypothetical computer

•  x = 1/60 is represented as

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 57

+ 2 7 1 6 - x

External oscillator produces 1 tick per 1/60 second

Software on missile counts the number of ticks = n Time in software in seconds = n*x

Finite precision and software design

•  x = 1/60 is represented as

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 58

+ 2 7 1 6 - x

•  60 ticks should be 1 seconds

•  But in software, time is 60 * 1.67x10-2 = 1.02

•  0.02s difference may seem small but pretty big error for an anti-missile system

Tragic consequence of finite precision

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 59

•  The missile story is true but adapted –  X = United States, Y = Patriot –  But of course not our hypothetical computer but a

computer with finite precision –  Lives were lost because the anti-missile missed the

incoming missile

•  The cause is that the software designer didn’t consider finite precision

•  Question: How can you correct the problem

Simulation on paper – the setup

•  An object is constrained to move along a straight line

•  Time starts at 0 unit. The initial position of the object is x(0) = 1

•  The velocity v(t) at time t is: –  v(t) = 2 if 0 ≤ t <0.4 –  v(t) = -4 if 0.4 ≤ t <0.8 –  v(t) = 1 if 0.8 ≤ t

•  Determine the position of the object at t = 0.1,0.2, …, 1

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 60

At position 1 at time 0

From Week 8

simulateOneD_v2.m (simulation loop)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 61

for k = 2:length(time) pastTime = time(k-1); velocity = getVelocity(pastTime); pos(k) = pos(k-1) + velocity * dt; end

From Week 8

Animation

•  We want to demonstrate how the object moves

•  The principle of animating an object is –  Draw the object at its initial position –  Calculate the object new position –  Redraw the object at the new position

• Note: Matlab automatically erases the previous object

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 62

] loop

Draw a rectangle

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 63

% Draw the box

rectHandle = rectangle('Position',[1 2 4 3],'FaceColor','g');

% Adjust the axes

axis([0 6 0 6])

(1,2) 4

3

Code in drawABox.m

simulateOneDWithAnimation.m

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 64

% A number of lines require before this – not shown

rectHandle = ...

rectangle('Position',[x(1)-BOX_WIDTH/2 0 BOX_WIDTH BOX_HEIGHT], ...

'FaceColor','g');

% the simulation loop

for i = 2:length(t)

pastTime = t(i-1);

speed = getSpeedSimulateOneD(pastTime);

x(i) = x(i-1) + speed * dt;

% Move the box

set(rectHandle, 'Position',[x(i)-BOX_WIDTH/2 0 BOX_WIDTH BOX_HEIGHT]);

drawnow;

end

Object properties

•  Each object has many properties. For example, for rectangle, you can set the EdgeColor, FaceColor, Curvature and many others –  To see what properties you can set for the rectangle

object, type “rectangle” in the “Search Documentation” box in the Matlab window

–  Alternatively, you can look at the online documentation: •  http://au.mathworks.com/help/matlab/ref/

rectangle.html

•  The Matlab script rectanglePropertyDemo.m shows you how to use some of the properties

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 65

Colour •  You can specify colour in Matlab with a single letter, e.g.

–  ‘k’ for black

•  Alternatively, you can use a vector with 3 elements to specify the fraction of red, green and blue (RGB triplet) –  [0.7 0.3 0.4] means mixing 70% red, 30% green and 40%

blue –  [0 1 0] is pure green –  [1 1 1] is white –  [0 0 0] is black

•  The script rectangleChangingColour.m shows how you can gradually change an object from one colour to another

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 66

Matlab graphics objects

•  In addition to rectangles, other graphics object types are: –  patch

•  For drawing polygons, see •  http://au.mathworks.com/help/matlab/ref/patch.html

–  line •  For drawing lines, see •  http://au.mathworks.com/help/matlab/ref/line.html

•  These are powerful primitives –  You can draw a curve using many tiny lines –  You can draw a surface with many tiny patches

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 67

Debugging functions

•  We will use an example to show you the debugging tools available in Matlab

•  The function countNumberOfPeaks is meant to count the number of peaks (think about the heartbeat example in Week 1) but there are errors in the function

•  You can’t see the values inside the function

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 68

Memory spaces (1)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 69

vec k

numberOfPeaks

Memory space for countNumberOfPeaks

Memory spaces (2)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 70

vecInput peakCount

Base space (Command window)

vec k

numberOfPeaks

Memory space for countNumberOfPeaks

These variables are not visible from the command window

Setting break point

•  Click this column to set break point in the editor

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 71

Function memory space •  Function memory space can be inspected

•  The prompt “K>>” means you are using the debugger

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 72

Debugger functionalities (1)

•  Step, continue, inspect various memory spaces

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 73

Debugger functionalities (2)

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 74

•  Set other types of breakpoint

Summary

•  Two important concepts –  Efficiency of algorithms –  Finite precision

•  Animation

•  Debugging tools

•  Acknowledgements: Slides 50-53 are courtesy of the authors of the text “Insight Through Computing”.

ENGG1811 © UNSW, CRICOS Provider No: 00098G W9 slide 75

top related