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

首先我们利用牛顿法的求出f(x)
f ( x ) = x − g ( x ) D g ( x ) g ( x ) = x 3 + a x 2 + b x + c D g ( x ) = 3 x 2 + 2 a x + b f(x)=x-\frac{g(x)}{Dg(x)}\\ g(x) = x^3+ax^2+bx+c\\ Dg(x) = 3x^2+2ax+b\\ f(x)=xDg(x)g(x)g(x)=x3+ax2+bx+cDg(x)=3x2+2ax+b
然后我们利用以下变换,找到的不动点就是g(x)=0的根,这就是牛顿法的意思。
x = > x − x 3 + a x 2 + b x + c 3 x 2 + 2 a x + b x=>x-\frac{x^3+ax^2+bx+c}{3x^2+2ax+b} x=>x3x2+2ax+bx3+ax2+bx+c
这道题目是多项式求导比较方便,但是,为了保持方法的通用性,因为好多函数的导数不好求,所以我们采用书中的求导近似值方法进行计算。写出完整的过程。

#lang racket

(define dx 0.000001)
(define (cube x) (* x x x))
(define (square x) (* x x))
(define (deriv g)
  (lambda (x)
    (/ (- (g (+ x dx)) (g x))
       dx)))

(define (newton-transform g)
  (lambda (x)
    (- x (/ (g x) ((deriv g) x)))))

(define (newtons-method g guess)
  (fixed-point (newton-transform g) guess))

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) 0.000001))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))
(define (cubic a b c)
  (lambda (x)
    (+ (cube x) (* a (square x)) (* b x) c)))
    
(newtons-method (cubic 2 3 4) 1)

运行结果

-1.650629191439388
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值