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
Lecture #6 section 1.3.3 pages 68-70 1.3.4 pages72-77 2.1.1 pages 83-87 2.1.2 pages 87-89 2.2 pages97-100 מבוא מורחב 1 Computing (SQRT a) 1. Find a fixed point of the function f(x) = a/x. 2. Define g(x)=x2 –a Find a fixed point of f(x)=x - g(x)/g’(x) מבוא מורחב 2 The derivative. We want to write a procedure with: • Input: a function f: REAL REAL • Output: the function f’: REAL REAL deriv: (REAL REAL) (REAL REAL) (define (deriv f) (lambda (x) (define dx 0.001) (/ (- (f (+ x dx)) (f x)) dx))) > ((deriv square) 3) 6.000999999999479 מבוא מורחב 3 Finding fixed points for f(x) Start with an arbitrary first guess x1 Each time: • try the guess, f(x) ~ x ?? • If it’s not a good guess try the next guess xi+1 = f(xi) (define (fixed-point f first-guess) (define tolerance 0.00001) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (try guess) (let ((next (f guess))) (if (close-enough? guess next) guess (try next)))) (try first-guess)) 4 An example: f(x) = 1+1/x (define (f x) (+ 1 (/ 1 x))) (fixed-point f 1.0) X1 = 1.0 X2 = f(x1) = 2 X3 = f(x2) = 1.5 X4 = f(x3) = 1.666666666.. X5 = f(x4) = 1.6 X6 = f(x5) = 1.625 X7 = f(x6) = 1.6153846… Note how odd guesses underestimate And even guesses Overestimate. Real answer: 1.6180339… מבוא מורחב 5 Another example: f(x) = y/x (define (f x) (/ 2 x)) (fixed-point f 1.0) x1 = 1.0 x2 = f(x1) = 2 x3 = f(x2) = 1 x4 = f(x3) = 2 x5 = f(x4) = 1 x6 = f(x5) = 2 x7 = f(x6) = 1 Real answer: 1.414213562… מבוא מורחב 6 How do we deal with oscillation? Consider f(x)=2/x. If x is a point such that guess < sqrt(2) then 2/guess > sqrt(2) So the average of guess and 2/guess is always an even Better guess. So, we will try to find a fixed point of g(x)= (x + f(x))/2 Notice that g(x) = (x +f(x)) /2 has the same fixed points as f. For f(x)=2/x this gives: g(x)= x + 2/x)/2 מבוא מורחב 7 Example : x for x 2. To find an approximation of x: • Make a guess G • Improve the guess by averaging G and x/G • Keep improving the guess until it is good enough X=2 G=1 X/G = 2 X/G = 4/3 G = ½ (1+ 2) = 1.5 G = ½ (3/2 + 4/3) = 17/12 = 1.416666 X/G = 24/17 G = ½ (17/12 + 24/17) = 577/408 = 1.4142156 מבוא מורחב 8 average-damp (define (average-damp f) ;outputs g(x)=(x+f(x)/2 (lambda (x) (average x (f x)))) average-damp: (number number) (number number) ((average-damp square) 10) ((lambda (x) (average x (square x))) 10) (average 10 (square 10)) 55 מבוא מורחב 9 Fixed-point II (define (fixed-point-II f first-guess) (define tolerance 0.00001) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (try guess) (let ((next ( (average-damp f) guess))) (if (close-enough? guess next) guess (try next)))) (try first-guess)) מבוא מורחב 10 Computing sqrt and cube-roots. (define (sqrt x) (fixed-point-II (lambda (y) (/ x y)) 1)) For cube root we want fix point of x=a/x2. So, (define (cbrt x) (fixed-point (lambda (y) (/ x (square y))) 1)) מבוא מורחב 11 Newton’s method A solution to g(x) = 0 is a fixed point of f(x) = x - g(x)/g’(x) (define (newton-transform g) (lambda (x) (- x (/ (g x) ((deriv g) x))))) (define (newton-method g guess) (fixed-point (newton-transform g) guess)) (define (sqrt x) (newton-method (lambda (y) (- (square y) x)) 1.0)) > (sqrt 2) 1.4141957539304906 מבוא מורחב 12 composef (define composef (lambda (f g) (lambda (x) (f (g x))))) composef: (A B), (C A) (C B) composef: (STRING INT), (INT STRING) ( INT INT) composef: ( INT INT), (BOOL INT) ( BOOL INT) מבוא מורחב 13 Chapter 2 – Building abstractions with data מבוא מורחב 14 Procedural abstraction • Publish: name, number and type of arguments type of answer • Guarantee: the procedure behavior • Hide: local variables and procedures, way of implementation, internal details, etc. Export only what is needed. מבוא מורחב 15 Data abstraction • Publish: name, constructor, selectors, ways of handling it • Guarantee: the behavior • Hide: local variables and procedures, way of implementation, internal details, etc. Export only what is needed. מבוא מורחב 16 An example: Rational numbers We would like to represent rational numbers. A rational number is a quotient a/b of two integers. Constructor: Selectors: (make-rat a b) (numer r) (denom r) Guarantee: (numer (make-rat a b)) (denom (make-rat a b)) a = b a,b have no common divisor. מבוא מורחב 17 Public Methods (add-rat x y) (sub-rat x y) (mul-rat x y) (div-rat x y) (print-rat x) (equal-rat? x y) Methods should come with a guarantee of their actions: (equal-rat? (make-rat 2 4) (make-rat 5 10)) מבוא מורחב 18 Implementing methods with the constructor and selectors. (define (mul-rat x y) (make-rat (* (numer x) (numer y)) (* (denom x) (denom y)))) (define (sub-rat x y) … (define (add-rat x y)… (define (div-rat x y) (make-rat (* (numer x) (denom y)) (* (denom x) (numer y)))) (define (equal-rat? x y) (and (= (numer x) (numer y)) (= (denom x) (denom y)))) מבוא מורחב 19 Pair: A primitive data type. Constructor: Selectors: (cons a b) (car p) (cdr p) Guarantee: (car (cons a b)) = a (cdr (cons a b)) = b Abstraction barrier: We say nothing about the representation or implementation of pairs. מבוא מורחב 20 Implementing make-rat, numer, denom (define (make-rat n d) (cons n d)) (define (numer x) (car x)) (define (denom x) (cdr x)) מבוא מורחב 21 Reducing to lowest terms In our current implementation we keep 10000/20000 As such and not as ½. This: • Makes the computation more expensive. • Prints out clumsy results. A solution: change the constructor (define (make-rat a b) (let ((g (gcd a b))) (cons (/ a g) (/ b g)))) Note that we do not need to change our program anywhere else. מבוא מורחב 22 Abstraction barriers Programs that use rational numbers add-rat sub-rat ……. make-rat numer denom car cdr cons מבוא מורחב 23 Alternative implementation (define (add-rat x y) (cons (+ (* (car x) (cdr y)) (* (car y) (cdr x))) (* (cdr x) (cdr y)))) Abstraction Violation If we bypass an abstraction barrier, Changes to one level may affect many levels above it. Maintenance becomes more difficult. מבוא מורחב 24 Compound data A closure property: The result obtained by creating a compound data structure can itself be treated as a primitive object and thus be input to the creation of another compound object. 3 Pairs have the closure property: We can pair pairs, pairs of pairs etc. 2 (cons (cons 1 2) 3) 1 מבוא מורחב 25 Box and pointer diagram (cons (cons 1 (cons 2 3)) 4) 4 3 1 2 מבוא מורחב 26 Lists (cons 1 (cons 3 (cons 2 nil))) 1 3 2 Syntactic sugar: (list 1 3 2) מבוא מורחב 27 Lists (list <x1> <x2> ... <xn>) Same as (cons <x1> (cons <x2> ( … (cons <xn> nil)))) … <x1> <x2> <xn> מבוא מורחב 28 And so, (cons 3 (list 1 2)) (cons 3 (cons 1 (cons 2 nil))) (3 1 2) is the same as which is And (cdr (list 1 2 3)) is (cdr (cons 1 (cons 2 (cons 3 nil)))) which is (cons 2 (cons 3 nil)) which is (list 2 3) And (car (list 1 2 3)) is (car (cons 1 (cons 2 (cons 3 nil)))) which is 1 מבוא מורחב 29