算法之牛顿法求平方根+立方根
算法之牛顿法求平方根+立方根
author:onceday date:2022年6月8日
1.基于Scheme语言
牛顿法基于以下几步来求出平方根:
- 先给出一个猜测值y
- 判断猜测值y是否与目标值非常接近,已经足够好,可以直接使用。
- 如果不是足够好,则需要进一步改进猜测值。
- 递归执行,直到得出足够好的值。
将上面的步骤写成代码如下:
;;;定义求平方根的迭代过程
(define (sqrt_iter guess x)(if (good_enough? guess x)guess(sqrt_iter (improve guess x) x))
)
如何判断猜测值是否足够好呢?可以根据猜测值的平方与被开方数之差小于某个固定值,如0.0001;
;;;定义猜测值是否很好的检测方式
(define (good_enough? guess x) (< (abs (- (square guess) x)) 0.001));;;定义绝对值计算
(define (abs x) (if (< x 0)(- x)x));;;定义平方值计算
(define (square x) (* x x))
但是,这对于较大的数来说,不错,因为0.0001相对10,10000等来说是很小的。
但对于0.001来说,其精度就太低了。
因此可以使用百分比来衡量是否足够好,即监视猜测值在从一次迭代到下一次迭代的变化情况,当改变值相对于猜测值的比率很小时就结束。
;;;定义第二种猜测值是否很好的检测方式,利用百分比
(define (good_enough? guess x) (< (/ (abs (- (improve guess x) guess)) guess) 0.0001))
在这个基础上还可以实现求立方根的算法:
- 使用百分比确定是否足够好
- 近似值由公式 x / y 2 + 2 y 3 \frac{x/y^2+2y}{3} 3x/y2+2y计算而来,y是猜测值,x是被开立方数
;;;定义求立方根的迭代过程
(define (cube_iter guess x)(if (good_enough? guess x)guess(cube_iter (improve guess x)x)));;;定义改进猜测的方式
(define (improve guess x) (/ (+ (/ x (square guess)) (* 2 guess)) 3));;;定义平均值计算
(define (average x y) (/ (+ x y) 2));;;定义第二种猜测值是否很好的检测方式,利用百分比
(define (good_enough? guess x) (< (/ (abs (- (improve guess x) guess)) guess) 0.0001));;;定义绝对值计算
(define (abs x) (if (< x 0)(- x)x));;;定义平方值计算
(define (square x) (* x x));;;定义平方根计算,默认初始猜测值1.0
(define (cube_root x) (cube_iter 1.0 x))
注:本内容收集整理于互联网,仅供学习交流之用!
算法之牛顿法求平方根+立方根相关推荐
- 利用牛顿法求平方根-Go语言实现
牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...
- golang语言牛顿法求平方根
package mainimport ("fmt" )// 作为练习函数和循环的简单途径,用牛顿法实现开方函数. // 在这个例子中,牛顿法是通过选择一个初始点 z 然后重复这一过 ...
- 算法--二分查找--求平方根(循环法/递归法)
二分查找: 数据需要是顺序表(数组) 数据必须有序 可以一次排序,多次查找:如果数据频繁插入,删除操作,就必须保证每次操作后有序,或者查找前继续排序,这样成本高,二分查找不合适 数据太小,不用二分查找 ...
- js求平方根/立方根
1.Math方法 Math.sqrt(4) // 2 Math.cbrt(8) // 2 2.切线逼近 // 立方根 function mySqrt (x) {if (isNaN(x)) return ...
- python牛顿法算立方根_Exercise 1.8 牛顿法求立方根
题目: Newton's method for cube roots is based on the fact that if y is an approximation to the cube ro ...
- python 求平方根
如果不调用库函数,可以用二分法或者牛顿法求平方根. 牛顿法 推导过程如下 def solve(x,ratio):num=xwhile(True):num=(num+x/num)/2if(abs(x-n ...
- 算法-二分法和牛顿法求指定精度平方根
一.引言 给定某个整数,给定固定精度,求该整数对应精度的平方根. 假设目标数字为 targrt,则寻找平方根数使得 sqrt(target) = Left = Right = sqrt(Left * ...
- 递归实现牛顿法求整数平方根(原理: 给一个初始值(比如X1 = a/2)迭代求a的平方根,设定一个误差限,不断逼近a X1 = a/2 X2 = (X1+a/X1)/
题目: /* 递归实现牛顿法求整数平方根(原理: 给一个初始值(比如X1 = a/2)迭代求a的平方根,设定一个误差限,不断逼近a X1 = a/2 X2 = (X1+a/X1)/2 - - - Xn ...
- 求平方根sqrt()函数的底层算法效率问题
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然 ...
最新文章
- org.apache.ibatis.binding.BindingException: Type interface XXX is not known to the MapperRegistry.
- 解决Xcode The selected destination does not support the architecture 错误错误
- [Day9]面向对象
- 固定DIV不随滚动条滚动
- 做技术的,这些观点真的扯淡!
- P2447 [SDOI2010]外星千足虫
- 【POJ - 1028】 Web Navigation( 栈 or 模拟队列 )
- java关于贪吃蛇的源代码_完整的贪吃蛇(蛇吃蛋)Java源代码
- 初中计算机网络的教案20分钟,初中网络安全教育教案
- 计算机应用教程卢湘鸿,计算机应用教程
- ios 边录音边放_iOS 录音、音频的拼接剪切以及边录边压缩转码
- java移位运算详解
- Java虚拟机类加载器及双亲委派机制
- cobar mysql 性能_Cobar
- 洛谷 P1357 花园
- 《青玉案·元夕》 辛弃疾
- 【labelCloud标注软件的使用】
- Python-Django-视图
- 阿里、京东、字节跳动春招,Java岗offer不好拿?一文带你搞定
- Makefile 配置和使用
热门文章
- 2020最受欢迎的7个vue管理后台框架
- 宠辱不惊 闲看庭前花开花落
- 黑马程序员-第一天接触Android,环境搭建
- python中difference函数_Python基础篇六 set之difference symmetric_difference
- web大作业介绍自己的家乡_四年级暑假作业
- 网关神器Kong(一):介绍
- 从蓝海战略到长尾理论
- 网络关键设备选型及介绍
- Vue_插槽_自定义指令_tabbar案例
- h1z1加载服务器锁定状态,h1z1进不去游戏锁定状态出错 | 手游网游页游攻略大全...