Download presentation
Presentation is loading. Please wait.
Published byValentine Hardy Modified over 9 years ago
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 99 (((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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.