Presentation is loading. Please wait.

Presentation is loading. Please wait.

EECS 110: Lec 6: Fractals and Trutles Aleksandar Kuzmanovic Northwestern University

Similar presentations


Presentation on theme: "EECS 110: Lec 6: Fractals and Trutles Aleksandar Kuzmanovic Northwestern University"— Presentation transcript:

1 EECS 110: Lec 6: Fractals and Trutles Aleksandar Kuzmanovic Northwestern University http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/

2 EECS 110 Today hw2 due Sunday evening… Fractals and Turtles! The Koch Curve

3 return to recursion Composing functions into specific applications Creating general functions that will be useful everywhere (or almost…) what applications?

4 11023456789 1 0.5 0 y = 1 x area steps(low,hi,N)fsteps(recip,low,hi,N) def recip(x): return 1.0/x finteg(f,low,hi,N) Numerical Integration Lab 2: Tuesday (yesterday)

5 11023456789 1 0.5 0 11023456789 1 0.5 0 low = 1.0hi = 10.0 y = 1 x area steps(low,hi,N) N == 9 == total number of steps (rectangles) fsteps(recip,low,hi,N) def recip(x): return 1.0/x finteg(f,low,hi,N)

6 Numerical Integration def fracSteps(N): return [ x/float(N) for x in range(N) ] 0141 42 def steps(low,hi,N): return [ low + (hi-low)*x for x in fracSteps(N) ] 016 777 10 15 def fsteps(f,low,hi,N): return [ f(x) for x in steps(low,hi,N) ] def finteg(f,low,hi,N): return sum(fsteps(f,low,hi,N))*(hi-low)/float(N) x values fractional steps y values integral: heights 10 16 10 width

7 When good programs go bad… def power(b, p): """ Returns b**p for p >= 0 """ if p == 0: return 1 else: return b*power(b, p)

8 print: Making programs talk to you! Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs. - Maurice Wilkes

9 When good programs go bad… def power(b, p): """ Returns b**p for p >= 0 """ print "p is", p, "; b is", b if p == 0: return 1 else: return b*power(b, p)

10 Careful! print != return def power(b, p): """ Returns b**p for p >= 0 """ if p == 0: return 1 else: return b*power(b, p-1) def powerPrint(b, p): """ Returns(?) b**p for p >= 0 """ if p == 0: print 1 else: print b*powerPrint(b, p-1)

11 A random aside… import random random.choice( L ) random.uniform(low,hi) random.choice( ['north', 'case', 'west'] ) random.uniform(41.9,42.1) chooses 1 element from the list L chooses a random float from low to hi for more explanation, try dir(random) or help(random) How likely is this to return 42 ? How would you get a random int from 0 to 9?

12 A random function… from random import * def guess( hidden ): """ guesses the user's hidden # """ compguess = choice( range(100) ) if compguess == hidden: # at last! print 'I got it!' else: guess( hidden )

13 The final version from random import * import time def guessFinal( hidden ): """ guesses the user's hidden # """ compguess = choice( range(100) ) print 'I choose', compguess time.sleep(0.05) if compguess == hidden: # at last! print 'I got it!' return 0 else: return 1 + guessFinal( hidden )

14 The two Monte Carlos Monte Carlo casino, Monaco Making random numbers work for you! Monte Carlo methods, Math/CS

15 Monte Carlo in action Suppose you roll two dice. What are the chances that you roll doubles? def countDoubles( N ): """ inputs a # of dice rolls outputs the # of doubles """ if N == 0: return 0 # zero rolls, zero doubles… else: d1 = choice( [1,2,3,4,5,6] ) d2 = choice( range(1,7) ) if d1 != d2: return countDoubles( N-1 ) # not doubles else: return # doubles! one roll of the dice input is the total number of rolls what should the last line be?

16 Monte Carlo in action Suppose you roll two dice. What are the chances that you roll doubles? def countDoubles( N ): """ inputs a # of dice rolls outputs the # of doubles """ if N == 0: return 0 # zero rolls, zero doubles… else: d1 = choice( [1,2,3,4,5,6] ) d2 = choice( range(1,7) ) if d1 != d2: return countDoubles( N-1 ) # not doubles else: return 1 + countDoubles( N-1 ) # doubles! one roll of the dice input is the total number of rolls

17 Monty Hall Let’s make a deal ’63-’86 inspiring the “Monty Hall paradox”

18 Monte Carlo Monty Hall Suppose you always switch to the other door... What are the chances that you will win the car ? Run it (randomly) 1000 times and see!

19 Monte Carlo Monty Hall def MCMH( init, sors, N ): """ plays the same "Let's make a deal" game, N times returns the number of times you win the car """ if N == 0: return 0 # don't play, can't win carDoor = choice([1,2,3]) # where is the car? if init == carDoor and sors == 'stay': result = 'Car!' elif init == carDoor and sors == 'switch': result = 'Spam.' elif init != carDoor and sors == 'switch': result = 'Car!' else: result = 'Spam.' print 'You get the', result if result == 'Car!': return 1 + MCMH( init, sors, N-1 ) else: return 0 + MCMH( init, sors, N-1 ) Your initial choice! 'switch' or 'stay' number of times to play

20 An example closer to home... 25262728502423220 An overworked NU student (S) leaves a pub after a “late- night” breakfast and, each moment, randomly stumbles toward Dorms (W) or toward Michigan Lake (E) DormsMichigan Lake (E) (W) Platt Write a program to model and analyze! this scenario... Hw2 Pr2 S Once the student arrives at the dorms or the Michigan Lake, the trip is complete. The program should then print the total number of steps taken.

21 An example closer to home... 25262728502423220 DormMichigan Lake (E) (W) Platt Write a program to model and analyze! this scenario... Hw2 Pr2 S rs()rwPos(s, nsteps)rwSteps(s, low, hi) take a random step of +1 or -1 take nsteps random steps starting at s take random steps starting at s until you reach either low or hi An overworked NU student (S) leaves a pub after a “late- night” breakfast and, each moment, randomly stumbles toward Dorms (W) or toward Michigan Lake (E) Once the student arrives at the dorm or the Michigan Lake, the trip is complete. The program should then print the total number of steps taken.

22 uses a basic random- walk model with unequal step probabilities Gel electrophoresis Used to separate proteins and nucleic acids (DNA) from a biological sample. Molecules with different properties travel different distances. one of many applications for random walks…

23 Monte Carlo Applications text on MC approaches to protein folding (a) start configuration (b) end (c) 3d-model folding @ home

24 Python's Etch-a-Sketch A new human-computer interface? from turtle import * reset() left(90) forward(50) right(90) backward(50) down() or up() color('green') width(5) done() and lots more! for turtle help degrees! states if the pen draws or not http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/misc/TurtleDirections.htm

25 Etch-a-Sketch ? www.gvetchedintime.com No way this is real… except that it is !

26 Recursive Graphics def tri(): """ draws a polygon """ forward(100) left(120) forward(100) left(120) forward(100) left(120) there is no tri … Could we tri this with recursion? (1)

27 Recursive Graphics def tri(): """ draws a polygon """ forward(100) left(120) forward(100) left(120) forward(100) left(120) there is no tri … Could we tri this with recursion? (1) def tri(N): """ Plots a triangle """ if N == 0: return else: forward(100) left(120) tri(N-1)

28 "Quiz" def chai(size): """ mystery! """ forward(size) left(90) forward(size/2.0) right(90) forward(size) left(90) forward(size/2.0) right(90) backward(size) What does chai draw? (1) Turtle Graphics Finish rwalk to draw a "stock-market-type" random path of nsteps steps. Use recursion! (2) Name(s): from random import * def rw(nsteps): """ moving for nsteps steps, randomly 45 deg. left/up or right/down """ if nsteps == 0: return if choice(['left','right']) == 'left': else: # 'right' one possible result of rw(20)

29 def chai(size): """ mystery! """ forward(size) left(90) forward(size/2.0) right(90) forward(size) left(90) forward(size/2.0) right(90) backward(size) What does chai draw? (1) Why are there two identical commands in a row?

30 Finish rwalk to draw a "stock-market-type" random path of nsteps steps. (2) one possible result of rw(20) from random import * def rw(nsteps): """ moving for nsteps steps, randomly 45 deg. left/up or right/down """ if nsteps == 0: return if choice(['left','right']) == 'left': left(45) forward(20) right(45) else: # 'right‘ right(45) forward(20) left(45) return rw(nsteps-1) What if we didn't go back to the starting pose?

31 hw2pr3 spiral 100 90 81 72.9 spiral( initLength, angle, multiplier ) close-up of innermost part of the spiral… spiral( 100, 90, 0.9 )

32 hw2pr3 svTree svTree( trunkLength, levels ) svTree( 100, 4 ) and more! (if you want)

33 Help! My turtle window froze! Your turtle window becomes unresponsive after your program runs. Type: >>> done() to unlock it (but then you have to close it)

34 The Koch curve snowflake( 100, 0 ) snowflake( 100, 1 )snowflake( 100, 2 ) snowflake( 100, 3 )snowflake( 100, 4 )snowflake( 100, 5 )

35 Have fun! fill(1)color("blue") http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/misc/TurtleDirections.htm

36 Have a great weekend! good luck with hw2 …


Download ppt "EECS 110: Lec 6: Fractals and Trutles Aleksandar Kuzmanovic Northwestern University"

Similar presentations


Ads by Google