1 / 32

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

מבוא מורחב למדעי המחשב בשפת Scheme. תרגול 4. Outline. High order procedures Finding Roots Compose Functions Accelerating Computations Fibonacci. Input : Continuous function f(x) a , b such that f(a)<0<f(b) Goal : Find a root of the equation f(x)=0

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 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 Finding roots of equations

  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

  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

  6. Example a b

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

  8. Scheme implementation x (search f a x) (search f x b) x (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 )))))) Complexity?

  9. 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 ) (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)

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

  11. 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

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

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

  14. Compose now Execute later 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))

  15. Repeatedly smooth a function (define (repeated-smooth f n) ) Smooth a function f: g(x) = (f(x – dx) + f(x) + f(x + dx)) / 3 (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)))) ((repeated smooth n) f)

  16. Normal Distribution • The formula of the normal probability density function is based on two parameters: the mean (μ) and the standard deviation (σ). Its formula is:

  17. Normal Distribution

  18. Normal Distribution • The cumulative density function:

  19. Standard Normal Distribution • If μ=0 and σ=1 then we call it Standard Normal Distribution. • The formula of the standard normal probability density function is: • The cumulative density function is defined: • Note: F(x)=Φ((x-μ)/σ)

  20. 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))

  21. 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) ) (cond ((< x -sigma) ) ((> x sigma) ) (else ))) (/ (expt e (* (- 0.5) (* x x))) (sqrt (* 2 pi))) 0 1 (integral phi (- sigma) x)

  22. 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))

  23. 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)

  24. AcceleratingComputations

  25. 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?

  26. Slow vs Fast Expt • Slow (linear) • b0=1 • bn=bbn-1 • Fast (logarithmic) • bn=(b2)n/2if n is even • bn=bbn-1if n is odd • Can we do the same with Fibonacci?

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

  28. 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

  29. Squaring Transformations • General Linear Transformation: • Squared:

  30. Iterative Algorithm • Initialize: • Stop condition: If count=0 return b • Step count is odd count is even

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

  32. 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))

More Related