Download Recitation 4

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
‫מבוא מורחב למדעי המחשב‬
‫בשפת ‪Scheme‬‬
‫תרגול ‪4‬‬
Outline
• High order procedures
– Finding Roots
– Compose Functions
• Accelerating Computations
– Fibonacci
2
Finding roots of equations
Input:
• Continuous function f(x)
• a, b such that f(a)<0<f(b)
Goal: Find a root of the equation f(x)=0
Relaxation: Settle with a “close-enough”
solution
3
General Binary Search
• Search space: set of all potential solutions
– e.g. every real number in the interval [a b] can be a root
• Divide search space into halves
– e.g. [a (a+b)/2) and [(a+b)/2 b]
• Identify which half has a solution
– e.g. r is in [a (a+b)/2) or r is in [(a+b)/2 b]
• Find the solution recursively in reduced search space
– [a (a+b)/2)
• Find solution for small search spaces
– E.g. if abs(a-b)<e, r=(a+b)/2
4
Back to finding roots
• Theorem: if f(a)<0<f(b) and f(x) is continuous,
then there is a point c(a,b) such that f(c)=0
– Note: if a>b then the interval is (b,a)
• Half interval method
–
–
–
–
Divide (a,b) into 2 halves
If interval is small enough – return middle point
Otherwise, use theorem to select correct half interval
Repeat iteratively
5
Example
a
b
6
Example (continued)
a
b
And again and again…
7
Scheme implementation
(define (search f a b)
(let ((x (average a b)))
(if (close-enough? a b)
x
(let ((y (f x)))
(cond ((positive? y) (search f a x))
((negative? y) (search f x b))
(else x))))))
Complexity?
8
We need to define
(define (close-enough? x y)
(< (abs (- x y)) 0.001))
Determine positive and negative ends
(define (half-interval-method f a b)
(let ((fa (f a))
(fb (f b)))
(cond
((and (negative? fa) (positive? fb))
(search f a b))
((and (negative? fb) (positive? fa))
(search f b a))
(else
(display “values are not of opposite signs”)))
))
9
Examples:
sin(x)=0, x(2,4)
(half-interval-method sin 2.0 4.0)
3.14111328125…
x3-2x-3=0, x(1,2)
(half-interval-method
(lambda (x) (- (* x x x) (* 2 x) 3)) 1.0 2.0)
1.89306640625
10
Compose
• Compose f(x), g(x) to f(g(x))
(define (compose f g)
(lambda (x) (f (g x))))
(define (inc x) (+ x 1))
((compose inc square) 3)
10
((compose square inc) 3)
16
11
Repeated f
f(x), f(f(x)), f(f(f(x))), …
apply f, n times
(define (compose f g)
(lambda (x) (f (g x))))
Compose now
Execute later
(define (repeated f n)
(if (= n 1)
f
(compose f (repeated f (- n 1)) )))
((repeated inc 5) 100)
=> 105
((repeated square 2) 5)
=> 625
12
Repeated f - iterative
(define (repeated f n)
(define (repeated-iter f n x)
(if (= n 1)
(f x)
(repeated-iter f (- n 1) (f x))))
(lambda (x) (repeated-iter f n x)))
Do nothing until called later
13
Repeated f – Iterative II
(define (repeated f n)
(define (repeated-iter count accum)
(if (= count n)
accum
(repeated-iter (+ count 1)
(compose f accum))))
(repeated-iter 1 f))
Compose now
Execute later
14
Smooth a function f:
g(x) = (f(x – dx) + f(x) + f(x + dx)) / 3
(define (smooth f)
(let ((dx 0.1))
(lambda (x) (average (f (- x dx))
(f x)
(f (+ x dx))))))
(define (average x y z) (/ (+ x y z) 3))
Repeatedly smooth a function
(define (repeated-smooth f n)
((repeated smooth n) f) )
15
Normal Distribution
• The formula of the normal probability
density function is based on two
parameters: the mean (μ) and the
standard deviation (σ). Its formula is:
f ( y) 
1
2
2
e
 y 
0.5

  
2
16
Normal Distribution
f ( y) 
1
2
2
e
 y 
0.5

  
2
17
Normal Distribution
x
• The cumulative density function:
F ( x) 

f ( y )dy

18
Standard Normal Distribution
• If μ=0 and σ=1 then we call it Standard
Normal Distribution.
• The formula of the standard normal 0.5 y
e
probability density function is: f ( y) 
2
2
• The cumulative density function is defined:
x
 ( x) 
• Note: F(x)=Φ((x-μ)/σ)

f ( y )dy

19
Standard Normal Distribution
• Let’s first recall two general functions:
; General sum procedure
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
; General Integral function
(define (integral f a b)
(define dx 1.0e-4)
(* (sum f a (lambda (x) (+ x dx)) b) dx))
20
Standard Normal Distribution
• Write a procedure std-normal that computes
the standard normal cumulative function.
• Assume that Φ(x)=0 for x < -6, and Φ(x)=1
for x > 6.
(define (std-normal x)
(let ((pi 3.14159)
(e 2.71828)
(sigma 6))
(define (phi x)
(/ (expt e (* (- 0.5) (* x x)))
(sqrt (* 2 pi))))
(cond ((< x -sigma) 0 )
((> x sigma) 1 )
(else (integral phi (- sigma) x))))
21
Standard Normal Distribution
• Write a procedure normalize which, given
a function foo and two parameters a, b
returns the function G such that G(x) =
foo((x – a)/b). That is, you should have:
((normalize square 5 2) 1) ==> 4
(define (normalize foo a b)
(lambda (x)
(if (= b 0)
(display "Error in normalize: Divide by zero")
(foo (/ (- x a) b)) )))
22
Normal Distribution
• Write a procedure normal that computes
the normal cumulative function for any μ
and σ.
• Remember: F(x)=Φ((x-μ)/σ)
(define (normal x miu sigma)
((normalize std-normal miu sigma) x)
)
23
Accelerating
Computations
24
Iterative
Fibonacci
(define (fib n)
(define (fib-iter a b count)
(if (= count 0)
b
(fib-iter (+ a b) a (- count 1)))
(fib-iter 1 0 n))
• Computation time: (n)
• Much better than Recursive implementation,
but…
• Can we do better?
25
Slow vs Fast Expt
• Slow (linear)
– b0=1
– bn=bbn-1
• Fast (logarithmic)
– bn=(b2)n/2
– bn=bbn-1
if n is even
if n is odd
• Can we do the same with Fibonacci?
26
Double Steps
• Fibonacci Transformation:
a  a  b
T 
b  a
0 1 1 2 3 5 8
b
a
13
21
a+b 2a+b 3a+2b …
• Double Transformation:
a  2a  b
2
T 
b  a  b
27
A Squaring Algorithm
• If we can square (or multiply) linear
transformations, we have an algorithm:
– Apply Tn on (a,b), where:
– Tn=(T2)n/2 If n is even
– Tn=TTn-1
If n is odd
28
Squaring Transformations
• General Linear Transformation:
a  xa  yb
Tx , y , z , w  
b  za  wb
• Squared:
x xa  yb  


x 2  yz a 

a 

y  za  wb 


xy

yw
b
2
Tx , y , z , w  




z
xa

yb

xz

zw
a

b 

2

yz  w b
w za  wb 

 Tx 2  yz
xy  yw
xz  zw
yz  w 2
29
Iterative Algorithm
• Initialize:
a  a  b
a  1 b  0 count  n T  
b  a
• Stop condition: If count=0 return b
• Step
count is odd
count is even
a, b  T a, b
T T
2
count  count  1 count  count / 2
30
Representing Transformations
• We need to remember x, y, z, w
• Fibonacci Transformations belong to a
simpler family:
a  bq  aq  ap
Tpq  
b  bp  aq
• T01 is the basic Fibonacci transformation
• Squaring (verify on your own!):
T  Tp 2  q 2
2
pq
2 pq  q 2
31
Implementation (finally)
(define fib n)
(fib-iter 1 0 0 1 n))
(define (fib-iter a b p q count)
(cond ((= count 0) b)
((even? count)
(fib-iter a
b
(+ (square p) (square q))
(+ (* 2 p q) (square q))
(/ count 2)
(else (fib-iter (+ (*
b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1))))
32
Related documents