码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 牛顿迭代法求平方根--C++简单实现


    1. 简介

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

    以求平方根为例。
    如 x 2 = m x^2=m x2=m
    令 f ( x ) = x 2 − m f(x)=x^2-m f(x)=x2−m
    则 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​)(x−x0​)+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​=x0​−f′(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​=x0​−2x0​x02​−m​

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

    2. 实现

    迭代即可

    • cpp
    #include 
    #include 
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • go
    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func New_ton(x ,z float64) float64{
     
     	return z - (z*z - x) / (2 * z)
    }
    
    func Sqrt(x float64) float64 {
    	
    	z := 1.0
    	
    	
    	for 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))
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    3. Ref

    go_tutorial

  • 相关阅读:
    QToolBar详解
    web网页设计期末课程大作业 基于HTML+CSS仿苹果商城电商项目的设计与实现
    罗丹明标记的葡聚糖 70k,RB-Dextran,MW:70K
    leetCode 214.最短回文串 + KMP
    Servlet的生命周期
    mybatis快速搭建入门
    go get命令不再具有安装功能
    关于跨域问题详解
    数字孪生智慧楼宇可视化平台实现对园区企业、公众服务一体化
    [OpenJDK:环境变量配置]:填充Profile并修改默认配置
  • 原文地址:https://blog.csdn.net/bdn_nbd/article/details/134536434
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号