牛顿迭代法求求一个数的算术平方根
method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)
= 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) =
0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +…
取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=0
设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。
牛顿迭代法示意图
军人在进攻时常采用交替掩护进攻的方式,若在数轴上的点表示A,B两人的位置,规定在前面的数大于后面的数,则是A>B,B>A交替出现。但现在假设军中有一个胆小鬼,同时大家又都很照顾他,每次冲锋都是让他跟在后面,每当前面的人占据一个新的位置,就把位置交给他,然后其他人再往前占领新的位置。也就是A始终在B的前面,A向前迈进,B跟上,A把自己的位置交给B(即执行B
= A操作),然后A 再前进占领新的位置,B再跟上……直到占领所有的阵地,前进结束。像这种两个数一前一后逐步向某个位置逼近的方法称之为迭代法。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基该方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。 (摘自百度百科:http://baike.baidu.com/view/643093.htm)
参考代码如下:
/**
只考虑非负实数的算术平方根,
如果要考虑完全,则自己再修改
*/
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a ;
cin>>a ;
double x = 1 ;
while(x*x - a > 0.0000001 || x*x - a < -0.0000001)
{
x = (x + a/x)/2 ;
}
cout<< fabs(x) ;
return 0;
}
转载于:https://www.cnblogs.com/ronaldHU/archive/2012/10/07/2714344.html
牛顿迭代法求求一个数的算术平方根相关推荐
- 牛顿迭代法求一个数的平方根
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0), 求出L与x轴交点的横坐标 x1 ...
- 牛顿迭代法求一个数的平方根(python)
# !/usr/bin/env python # -*- coding: utf-8 -*- """ @Author: P♂boy @License: (C) Copyr ...
- 起一个数的平方根_使用二分法计算一个数的算术平方根
在Python中计算一个数的算术平方根其实很简单,可以使用pow()函数.如计算100的算术平方根: 但是呢,为了学习使用二分法这种思想,我们特意将简单问题稍微复杂化一下~ 所谓的二分是指取中间值的意 ...
- 牛顿迭代法求一个数的立方根、平方根
// 不调用原有的库函数,求一个数的立方根.平方根 ------牛顿迭代法,不得不说牛顿太伟大了! 我们现在先求平方根: 设函数 f(x) = x^2 - a ,那么求 a 的平方根等价于求 f(x ...
- 数算(Python)——牛顿迭代法(巴比伦算法)求解平方根
计算x\sqrt{x}x的方法 巴比伦算法: 猜测一个大于0近似值.x0x_{0}x0 使用被开方数除以近似值.xx0\frac{x}{x_{0}}x0x 计算前两步的数的平均值.x1=12( ...
- python利用二分法实现求一个数的算术平方根
本题来源与leetcode的69.x的平方根,原文连接: x 的平方根 https://leetcode.cn/problems/sqrtx/题目如下: 对于这个题目,我们首先从二分查找的根本出发,定 ...
- 牛顿迭代法求一个数开方
牛顿迭代法.用牛顿迭代法求x=a√, 令x初始值为a,迭代公式为Xn+1=12(Xn+aXn),要求迭代的精度满足∣∣Xn+1−Xn∣∣<0.00001.如果迭代20次之后仍未能达到精度要求,也 ...
- 三十六.用牛顿迭代法求输入的数的平方根
**欲求a的平方根,首先猜测一个值x1=a/2(也可以是随便其他什么值)作为其平方根,然后根据下面的迭代公式算出x2,再将x2代入公式右边算出x3--直到连续两次算出的xn和xn+1的差的绝对值小于某 ...
- 用计算机算算术平方根顺序是ON然后是什么,第2课时用计算器求一个正数的算术平方根.ppt...
1.比较下列各组数的大小: (1) 与 (2) 与 8 依次按键 显示:1.732 050 808 例3 小丽想用一块面积为400 cm2的正方形纸片,沿着边的方向剪出一块面积为300 cm2的长方形 ...
- java 牛顿迭代算术平方根,牛顿迭代法求n方根
一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...
最新文章
- 沈志康奖教金 计算机学院,天津大学机械工程学院
- APT 信息收集——shodan.io ,fofa.so、 MX 及 邮件。mx记录查询。censys.io查询子域名。...
- python操作RabbitMQ
- 用 JMX 检测应用程序
- nyoj 211 (Floyd算法求传递闭包)
- html在线编辑器 asp.net,ASP.NET网站使用Kindeditor富文本编辑器配置步骤
- 显示和快速隐藏Mac桌面所有图标
- 【转】C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
- 数据结构实验之二叉树四:还原二叉树
- C语言 goto 语句 - C语言零基础入门教程
- network3D 交互式网络生成
- 5G关键技术研究方向
- 【Spring第四篇】DI注入以及c、p命名空间
- PCL_基于多项式拟合的法线估计、点云平滑和数据重采样_报错
- Atitit.vs2017 visual studio vs2003 vs2005 vs2008 VS2010 vs2012 vs2015新特性 新功能.docx Atitit. visual st
- c#中regex的命名空间_C# Regex类用法
- 二维码怎么知道自己被扫描 ()==> java 篇 带一点点(Android)
- 不同系统下的shell的不同_不同地区不同气候条件下杉木成材时间的区别
- 乐视账号服务器关闭,乐视手机重置后无法登录账号 官方给出解决方案
- EasyExcel的导入和导出
热门文章
- mui+hbuilder h5+内置获取当前地理位置以及各种权限 兼容iOS/安卓
- 图文讲解如何在outlook里设置绑定Gmail企业邮箱教程
- EDA 电子设计自动化VHDL系列课程12 – 用点阵显示器 设计彩灯或动画
- drupal html5,基于Drupal 7HTML5布局模板二次开发.doc
- instant-ngp总结
- YouTube上的版权保护
- Something about ...
- 重装系统后Oracle数据库恢复的方法
- 解决模拟人生3(SIM 3)闪退问题
- 计算机科学与技术工程师职称考试试题,2018年下半年网络工程师考试下午试题及答案...