[整理版]牛顿迭代法求平方根
牛顿迭代法求平方根
求n的平方根,先假设一猜测值X = 1,然后根据以下公式求出X,再将X代入011公式右边,继续求出X…通过有效次迭代后即可求出n的平方根,X2k+1
(迭代公式) 简单推导
假设f(x)是关于X的函数:
求出f(x)的一阶导,即斜率:
简化等式得到:
然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值,为什么可以用迭代法呢?理由是中值定理(Intermediate Value Theorem):
如果f函数在闭区间[a,b]内连续,必存在一点x使得f(x) = c,c是函数f在闭区间[a,b]内的一点
我们先猜测一X初始值,例如1,当然地球人都知道除了1本身之外任何数的平方根都不会是1。然后代入初始值,通过迭代运算不断推进,逐步靠近精确值,直到
2得到我们主观认为比较满意的值为止。例如要求768的平方根,因为25 = 625,
2而30 = 900,我们可先代入一猜测值26,然后迭代运算,得到较精确值:27.7128。
2回到我们最开始的那个”莫名其妙”的公式,我们要求的是N的平方根,令x = n,假设一关于X的函数f(x)为:
2f(X) = X - n
求f(X)的一阶导为:
f'(X) = 2X
代入前面求到的最终式中:
2 X = X - (X - n)/2Xk+1kkk
化简即得到我们最初提到的那个求平方根的神奇公式了:
用泰勒公式推导
我之前介绍过在The Art and Science of C一
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
中有用到泰勒公式求平方根的算法,其实牛顿迭代法也可以看作是泰勒公式(Taylor Series)的简化,先回顾下泰勒公式:
仅保留等式右边前两项:
令f(X+ε) = 0,得到: 0
再令X = X + ε,得到ε…依此类推可知: 1001
转化为:
引申
从推导来看,其实牛顿迭代法不仅可以用来求平方根,还可以求立方根,甚至更复
杂的运算。
同样,我们还可以利用pascal语言来实现下那个最简单的求平方根的公式(尽管我
们可以直接用sqrt()完成) program asd (input,output); var
a,x,n,i:real;
begin
writeln('Please input a!'); read(a);
x:=1;
n:=1000;
i:=1;
while i<=n do
begin
x:=(x+(a/x))/2;
i:=i+1;
end;
writeln(x:10:3);
readln;
end.
2007年赣州市信息学奥赛高中组上机测试题
第2题:编程求平方根(15分)
任给常数b,编程求b的算术平方根 ,要求准确到小数点后3位,注意不能调用高级语言
系统的开平方根函数。
输入输出样例:输入:b=7
输出:2.646
确定迭代关系式: x:=(x+(b/x))/2;
program asd (input,output); var
a,x,n,i:real;
begin
writeln('Please input b!'); read(b);
x:=1;
n:=1000;
i:=1;
while i<=n do
begin
x:=(x+(b/x))/2;
i:=i+1;
end;
writeln(x:10:3);
readln;
end.