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

Slides:



Advertisements
Similar presentations
Noadswood Science,  To understand the flow procedure when writing programs Thursday, January 15, 2015.
Advertisements

EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University
ECS 15 if and random. Topic  Testing user input using if statements  Truth and falsehood in Python  Getting random numbers.
Random variables 1. Note  there is no chapter in the textbook that corresponds to this topic 2.
Great Theoretical Ideas in Computer Science.
Games, Logic, and Math Kristy and Dan. GAMES Game Theory Applies to social science Applies to social science Explains how people make all sorts of decisions.
1 Many people debate basic questions of chance in games such as lotteries. The Monty Hall problem is a fun brain teaser that Marilyn vos Savant addressed.
Probability And Expected Value ————————————
Main task -write me a program
EECS 110: Lec 6: Fractals and Trutles Aleksandar Kuzmanovic Northwestern University
Cyriak: conceptually disruptive recursion… Baaa. Welcome to IST338… Be sure to watch your head!
CS 5 Today CS 5 alien on strike! Claremont residents report droplets of water falling down-ward from the sky: unexplained meteorological phenomenon causes.
Welcome to CS 5! Be sure to watch your head…. A recursive spiral …
IS 313 Tomorrow… IS 313 last week ? 9/20/09 - today: beyond recursion! 9/27/09 - next wk: web technologies, pt 2 Assignment reminders... Which door to.
1 Introduction to Discrete Probability Rosen, Section 6.1 Based on slides by Aaron Bloomfield and …
PYTHON CONDITIONALS AND RECURSION : CHAPTER 5 FROM THINK PYTHON HOW TO THINK LIKE A COMPUTER SCIENTIST.
The not-so-subtle art of singling out the best (and worst) of anything… Computing with language Computing to the max You know this would make me hungry…
Programming Training kiddo Main Points: - Python Statements - Problems with selections.
Candy Land Castle By Danielle Rott and Michaela Layton.
B.A. (Mahayana Studies) Introduction to Computer Science November March Logo (Part 2) More complex procedures using parameters,
EECS 110: Lec 17: Review for the Final Exam Aleksandar Kuzmanovic Northwestern University
1 CSC 221: Computer Programming I Fall 2011 Fun with turtle graphics  turtle module  relative motion (setup, reset, left, right, forward, backward) 
Class 2 Introduction to turtle graphics
A new human-computer interface?
EECS 110: Lec 5: List Comprehensions Aleksandar Kuzmanovic Northwestern University
Prioritizing and Goal Setting for Academic Success.
The building blocks of functional computing data, sequences conditionals recursion CS 121 today List Comprehensions map and applications.
EECS 110: Lec 12: Mutable Data Aleksandar Kuzmanovic Northwestern University
Homework Homework due now. Reading: relations
IS 313: Putting loops to work for you What's next? [ 1, 11, 21, 1211, , ? ] [ -35, -24, -13, -2, 9, 20, 31, ? ] [ 2, 22, 222, ? ] [ 26250, 5250,
EECS 110: Lec 4: Functions and Recursion Aleksandar Kuzmanovic Northwestern University
CS 121 Today Fractals and Turtles! The Koch Curve how random…
IS 313 Tomorrow… IS 313 Today? 9/16/09 - today: recursion and beyond! 9/23/09 - next wk: no meeting (DC) 9/30/09 - following wk: for & while Homework functions.
EECS 110 Recitation #3 Ning Xia Northwestern University.
1 Computer Science of Graphics and Games MONT 105S, Spring 2009 Session 4 Conditionals Turtles.
Loops ! We've seen variables change in-place before: [ x*6 for x in range(8) ] [ 0, 6, 12, 18, 24, 30, 36, 42 ] remember range ?
1 Printing in Python Every program needs to do some output This is usually to the screen (shell window) Later we’ll see graphics windows and external files.
EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University
Introduction to Discrete Probability Epp, section 6.x CS 202.
EECS 110: Lec 3: Data Aleksandar Kuzmanovic Northwestern University
Getting started with the turtle Find the latest version of this document at
Code Compression the benefits of looping... Today in CS 5 HW 4 - (3 problems) M/T sections W/Th sections due Sunday, 9/26 at midnight due Monday, 9/27.
EECS 110: Lec 17: Review for the Final Exam Aleksandar Kuzmanovic Northwestern University
EECS 110: Lec 7: Program Planning Aleksandar Kuzmanovic Northwestern University
EECS 110: Lec 9: Review for the Midterm Exam Aleksandar Kuzmanovic Northwestern University
Programming Training kiddo Main Points: - Python Statements - Problems with selections.
EECS 110: Lec 12: Mutable Data Aleksandar Kuzmanovic Northwestern University
Probability Test Review (What are your chances of passing?)
Ray Karol 2/26/2013. Let’s Make a Deal Monte Hall Problem Suppose you’re on a game show, and you’re given a choice of three doors: Behind one door is.
Let’s try it one more time!. Allan Technique Programming Recursively 1.Decide that the problem needs a recursive solution. 2.Decide specifically what.
EECS 110: Lec 7: Program Planning Aleksandar Kuzmanovic Northwestern University
CS 121 Today Fractals and Turtles! The Koch Curve how random…
Cyriak: conceptually disruptive recursion…
EECS 110: Lec 10: Definite Loops and User Input
CS 5 Today hw2 due Monday… Lots of tutoring… Fractals and Turtles
EECS 110: Lec 9: Review for the Midterm Exam
EECS 110: Lec 5: List Comprehensions
EECS 110: Lec 5: List Comprehensions
EECS 110: Lec 7: Program Planning
EECS 110: Lec 6: Fractals and Trutles
We are removing the 4th part of hw2pr2 for now.
EECS 110: Lec 4: Functions and Recursion
EECS 110: Lec 10: Definite Loops and User Input
Random numbers What does it mean for a number to be random?
Random numbers What does it mean for a number to be random?
Exercise (1) What does function chai draw? def chai(size):
EECS 110: Lec 4: Functions and Recursion
Chapter 9 Using Decisions to
Background for lab: the ord() function
Random numbers What does it mean for a number to be random?
Presentation transcript:

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

Midterm and Final (tentative) Midterm: –Wednesday 4/29/2015 –9:30am – 11:30am –Tech L361 Final: –Wednesday 6/3/2015 –9:30am – 11:30am –Tech L361

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

Quiz Write each of these functions concisely using list comprehensions… Write def count(e,L): Write def lotto(Y,W): input: e, any element L, any list or string output: the # of times L contains e example: count('f', 'fluff') == 3 input: Y and W, two lists of lottery numbers (ints) output: the # of matches between Y & W example: lotto([5,7,42,44],[3,5,7,44]) == 3 Y are your numbers W are the winning numbers Name(s): Remember True == 1 and False == 0 Extra! Write def divs(N): input: N, an int >= 2 output: the number of positive divisors of N example: divs(12) == 6 (1,2,3,4,6,12)

Quiz

LC = [x==e for x in L] return sum( LC ) count(e,L)

Quiz lotto(Y,W) LC = [c in Y for c in W] return sum( LC )

Quiz divs(N) LC = [ N%c==0 for c in range(1,N+1)] return sum( LC )

Quiz LC = [x==e for x in L] return sum( LC ) count(e,L) divs(N) lotto(Y,W) LC = [c in Y for c in W] return sum( LC ) LC = [ N%c==0 for c in range(1,N+1)] return sum( LC )

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

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)

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)

Numerical Integration def fracSteps(N): return [ x/float(N) for x in range(N) ] def steps(low,hi,N): return [ low + (hi-low)*x for x in fracSteps(N) ] 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 width

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)

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

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)

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)

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?

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 )

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 )

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

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?

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

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

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!

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

An example closer to home 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.

An example closer to home 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.

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…

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

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

Etch-a-Sketch ? No way this is real… except that it is !

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)

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)

"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)

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?

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?

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

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

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)

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

Have fun! fill(1)color("blue")

Have a great weekend! good luck with hw2 …