当前位置: 移动技术网 > 科技>人工智能>机器学习 > 计算机程序的构造和解释 练习题3.5

计算机程序的构造和解释 练习题3.5

2020年07月15日  | 移动技术网科技  | 我要评论

矩形里面可以刚好包裹一个圆,直径就是长或者宽短的那一个,其实就是利用随机数,在矩形里面打点,概率就是圆形占矩形面积的比率,然后通过面积计算出圆周率。

#lang racket
(define (square x) (* x x))

(define (monte-carlo trials experiment)
  (define (iter trials-remaining trials-passed)
    (cond ((= trials-remaining 0)
           (/ trials-passed trials))
          ((experiment)
           (iter (- trials-remaining 1) (+ trials-passed 1)))
          (else
           (iter (- trials-remaining 1) trials-passed))))
  (iter trials 0))

(define (p x y r)
  (lambda (a b) (<= (+ (square (- a x)) (square (- b y))) (square r))))

(define (min a b)
  (if (> a b) b a))

(define (estimate-integral p x1 x2 y1 y2 trials)
  (define r (min (/ (- x1 x2) 2) (/ (- y1 y2) 2)))
  (define p? (p (/ (+ x1 x2) 2) (/ (+ y1 y2) 2) r))
  (define (test)
    (p? (random-in-range x1 x2) (random-in-range y1 y2)))
  (/ (* (- x1 x2) (- y1 y2) (monte-carlo trials test)) (square r)))
  
(define (random-in-range low high)
  (let ((range (- high low)))
    (+ low (random range))))

(estimate-integral p 2 8 4 10 1000)

运行结果,基本等于3.14

3 13/250

本文地址:https://blog.csdn.net/holybird0213/article/details/107307780

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网