怎么用牛顿法近似求解根号2?最好能给出迭代的前几步。谢谢!
2个回答
牛顿法是一种迭代求根法。
第一步:我们先任意选定一个初始点$x_0$和迭代误差$\epsilon$
第二步:$x_{n+1}=x_{n}-\frac{f(x_n)}{f'(x_n)}$。反复迭代直到$|x_{n+1}-x_{n}|<\epsilon$。
最终的$x_n$就是方程$f(x)$的近似解。
对于逼近$\sqrt{2}$,实际上就是求$f(x)=x^2-2$的正根。
先求出$f'(x)=2x$。$\sqrt{2}$肯定在1到2之间,我们不妨选定$x_0=1.5$,误差$\epsilon=0.00001$。
初始0:$x_0=1.5$, $f(x_0)=0.25$, $f'(x_0)=3$, $f(x_0)/f'(x_0)=0.08333$
迭代1:$x_1=1.5 - 0.08333=1.41667$, $f(x_1)=0.00694$, $f'(x_1)=2.83333$, $f(x_1)/f'(x_1)=0.00245$
迭代2:$x_2=1.41667 - 0.00245=1.41422$, $f(x_2)=0.00001$, $f'(x_2)=2.82843$, $f(x_2)/f'(x_2)=0.00001$
迭代3:$x_3=1.41422 - 0.00001=1.41421$
停止迭代,最终近似解就是$1.41421$.
SofaSofa数据科学社区DS面试题库 DS面经牛顿法求根的python代码
def findSqrt(x, tol=0.01):
if x == 0: return 0
if x < 0: return findSqrt(-x) * 1j
init_guess = 1
while init_guess ** 2 < x:
init_guess *= 2
r_o = init_guess
err = r_o ** 2 - x
while abs(err) > tol:
r = r_o - err / (2 * r_o)
r_o, err = r, r ** 2 - x
return r_o
相关主题
计算中的截断误差是什么意思?
1回答
部分主元
1回答
随机梯度下降(sgd)的收敛问题
4回答
学习率不当会导致sgd不收敛吗?
5回答
我们谢绝在回答前讲“生动”的故事。
我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。
我们谢绝答非所问。
我们谢绝自己不会、硬要回答。
我们感激每一个用户在编写答案时的努力与付出!