牛顿迭代法求平方根--C++简单实现

1. 简介

牛顿迭代法是求近似根的一种方法。

以求平方根为例。
x 2 = m x^2=m x2=m
f ( x ) = x 2 − m f(x)=x^2-m f(x)=x2m
f ′ ( x ) = 2 x f'(x)=2x f(x)=2x
函数 f ( x ) f(x) f(x) x 0 x_0 x0处的切线方程为
g ( x ) = f ′ ( x 0 ) ( x − x 0 ) + f ( x 0 ) g(x) = f'(x_0)(x - x_0) + f(x_0) g(x)=f(x0)(xx0)+f(x0)

令该切线与x轴交点为 ( x 1 , 0 ) (x_1,0) (x1,0)
x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0 - \frac {f(x_0)} {f'(x_0)} x1=x0f(x0)f(x0)

x 1 = x 0 − x 0 2 − m 2 x 0 x_1= x_0- \frac {x_0^2-m}{2x_0} x1=x02x0x02m

重复上述迭代过程,直到 x n + 1 − x n x_{n+1}-x_n xn+1xn小于某一精度

2. 实现

迭代即可

  • cpp
#include <iostream>
#include <cstring>
#include <cmath>double my_sqrt(double x)
{double x0 = 1;double x1 = x0 - (x0 * x0 - x)/(2*x0);while ( std::abs(x0-x1) > 1e-6) {x0 = x1;x1 -= (x1*x1 - x) / (2*x1);}return x0;
}int main(int argc, char *argv[])
{std::cout << my_sqrt(2) << std::endl;std::cout << my_sqrt(3) << std::endl;std::cout << my_sqrt(5) << std::endl;return 0;
}
  • go
package mainimport ("fmt""math"
)func New_ton(x ,z float64) float64{return z - (z*z - x) / (2 * z)
}func Sqrt(x float64) float64 {z := 1.0for z0:= New_ton(x, z); math.Abs(z-z0) > 1e-6; z0 = New_ton(x,z0) {z = z0}return z
}func main() {fmt.Println(Sqrt(2))fmt.Println(Sqrt(3))fmt.Println(Sqrt(5))
}

3. Ref

go_tutorial

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android studio Build Log乱码+错误: 找不到符号符号

控制台输出乱码&#xff0c;首先解决乱码问题&#xff0c;才可以精确的知道问题所在&#xff1b; android studio>Help>Edit Custom VM Options... 输出一行代码在里面&#xff0c;保存&#xff0c;重启IDE -Dfile.encodingUTF-8 Clean 一下工程&#xff0c;然后Rebu…

【Django-02】 Model模型和模型描述对象Meta

Model和Meta 概念ModelMetaModel支持的字段类型Meta 属性例子 概念 就是对象的意思&#xff0c;底层一个Model对应一张表&#xff0c;而Meta是Model的内部类&#xff0c;是用来描述Model和数据库表的相关元数据信息&#xff0c;比如主键&#xff0c;排序&#xff0c;unique_ke…

上门维修安装派单系统小程序APP开发之会员级别设计深度解析

啄木鸟鲁班大师上门安装维修平台APP开发之VIP会员解析&#xff0c;在APP或者小程序里设置的会员叫VIP级别会员&#xff0c;系统一共分为4种会员&#xff0c;注册会员&#xff0c;正式会员&#xff0c;VIP金卡会员&#xff0c;VIP钻卡会员。注册用户是指注册了平台但是没有消费记…

预计2023年交付35万台,增速超400%!HUD硬核玩家强势崛起

随着HUD市场渗透率加速提升&#xff0c;其高速增长期已经来临。 W-HUD和AR-HUD在中国市场的萌芽导入期是在2020年前后&#xff0c;此前HUD市场不温不火&#xff0c;主要归因于以往W-HUD FOV较小&#xff0c;成像画面有限&#xff0c;显示内容简单且效果粗糙&#xff1b;而AR-H…

解决selenium使用chrome下载文件(如pdf)时,反而打开浏览器的预览界面

文章目录 解决方法完整的配置 解决方法 在初始化浏览器的时候&#xff0c;添加以下配置即可&#xff1a; option webdriver.ChromeOptions()prefs {"profile.managed_default_content_settings.images": 2, # 禁止加载图片# permissions.default.stylesheet: 2, …

Linux下使用宏定义判断系统架构和系统类型

文章目录 查看编译器当前支持的宏定义查找指定的宏不同架构不同系统 附录-编译器内部常用的一些宏定义宏定义实际应用使用宏定义判断系统架构使用宏定义判断系统类型 一般情况下在linux下做C/C方面的开发不需要太关注系统架构&#xff0c;当然如果涉及到不同架构下的适配问题&a…

软考小记-软件工程

模块的控制范围包括模块本身及其所有的从属模块。模块的作用范围是指模块一个判定的作用范围&#xff0c;凡是受这个判定影响的所有模块都属于这个判定的作用范围.&#xff0c;原则上一个模块的作用范围应该在其控制范围之内&#xff0c;若没有&#xff0c;则可以将判定所在模块…

安装向量数据库milvus及其Attu

前置条件安装docker compose 在宿主机上创建文件目录 mkdir -p /home/sunyuhua/milvus/db mkdir -p /home/sunyuhua/milvus/conf mkdir -p /home/sunyuhua/milvus/etcd下载docker-compose.yml wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-s…

OpenGL_Learn14(光照贴图)

1. 漫反射贴图 在光照场景中&#xff0c;它通常叫做一个漫反射贴图(Diffuse Map)&#xff08;3D艺术家通常都这么叫它&#xff09;&#xff0c;它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…

积分...

黎曼积分: ∫ a b f ( x ) d x lim ⁡ m a x Δ x i − > 0 ∑ 0 n f ( z i ) Δ x i \int_a^bf(x)dx\lim\limits_{max \Delta x_i->0}\sum_0^nf(z_i)\Delta x_i ∫ab​f(x)dxmaxΔxi​−>0lim​∑0n​f(zi​)Δxi​ Δ x i x i − x i − 1 \Delta x_ix_i-x_{i-1…

AI技术实力认证,宏电股份荣获2023年度AI天马“领军企业”

近日&#xff0c;由中国新一代人工智能发展战略研究院指导&#xff0c;深圳市人工智能产业协会主办&#xff0c;广东未来产业研究院承办的2023年度“AI天马”认定最终结果公布&#xff0c;宏电股份荣获AI天马“领军企业”奖项。 宏电股份基于20余年的技术沉淀&#xff0c;在工业…

基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码

基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于猎食者优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

关于lenra你需要了解的

monorepo&#xff1a;项目代码管理方式&#xff0c;单个仓库中管理多个项目是一种设计思想 lenra&#xff1a;是一种工具&#xff0c;对于使用npm和git管理多软件包代码仓库的工作流程进行优化 使用这些工具的优点&#xff1a; 公共依赖只要安装一次&#xff0c;Monorepo 中…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大关键点分析

数字化时代银行网点厅堂营销需要抓住以下5大关键点&#xff1a; 1、精准识别客户&#xff1a;在数字化时代&#xff0c;银行网点厅堂营销的关键在于精准识别客户。通过利用大数据和人工智能技术&#xff0c;银行可以分析客户的行为和需求&#xff0c;从而更好地了解客户&#…

面试题:你怎么理解System.out.println() ?

文章目录 首先分析System源码out源码分析println分析拓展知识点 你如何理解System.out.println() ? 学了这么久的面向对象编程&#xff0c;那如何用一行代码体现呢&#xff1f; 如果你能自己读懂System.out.println()&#xff0c;就真正了解了Java面向对象编程的含义 面向对…

如何理解低代码开发工具?

目录 一、低代码平台是什么 1. 数据输入 2. 数据流转 3. 数据加工 4. 数据输出 &#xff08;1&#xff09;视图&#xff1a;单表的数据的简单展示 &#xff08;2&#xff09;看板&#xff1a;提供单表、多表数据的多种图表组合展示 二、低代码能力 ➪ 全栈可视化编程&#xff1…

大彻大悟,期末的大学生请码住!!

不装了&#xff0c;我摊牌了&#xff0c;这东西大学生太太太需要了啊&#xff01; 就是这个 写作火火&#xff0c;只需要输入需求&#xff0c;一键生成&#xff0c;几秒就给我写出来一篇&#xff0c;不满意还可以重新写&#xff0c;关键每次内容都不一样&#xff0c;完全不怕…

Redis常用的八种场景

作为一名 Java后端人员&#xff0c;对 Redis肯定并不陌生&#xff0c;Redis作为一种内存数据库&#xff0c;以其速度之快在编程的舞台上纵横多年&#xff0c;那么&#xff0c;Redis到底适合哪些业务场景&#xff1f;今天就来聊一聊。 1. 缓存/数据库 缓存&#xff08;Cache&am…

电压放大器实验可以研究哪些领域

电压放大器是一种电子电路&#xff0c;能够对输入信号进行放大&#xff0c;使得输出信号具有更大的幅度。在实验中&#xff0c;电压放大器可以应用于许多领域&#xff0c;从电子学到通信领域&#xff0c;都能够进行研究与实践。 在电子学领域&#xff0c;电压放大器实验可以用于…