Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation...

51
Previous Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using vectors and vectorized code Introduction to user-defined functions Announcements: Discussion this week in classrooms as listed on roster, not the lab Prelim 1 on Thursday, Feb 24 th at 7:30pm Last names A-O in Statler Aud. main floor Last names P-Z in Statler Aud. balcony

Transcript of Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation...

Page 1: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

Previous Lecture:ReviewColor as a 3-vectorLinear interpolation

Today’s Lecture:Finite/inexact arithmeticPlotting continuous functions using vectors and vectorized codeIntroduction to user-defined functions

Announcements:Discussion this week in classrooms as listed on roster, not the labPrelim 1 on Thursday, Feb 24th at 7:30pm

Last names A-O in Statler Aud. main floor Last names P-Z in Statler Aud. balcony

Page 2: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

3Lecture 9 3

Discrete vs. continuous

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

Plot made from discrete values, but it looks continuous since there’re many points

Page 3: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

4Lecture 9 4

Plot a continuous function (from a table of values)

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

x sin(x)0.00 0.01.57 1.03.14 0.04.71 -1.06.28 0.0

Plot based on 5 points

Page 4: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

5Lecture 9 5

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

Plot based on 200 discrete points, but it looks smooth

Page 5: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

6

Generating tables and plots

x sin(x)0.000 0.0000.784 0.7071.571 1.0002.357 0.7073.142 0.0003.927 -0.707 4.712 -1.0005.498 -0.7076.283 0.000

x= linspace(0,2*pi,9);y= sin(x);plot(x,y)

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

x, y are vectors. A vector is a

1-dimensional list of values

Note: x, y are shown in columns due to space limitation; they should be rows.

Page 6: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

7Lecture 9 7

Built-in function linspace

x= linspace(1,3,5)

1.0 1.5 2.0 2.5 3.0x

x= linspace(0,1,101)

0.00 0.01 0.02 ... 0.99 1.00x

Left endpointRight endpoint

Number of points

Page 7: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

8Lecture 9 8

Built-in functions accept arrays

x sin(x)0.00 0.01.57 1.03.14 0.04.71 -1.06.28 0.0

0.00 1.57 3.14 4.71 6.28

sin

0.00 1.00 0.00 -1.00 0.00

and return arrays

How did we get all the sine values?

Page 8: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

9Lecture 9 9

x= linspace(0,1,200);y= exp(x);plot(x,y)

x= linspace(1,10,200);y= log(x);plot(x,y)

Examples of functions that can work with arrays

Page 9: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

10Lecture 9 10

Does this assign to y the values sin(0o), sin(1o), sin(2o), …, sin(90o)?

x = linspace(0,pi/2,90);

y = sin(x);

A: yes B: no

Page 10: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

11February 23, 2010 Lecture 9 11

Can we plot this?

21)2/exp()5sin()(

xxxxf

+−

= for-2 <= x <= 3

Page 11: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

12February 23, 2010 Lecture 9 12

Can we plot this?

21)2/exp()5sin()(

xxxxf

+−

= for-2 <= x <= 3

Yes!

Page 12: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

13February 23, 2010 Lecture 9 13

Can we plot this?

21)2/exp()5sin()(

xxxxf

+−

= for-2 <= x <= 3

x = linspace(-2,3,200);y = sin(5*x).*exp(-x/2)./(1 + x.^2);plot(x,y)

Element-by-element arithmetic operations on arrays

Yes!

See plotComparison.m

Page 13: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

14February 23, 2010 Lecture 9 14

Element-by-element arithmetic operations on arrays…Also called “vectorized code”

x = linspace(-2,3,200);y = sin(5*x).*exp(-x/2)./(1 + x.^2);

Contrast with scalar operations that we’ve used previously…

a = 2.1;b = sin(5*a);

The operators are (mostly) the

same; the operands may be

scalars or vectors.

When an operand is a vector,

you have “vectorized code.”

x and y are vectors

a and b are scalars

Page 14: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

15February 23, 2010 Lecture 9 15

Vectorized addition

2 8.51x

1 102y+

3 9.53z=

Matlab code: z= x + y

Page 15: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

16February 23, 2010 Lecture 9 16

Vectorized subtraction

2 8.51x

1 102y-

1 7.5-1z=

Matlab code: z= x - y

Page 16: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

17February 23, 2010 Lecture 9 17

Vectorized code—a Matlab-specific feature

Code that performs element-by-element arithmetic/relational/logical operations on array operands in one step

Scalar operation: x + ywhere x, y are scalar variables

Vectorized code: x + ywhere x and/or y are vectors. If x and y are both vectors, they must be of the same shape and length

See Sec 4.1 for list of vectorizedarithmetic operations

Page 17: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

18February 23, 2010 Lecture 9 18

Vectorized multiplication

2 8.51a

1 102b×

2 802c=

Matlab code: c= a .* b

Page 18: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

19February 23, 2010 Lecture 9 19

Vectorized codeelement-by-element arithmetic operationson arrays

+

-

.*

./

A dot (.) is necessary in front of these math operators

.^

See full list of ops in §4.1

Page 19: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

20February 23, 2010 Lecture 9 20

Shift

2 8.51

x

y+

5 113.54z=

Matlab code: z= x + y

3

Page 20: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

21February 23, 2010 Lecture 9 21

Reciprocate

2 8.51

x

y/

.5 .12521z=

Matlab code: z= x ./ y

1

Page 21: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

22February 23, 2010 Lecture 9 22

./

A dot (.) is necessary in front of these math operators

Vectorized codeelement-by-element arithmetic operations between an array and a scalar

+

-

*

/

+

-

*

.^ .^

.* .* ./The dot in not necessary but OK, ,

See full list of ops in §4.1

Page 22: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

24Lecture 8 24

Discrete vs. continuous

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

−1 0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

sin(x)

Plots are made from discrete values, but when there’re many points the plot looks continuous

There’re similar considerations with computer arithmetic

Page 23: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

25

Does this script print anything?

k = 0;while 1 + 1/2^k > 1

k = k+1;enddisp(k)

Page 24: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

26

Computer Arithmetic—floating point arithmetic

Suppose you have a calculator witha window like this:

+ 312 4 -

representing 2.41 x 10-3

Page 25: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

27

Floating point addition

+ 312 4 -

+ 301 0 -

+ 313 4 -Result:

Page 26: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

28

Floating point addition

+ 312 4 -

+ 401 0 -

+ 312 5 -Result:

Page 27: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

29

Floating point addition

+ 312 4 -

+ 501 0 -

+ 322 4 -Result:

Page 28: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

30

Floating point addition

+ 312 4 -

+ 601 0 -

+ 312 4 -Result:

Page 29: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

31

Floating point addition

+ 312 4 -

+ 601 0 -

+ 312 4 -Result:

Not enough room to

represent .002411

Page 30: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

32

The loop DOES terminate given the limitations of floating point arithmetic!

k = 0;while 1 + 1/2^k > 1

k = k+1;enddisp(k)

1 + 1/2^53 is calculated to be just 1, so “53” is printed.

Page 31: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

33Lecture 8 33

Patriot missile failure

In 1991, a Patriot Missile failed, resulting in 28 deaths and about 100 injured. The cause?

www.namsa.nato.int/gallery/systems

Page 32: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

34Lecture 8 34

Inexact representation of time/number

System clock represented time in tenths of a second: a clock tick every 1/10 of a second

Time = number of clock ticks x 0.1

.00011001100110011001100110011…

.0001100110011001100110011

“exact” value

value in Patriot system

Error of .000000095 every clock tick

Page 33: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

35Lecture 8 35

Resulting error

… after 100 hours

.000000095 x (100x60x60)

0.34 second

At a velocity of 1700 m/s, missed target by more than 500 meters!

Page 34: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

36Lecture 8 36

Computer arithmetic is inexact

There is error in computer arithmetic—floating point arithmetic—due to limitation in “hardware.” Computer memory is finite.

What is 1 + 10-16 ? 1.0000000000000001 in real arithmetic1 in floating point arithmetic (IEEE)

Read Sec 4.3

Page 35: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

37February 23, 2010 Lecture 9 37

Built-in functions

We’ve used many Matlab built-in functions, e.g.,rand, abs, floor, remExample: abs(x-.5)

Observations:abs is set up to be able to work with any valid dataabs doesn’t prompt us for input; it expects that we provide data that it’ll then work on

Page 36: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

38February 23, 2010 Lecture 9 38

User-defined functions

We can write our own functions to perform a specific task

Example: generate a random floating point number in a specified intervalExample: convert polar coordinates to x-y(Cartesian) coordinates

Page 37: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

40February 23, 2010 Lecture 9 40

Draw a bulls eye figure with randomly placed dots

Dots are randomly placed within concentric ringsUser decides how many rings, how many dots

Page 38: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

41February 23, 2010 Lecture 9 41

Draw a bulls eye figure with randomly placed dots

What are the main tasks?Accommodate variable number of rings—loop

For each ringNeed many dotsFor each dot

Generate random positionChoose colorDraw it

Page 39: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

42February 23, 2010 Lecture 9 42

Convert from polar to Cartesian coordinates

θr

Polar coordinates

y

x

Cartesian coordinates

Page 40: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

43February 23, 2010 Lecture 9 43

c= input('How many concentric rings? ');d= input('How many dots? ');

% Put dots btwn circles with radii rRing and (rRing-1)for rRing= 1:c

% Draw d dotsfor count= 1:d

% Generate random dot location (polar coord.)theta= _______r= _______

% Convert from polar to Cartesianx= _______y= _______

% Use plot to draw dotend

end

A common task! Create a function polar2xy to do this. polar2xy likely will be useful in other problems as well.

Page 41: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

46February 23, 2010 Lecture 9 46

function [x, y] = polar2xy(r,theta)% Convert polar coordinates (r,theta) to % Cartesian coordinates (x,y). % theta is in degrees.

rads= theta*pi/180; % radianx= r*cos(rads);y= r*sin(rads);

A function file

polar2xy

.m

Page 42: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

function [x, y] = polar2xy(r,theta)% Convert polar coordinates (r,theta) to % Cartesian coordinates (x,y). % theta is in degrees.

rads= theta*pi/180; % radianx= r*cos(rads);y= r*sin(rads);

r

theta

Think of polar2xy as a factory

xy

Page 43: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

function [x, y] = polar2xy(r,theta)% Convert polar coordinates (r,theta) to % Cartesian coordinates (x,y). % theta is in degrees.

rads= theta*pi/180; % radianx= r*cos(rads);y= r*sin(rads);

r= input(‘Enter radius: ’);theta= input(‘Enter angle in degrees: ’);

rads= theta*pi/180; % radianx= r*cos(rads);y= r*sin(rads);

A function file

polar2xy

.m

(Part of) a

script file

Page 44: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

function [x, y] = polar2xy(r,theta)% Convert polar coordinates (r,theta) to % Cartesian coordinates (x,y). % theta is in degrees.

rads= theta*pi/180; % radianx= r*cos(rads);y= r*sin(rads);

r= input(‘Enter radius: ’);theta= input(‘Enter angle in degrees: ’);

rads= theta*pi/180; % radianx= r*cos(rads);y= r*sin(rads);

A function file

polar2xy

.m

(Part of) a

script file

Page 45: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

52February 23, 2010 Lecture 9 52

function [x, y] = polar2xy(r,theta)

Output parameter list enclosed in [ ]

Function name(This file’s name is polar2xy.m)

Input parameter list enclosed in

( )

Page 46: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

53February 23, 2010 Lecture 9 53

Function header is the “contract” for how the function will be used (called)

function [x, y] = polar2xy(r, theta)% Convert polar coordinates (r, theta) to % Cartesian coordinates (x,y). Theta in degrees.…

% Convert polar (r1,t1) to Cartesian (x1,y1)r1= 1; t1= 30;[x1, y1]= polar2xy(r1, t1);plot(x1, y1, ‘b*’)…

You have this function:

Code to call the above function:

Page 47: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

54February 23, 2010 Lecture 9 54

Function header is the “contract” for how the function will be used (called)

function [x, y] = polar2xy(r, theta)% Convert polar coordinates (r, theta) to % Cartesian coordinates (x,y). Theta in degrees.…

% Convert polar (r1,t1) to Cartesian (x1,y1)r1= 1; t1= 30;[x1, y1]= polar2xy(r1, t1);plot(x1, y1, ‘b*’)…

You have this function:

Code to call the above function:

Page 48: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

55February 23, 2010 Lecture 9 55

Function header is the “contract” for how the function will be used (called)

function [x, y] = polar2xy(r, theta)% Convert polar coordinates (r,theta) to% Cartesian coordinates (x,y). Theta in degrees.…

% Convert polar (r1,t1) to Cartesian (x1,y1)r1= 1; t1= 30;[x1, y1]= polar2xy(r1, t1);plot(x1, y1, ‘b*’)…

You have this function:

Code to call the above function:

Page 49: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

56February 23, 2010 Lecture 9 56

General form of a user-defined function

function [out1, out2, …]= functionName (in1, in2, …)% 1-line comment to describe the function% Additional description of function

Executable code that at some point assignsvalues to output parameters out1, out2, …

in1, in2, … are defined when the function begins execution. Variables in1, in2, … are called function parameters and they hold the function arguments used when the function is invoked (called).out1, out2, … are not defined until the executable code in the function assigns values to them.

Page 50: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

57February 23, 2010 Lecture 9 57

dotsInCircles.m

(functions with multiple input parameters)(functions with a single output parameter)

(functions with multiple output parameters)(functions with no output parameter)

Page 51: Previous Lecture - cs.cornell.eduPrevious Lecture: Review Color as a 3-vector Linear interpolation Today’s Lecture: Finite/inexact arithmetic Plotting continuous functions using

Accessing your functions

For now*, put your related functions and scripts in the same directory.

dotsInCircles.m

randDouble.m

polar2xy.m

drawColorDot.m

*The path function gives greater flexibility

MyDirectory

Any script/function that calls polar2xy.m