Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
מבוא מורחב למדעי המחשב בשפת 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=bbn-1 • Fast (logarithmic) – bn=(b2)n/2 – bn=bbn-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=TTn-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