Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ;;;;;;;;;;
- ;; 1.35 ;;
- ;;;;;;;;;;
- (define tolerance 0.00001)
- (define (close-enough? v1 v2)
- (< (abs (- v1 v2)) tolerance))
- (define (fixed-point f first-guess)
- (define (try guess)
- (let ([next (f guess)])
- (if (close-enough? guess next)
- next
- (try next))))
- (try first-guess))
- ;; phi is the root of x ^ 2 - x - 1. So it is the fixed point of f(x) = 1 + 1 / x.
- (/ (+ 1 (sqrt 5)) 2) ; phi
- ;; 1.618033988749895
- (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0)
- ;; 1.6180327868852458
- ;;;;;;;;;;
- ;; 1.36 ;;
- ;;;;;;;;;;
- (define (new-fixed-point f first-guess)
- (define (try guess)
- (displayln guess)
- (let ([next (f guess)])
- (if (close-enough? guess next)
- next
- (try next))))
- (try first-guess))
- (define soln
- (new-fixed-point (lambda (x) (/ (log 1000) (log x)))
- 2.0)) ; took 24 iterations
- ;; 2.0
- ;; 9.965784284662087
- ;; 3.004472209841214
- ;; 6.279195757507157
- ;; 3.759850702401539
- ;; 5.215843784925895
- ;; 4.182207192401397
- ;; 4.8277650983445906
- ;; 4.387593384662677
- ;; 4.671250085763899
- ;; 4.481403616895052
- ;; 4.6053657460929
- ;; 4.5230849678718865
- ;; 4.577114682047341
- ;; 4.541382480151454
- ;; 4.564903245230833
- ;; 4.549372679303342
- ;; 4.559606491913287
- ;; 4.552853875788271
- ;; 4.557305529748263
- ;; 4.554369064436181
- ;; 4.556305311532999
- ;; 4.555028263573554
- ;; 4.555870396702851
- ;; 4.555315001192079
- ;; 4.5556812635433275
- ;; 4.555439715736846
- ;; 4.555599009998291
- ;; 4.555493957531389
- ;; 4.555563237292884
- ;; 4.555517548417651
- ;; 4.555547679306398
- ;; 4.555527808516254
- ;; 4.555540912917957
- (expt soln soln) ; should be 1000
- ;; 999.9913579312362
- (define (average a b)
- (/ (+ a b) 2))
- (define (new-damped-fixed-point f first-guess)
- (define (try guess)
- (displayln guess)
- (let ([next (average guess (f guess))])
- (if (close-enough? guess next)
- next
- (try next))))
- (try first-guess))
- (define damped-soln
- (new-damped-fixed-point (lambda (x) (/ (log 1000) (log x)))
- 2.0)) ; took 9 iterations
- ;; 2.0
- ;; 5.9828921423310435
- ;; 4.922168721308343
- ;; 4.628224318195455
- ;; 4.568346513136242
- ;; 4.5577305909237005
- ;; 4.555909809045131
- ;; 4.555599411610624
- ;; 4.5555465521473675
- (expt damped-soln damped-soln) ; should be 1000
- ;; 1000.0046472054871
- ;;;;;;;;;;
- ;; 1.37 ;;
- ;;;;;;;;;;
- (define (cont-frac n d k)
- (define (get-tail i) ; return n(i) / [d(i) + ...]
- (if (= i k)
- (/ (n k) (d k))
- (/ (n i) (+ (d i) (get-tail (add1 i))))))
- (get-tail 1))
- (define (estimate-one-over-phi k)
- (cont-frac (lambda (i) 1.0)
- (lambda (i) 1.0)
- k))
- (/ 2 (add1 (sqrt 5))) ; this is 1 / phi
- ;; 0.6180339887498948
- (for ([k (in-range 1 15)]) (displayln (estimate-one-over-phi k)))
- ;; 1.0
- ;; 0.5
- ;; 0.6666666666666666
- ;; 0.6000000000000001
- ;; 0.625
- ;; 0.6153846153846154
- ;; 0.6190476190476191
- ;; 0.6176470588235294
- ;; 0.6181818181818182
- ;; 0.6179775280898876
- ;; 0.6180555555555556 ; k = 11 gives four places of accuracy
- ;; 0.6180257510729613
- ;; 0.6180371352785146
- ;; 0.6180327868852459
- (define (iterative-cont-frac n d k)
- (define (iter i tail)
- ; the invariant is tail = n(i + 1) / [d(i + 1) + ...]
- (if (zero? i)
- tail
- (iter (sub1 i) (/ (n i) (+ (d i) tail)))))
- (iter k 0))
- (define (iterative-estimate-one-over-phi k)
- (iterative-cont-frac (lambda (i) 1.0)
- (lambda (i) 1.0)
- k))
- (for ([k (in-range 1 10)]) (displayln (iterative-estimate-one-over-phi k)))
- ;; 1.0
- ;; 0.5
- ;; 0.6666666666666666
- ;; 0.6000000000000001
- ;; 0.625
- ;; 0.6153846153846154
- ;; 0.6190476190476191
- ;; 0.6176470588235294
- ;; 0.6181818181818182
- ;;;;;;;;;;
- ;; 1.38 ;;
- ;;;;;;;;;;
- (exp 1) ; this is e
- ;; 2.718281828459045
- (define (euler-n i) 1)
- (define (euler-d i)
- (if (= (remainder i 3) 2)
- (* 2 (/ (add1 i) 3))
- 1))
- (define (estimate-e k)
- (+ 2.0 (cont-frac euler-n euler-d k)))
- (for ([k (in-range 1 10)]) (displayln (estimate-e k)))
- ;; 3.0
- ;; 2.666666666666666
- ;; 2.75
- ;; 2.714285714285714
- ;; 2.71875
- ;; 2.717948717948718
- ;; 2.718309859154929
- ;; 2.718279569892473
- ;; 2.718283582089552
- ;;;;;;;;;;
- ;; 1.39 ;;
- ;;;;;;;;;;
- (define (tan-cf x k)
- (define (n i)
- (if (= i 1)
- x
- (- (sqr x))))
- (define (d i)
- (sub1 (* 2 i)))
- (cont-frac n d k))
- (tan pi)
- ;; -1.2246467991473532e-016
- (tan-cf pi 10)
- ;; -1.893214149359168e-009
- (tan (/ pi 4))
- ;; 0.9999999999999999
- (tan-cf (/ pi 4) 10)
- ;; 1.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement