【SICP练习】40 练习1.45



练习1.45

如果看到前面的文章,应该知道我喜欢将某个变量n先设成一个固定的数比如3、4什么的。这里我们依旧如此,先来看看如何写出开四次方根的过程。这道题的目的旨在让我们好好回顾前面的内容,毕竟只剩下一道题我们就完完全全的解决了第一章。

下面我来带大家一起回顾一下。fixed-point是以1个函数和一个初始猜测为参数的函数,用来计算不动点。所谓的不动点就是x=f(x)时的点x。比如这个式子,(fixed-point
square 1.0),它会返回1,因为1的平方等于1。

average-damp是一个参数是一个过程f,返回的还是一个过程的函数,其主要是体现了平均阻尼的技术。

而repeated在前面几题中有大量的介绍,不记得的话可以回过头看看。其以一个过程和一个数字为参数,数字为这个过程的重复执行次数。并且它也将返回一个过程。

下面我们就用这些技术来完成开4次方的函数,英文太烂请见谅。所需要的函数都应该先加载。

(define (4-root x)

   
(fixed-point (repeated (average-damp

 (lambda (y)

    
(/ x (* y y y)))) 10) 1.0))

现在我们可以来测试一下。

(4-root 16)

;Value: 1.9900313055671766

看来效果还是不错的。

下面我们来将开四次方写成一个过程。进展很顺利,一气呵成。

(define 4-root

  
(lambda (x times)

     
(fixed-point (repeated (average-damp

                             
(lambda (y)

                               
(/ x (* y yy)))) times) 1.0)))

在我看来比较棘手的是这里的多个y的相乘,因为前面我在嵌套过程的时候真是走了太多弯路。

这里我先将这个过程写出来,如果不太会的话可以先将函数写出来,因为函数和lambda表达式是可以互相转换的。

(define multi-self

(lambda (n times)

   
(if (= times 1)

      
n

      
(* n (multi-self n (- times 1))))))

有了以上这些积累就可以完成下面这个过程了。

(define n-root

   
(lambda (n x times)

       
(fixed-point (repeated (average-damp

     
                          (lambda (y)

 
                                 (/ x (multi-self y (- n 1)))))times) 1.0)))

我在一开始测试4次方的时候Edwin一直没有反应而且风扇呼呼的转,知道我将times弄得大点,原来是平均阻尼不足以让不动点搜寻收敛。

时间: 2024-09-29 06:34:59

【SICP练习】40 练习1.45的相关文章

算法题:542

 France '98 Today the first round of the Soccer World Championship in France is coming to an end. 16 countries are remaining now, among which the winner is determined by the following tournament: 1 Brazil -----+               +-- ? --+ 2 Chile ------

在Flash中实现Winamp均衡器频谱效果

首先看这个,音乐随便找了一个,不是很好听的 [全屏欣赏] 这个的制作需要获取音频的波谱,把音频的波谱转化为数据,这个东东需要一个软件叫FLASHAMP这个软件很小,而且不需要安装,直接使用,等会儿把这个软件放在下面,送给爱好者(它的使用非常简单,顺便也说说它的使用方法) 得到音乐的数据后,把这些数据作为数组中的元素,然后通过创建函数来调用,同时把这些值赋给MC的y坐标的缩放. 具体地说: 一.用FlashAmp获取音频数据 二.打开flash,开始制作 1.做作4个mc元件,上面的4个图形,注意

谈数据库中模糊数据的输入与判别

数据|数据库 前言 模糊数据库,是指能够处理模糊数据的数据库.一般的数据库都是以二直逻辑和精确的数据工具为基础的,不能表示许多模糊不清的事情.随着模糊数学理论体系的建立,人们可以用数量来描述模糊事件并能进行模糊运算.这样就可以把不完全性.不确定性.模糊性引入数据库系统中,从而形成模糊数据库.模糊数据库研究主要有两方面,首先是如何在数据库中存放模糊数据:其次是定义各种运算建立模糊数据上的函数.模糊数的表示主要有模糊区间数.模糊中心数.模糊集合数和隶属函数等. 自从1965年美国加州大学伯克利分校的

光纤测试方法

光纤在架设,熔接完工后就是测试工作,使用的仪器主要是OTDR测试仪,用加拿大EXFO公司的FTB-100B便携式中文彩色触摸屏OTDR测试仪(动态范围有32/31.37.5/35.40/38.45/43db),可以测试,光纤断点的位置:光纤链路的全程损耗:了解沿光纤长度的损耗分布:光纤接续点的接头损耗.为了测试准确,OTDR测试仪的脉冲大小和宽度要适当选择,按照厂方给出的折射率n值的指标设定. 在判断故障点时,如果光缆长度预先不知道,可先放在自动OTDR,找出故障点的大体地点,然后放在高级OTD

据说是世界编程大赛头名程序

e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1 e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20 e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa e14f 4a 75 f9 eb d

UVa 11752 The Super Powers (数学)

11752 - The Super Powers Time limit: 1.000 seconds http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&category=467&page=show_problem&problem=28 52 We all know the Super Powers of this world and how they manage to get adv

Linux芯片级移植与底层驱动(基于3.7.4内核) 中断控制器

3.中断控制器驱动 在Linux内核中,各个设备驱动可以简单地调用request_irq().enable_irq().disable_irq().local_irq_disable().local_irq_enable()等通用API完成中断申请.使能.禁止等功能.在将Linux移植到新的SoC时,芯片供应商需要提供该部分API的底层支持. local_irq_disable().local_irq_enable()的实现与具体中断控制器无关,对于ARMv6以上的体系架构而言,是直接调用CPS

Linux系统与性能监控

  1. 性能监控介绍 性能优化是找出系统的瓶颈并优化操作系统来消除这些瓶颈的过程.许多系统管理员认为性能优化可以通过阅读cook book,设置一些内核参数就可以简单解决,但事实并非如此.性能优化是实现各个子系统之间性能平衡.这些子系统包括 CPU 内存 I/O 网络 这些子系统是高度相互依赖的.其中任何一个子系统的高负载都很容易导致其他子系统出现问题.比如 大量的页面调入I/O请求会使内存队列堵塞 全负荷的网卡会使CPU繁忙 维护闲置内存队列会使CPU繁忙 大量的内存写入硬盘的请求会使CPU

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴