Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא מורחב למדעי המחשב בשפת Scheme תרגול 3. Outline High order procedures –Finding Roots –Compose Functions Accelerating Computations –Fibonacci 2.

Similar presentations


Presentation on theme: "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 3. Outline High order procedures –Finding Roots –Compose Functions Accelerating Computations –Fibonacci 2."— Presentation transcript:

1 מבוא מורחב למדעי המחשב בשפת Scheme תרגול 3

2 Outline High order procedures –Finding Roots –Compose Functions Accelerating Computations –Fibonacci 2

3 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

4 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

5 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

6 Example b a 6

7 Example (continued) b a And again and again… 7

8 (define (search f a b) (let ((x (average a b))) (if (close-enough? a b) (let ((y (f x))) (cond ((positive? y) ) ((negative? y) ) (else )))))) x (search f a x) (search f x b) x Scheme implementation 8 Complexity?

9 Determine positive and negative ends (define (half-interval-method f a b) (let ((fa (f a)) (fb (f b))) (cond ((and ) (search f a b)) ((and ) (search f b a)) (else (display “values are not of opposite signs”))) )) (negative? fa) (positive? fb) (negative? fb) (positive? fa) We need to define (define (close-enough? x y) (< (abs (- x y)) 0.001)) 9

10 sin(x)=0, x  (2,4) (half-interval-method 2.0 4.0) x 3 -2x-3=0, x  (1,2) (half-interval-method 1.0 2.0) Examples: sin 3.14111328125… (lambda (x) (- (* x x x) (* 2 x) 3)) 1.89306640625 10

11 11 (define (double f) (lambda (x) (f (f x)))) (define (inc x) (+ x 1)) ((double inc) 5) => 7 inc(x) = x + 1 f(f(x)) = x + 2 ((double square) 5) => 625 square(x) = x^2 f(f(x)) = x^4 Double

12 12 (((double double) inc) 5) => x +4 99 (((double double) square) 5) => x 16 => 152587890625= 5 16 Double

13 13 inc = x + 1 (double (double(double inc))) = x + 8 ((double (double double)) inc) = x + 16 (((double (double double)) inc) 5)  21 Double Double Double

14 Let D = double ((double (double double)) = D(D(D))= D(D◦D)=(D◦D)◦(D◦D)= D◦D◦D◦D=D 4 D 4 (f)=D 3 (f 2 )= D 2 (f 4 )=D (f 8 )=f 8 ◦f 8 =f 16 14

15 15 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

16 16 (= n 1) f (repeated f (- n 1)) f(x), f(f(x)), f(f(f(x))), … apply f, n times (define (repeated f n) (if (compose f ))) ((repeated inc 5) 100) => 105 ((repeated square 2) 5) => 625 Repeated f (define (compose f g) (lambda (x) (f (g x)))) Compose now Execute later

17 17 (define (repeated f n) (lambda (x) (repeated-iter f n x))) Repeated f - iterative (define (repeated-iter f n x) (if (= n 1) (f x) (repeated-iter f (- n 1) (f x)))) Do nothing until called later

18 18 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

19 19 (define (smooth f) (let ((dx 0.1)) )) (define (average x y z) (/ (+ x y z) 3)) (lambda (x) (average (f (- x dx)) (f x) (f (+ x dx)))) Smooth a function f: g(x) = (f(x – dx) + f(x) + f(x + dx)) / 3 ((repeated smooth n) f) Repeatedly smooth a function (define (repeated-smooth f n) )

20 Accelerating Computations 20

21 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? 21

22 Slow vs Fast Expt Slow (linear) –b 0 =1 –b n =b  b n-1 Fast (logarithmic) –b n =(b 2 ) n/2 if n is even –b n =b  b n-1 if n is odd Can we do the same with Fibonacci? 22

23 Double Steps Fibonacci Transformation: 0 1 1 2 3 5 8 13 21 b a a+b 2a+b 3a+2b … Double Transformation: 23

24 A Squaring Algorithm If we can square (or multiply) linear transformations, we have an algorithm: –Apply T n on (a,b), where: –T n =(T 2 ) n/2 If n is even –T n =T  T n-1 If n is odd 24

25 Squaring Transformations General Linear Transformation: Squared: 25

26 Iterative Algorithm Initialize: Stop condition: If count=0 return b Step count is oddcount is even 26

27 Representing Transformations We need to remember x, y, z, w Fibonacci Transformations belong to a simpler family: T 01 is the basic Fibonacci transformation Squaring (verify on your own!): 27

28 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 (/ count 2) (else (fib-iter p q (- count 1)))) (+ (square p) (square q)) (+ (* 2 p q) (square q)) (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) 28


Download ppt "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 3. Outline High order procedures –Finding Roots –Compose Functions Accelerating Computations –Fibonacci 2."

Similar presentations


Ads by Google