Added my solutions so far
This commit is contained in:
		
							
								
								
									
										42
									
								
								ex-1-37.rkt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								ex-1-37.rkt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#lang racket
 | 
			
		||||
 | 
			
		||||
(define (cont-frac nf df k)
 | 
			
		||||
  (define (recurse i)
 | 
			
		||||
    (if (>= i k)
 | 
			
		||||
        0
 | 
			
		||||
        (/ (nf i) (+ (df i) (recurse (+ 1 i))))))
 | 
			
		||||
  (recurse 0))
 | 
			
		||||
 | 
			
		||||
; produces the same result as cont-frac, but
 | 
			
		||||
; generates an iterative process.
 | 
			
		||||
(define (cont-frac-iterative nf df k)
 | 
			
		||||
  (define (iterate i numer denom)
 | 
			
		||||
    (if (<= i 0)
 | 
			
		||||
        (/ numer denom)
 | 
			
		||||
        (iterate (- i 1) (nf (- i 1)) (+ (df (- i 1)) (/ numer denom)))))
 | 
			
		||||
  (iterate (- k 1) (nf k) (df k)))
 | 
			
		||||
 | 
			
		||||
(define (golden-ratio k)
 | 
			
		||||
  "cont-frac generates 1/golden ratio, so we just inverse it to get the
 | 
			
		||||
   real thing. call with k=1000 or something to get an accurate result"
 | 
			
		||||
  (/ 1.0 (cont-frac-iterative (λ (i) 1.0) (λ (i) 1.0) k)))
 | 
			
		||||
 | 
			
		||||
;; example 1-38
 | 
			
		||||
(define (e-helper i)
 | 
			
		||||
  (let ((r (remainder (- i 1) 3)))
 | 
			
		||||
    (if (= 0 r)
 | 
			
		||||
        (* 2.0 (/ (+ i 2) 3))
 | 
			
		||||
        1.0)))
 | 
			
		||||
(define (eulers-constant k)
 | 
			
		||||
  "Finds euler's constant. the continued fraction gives e - 2, so we add 2."
 | 
			
		||||
  (+ 2 (cont-frac-iterative (λ (i) 1.0) e-helper k)))
 | 
			
		||||
 | 
			
		||||
;; example 1-39
 | 
			
		||||
(define (tan-cf x k)
 | 
			
		||||
  "Finds an approximation of the tangent function. The first numerator is not negative,
 | 
			
		||||
   even though our numerator function calculates them all as negative, so we need to negate
 | 
			
		||||
   the result at the end."
 | 
			
		||||
  (-
 | 
			
		||||
   (cont-frac-iterative (λ (i) (- (if (<= i 0) x (* x x))))
 | 
			
		||||
                        (λ (i) (- (* 2 (+ i 1)) 1))
 | 
			
		||||
                        k)))
 | 
			
		||||
		Reference in New Issue
	
	Block a user