首页 > 其他分享 >牛顿迭代法实现开平方

牛顿迭代法实现开平方

时间:2023-09-10 15:55:14浏览次数:46  
标签:开平方 平方根 double 牛顿 猜测 迭代法 x1 x0

笔算开平方的算法通常使用牛顿迭代法,也称为牛顿切线法。

算法步骤如下:

  1. 选择一个初始猜测值x0,一般来说可以选择1。
  2. 根据牛顿迭代法的公式,计算下一个猜测值x1 = (x0 + a/x0)/2,其中a是待求平方根的数。
  3. 重复步骤2,直到x1和x0的差值小于一个给定的精度eps,即|x1 - x0| < eps。

下面是用C++实现的代码:

 1 #include <iostream>  
 2 #include <cmath>  
 3   
 4 using namespace std;  
 5   
 6 double sqrt_newton(double a, double eps = 1e-8) {  
 7     double x0 = 1.0; // 初始猜测值  
 8     double x1 = (x0 + a/x0)/2; // 第一次计算下一个猜测值  
 9     while (fabs(x1 - x0) > eps) { // 如果差值大于精度,继续迭代  
10         x0 = x1; // 更新猜测值  
11         x1 = (x0 + a/x0)/2; // 计算下一个猜测值  
12     }  
13     return x1; // 返回最终的猜测值  
14 }  
15   
16 int main() {  
17     double a = 2.0; // 待求平方根的数  
18     double result = sqrt_newton(a); // 计算平方根  
19     cout << "The square root of " << a << " is " << result << endl;  
20     return 0;  
21 }
 

这个程序中,sqrt_newton函数使用牛顿迭代法计算平方根。在主函数中,我们传入待求平方根的数a,并输出计算结果。

标签:开平方,平方根,double,牛顿,猜测,迭代法,x1,x0
From: https://www.cnblogs.com/Arthurian/p/6166331.html

相关文章

  • 代码随想录算法训练营第十四天|二叉树的递归法、迭代法
    二叉树的递归遍历(前中后序遍历-递归法与迭代法)递归三部曲:确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑递归法对二叉树进行前中后序遍历(力扣144.145.94.)//前序遍历·递归·LC144_二叉树的前序遍历classSolution{publicList<Integer>preorderTra......
  • 牛顿
    牛顿(1643-1727)牛顿1643年1月4日(儒略历1642年12月25日)诞生于英格兰东部小镇乌尔斯索普一个自耕农家庭。出生前八九个月父死于肺炎。自小瘦弱,孤僻而倔强。3岁时母亲改嫁,由外祖母抚养。11岁时继父去世,母亲又带3个弟妹回家务农。在不幸的家庭生活中,牛顿小学时成绩较差,“除设计机械外......
  • 牛顿插值法代码
    function[A,y]=newtonzi(X,Y,x)%Newton插值函数%X为已知数据点的x坐标%Y为已知数据点的y坐标%x为插值点的x坐标%函数返回A差商表%y为各插值点函数值n=length(X);m=length(x);fort=1:mz=x(t);A=zeros(n,n);A(:,1)=Y';s=0.0;y=0.0;c1=1.......
  • 优化算法——拟牛顿法之DFP算法
    4、求解具体的优化问题  求解无约束优化问题function.py#coding:UTF-8'''Createdon2015年5月19日@author:zhaozhiyong'''fromnumpyimport*#fundeffun(x):return100*(x[0,0]**2-x[1,0])**2+(x[0,0]-1)**2......
  • 优化算法——拟牛顿法之BFGS算法
    一、BFGS算法简介  BFGS算法是使用较多的一种拟牛顿方法,是由Broyden,Fletcher,Goldfarb,Shanno四个人分别提出的,故称为BFGS校正。  同DFP校正的推导公式一样,DFP校正见博文“优化算法——拟牛顿法之DFP算法”。对于拟牛顿方程:。function.py#codin......
  • 优化算法——拟牛顿法之L-BFGS算法
    四、L-BFGS算法中的方向的计算方法五、实验仿真lbfgs.py#coding:UTF-8fromnumpyimport*fromfunctionimport*deflbfgs(fun,gfun,x0):result=[]#保留最终的结果maxk=500#最大的迭代次数rho=0.55sigma=0.4H0=eye(shape(x0)[0])......
  • 牛顿:伸向未知量的利爪
    以下内容节选自《代数的历史(修订版)》第6章《狮子的爪子》。从16世纪末到18世纪初,尽管不列颠群岛经历了内战(1642~1651年)、军事独裁(1651~1660年)、光荣革命(1688年)以及两个朝代的更迭(1603年,斯图亚特王朝推翻都铎王朝;1714年,汉诺威王朝推翻斯图亚特王朝),但这里仍然出现了一些优秀的数学家......
  • 对于牛顿法的理解,从泰勒展开入手
    对于牛顿法的理解,从泰勒展开入手为什么牛顿法在学习率选取适当的时候,优化效率会优于梯度下降:蓝色线是目标函数灰色线是从某点开始的最优下降路线橙色线是使用梯度下降法绿色线是使用牛顿法在a0点对目标函数做泰勒展开,可以直观发现,梯度下降相当于一阶泰勒展开,牛顿法相当于二......
  • OpenCASCADE曲面求交之迭代法2
    将曲面求交的离散网格交线作为Newton迭代法的初始估计点,可以得到较好的交线。OpenCASCADE曲面求交之迭代法[email protected]朱心雄等著《自由曲线曲面造型技术》书中对曲面求交的迭代法有详细介绍,其中关于曲面迭代求交的原理介绍如下:为求得两个曲面精确......
  • 斐波那契数列:2.迭代法
    斐波那契数列:2.迭代法#include<stdio.h>intfib(intm){if(m==1||m==2){return1;}inta=1,b=1,aw=0;while(m>=2){aw=aw+a;a=b;b=aw;m=m-1;}returnaw;}intmain(){intn;scanf("%d",&n);p......