Overview
Solve x \sqrt{x} x 12
Babylonian:巴比伦算法/牛顿法 23
// c++ code
double ans=1, pre=0;
while(abs(ans-pre)>1e-6){
pre=ans;
ans=(ans+x/ans)/2;
}
基于泰勒公式的级数逼近 2
在 线性化点 x 0 = 1 x_0=1 x0=1 泰勒展开
x ≅ 1 + 1 2 ( x − 1 ) − 1 4 ( x − 1 ) 2 2 ! + 3 8 ( x − 1 ) 3 3 ! − 15 16 ( x − 1 ) 4 4 ! + ⋯ \sqrt{x} \cong 1+\frac{1}{2}(x-1)-\frac{1}{4} \frac{(x-1)^{2}}{2 !}+\frac{3}{8} \frac{(x-1)^{3}}{3 !}-\frac{15}{16} \frac{(x-1)^{4}}{4 !}+\cdots x≅1+21(x−1)−412!(x−1)2+833!(x−1)3−16154!(x−1)4+⋯
根据该公式我们可以在一定精度内逼近真实值,不过这个公式仍然存在一个问题,即是公式的收敛问题。
在泰勒级数展开中,平方根函数的公式当且仅当参数值位于一个有效范围内时才有效,在该范围内计算趋于收敛。该范围即是收敛半径,当我们对平方根函数用 x 0 = 1 x_0=1 x0=1 进行计算时,泰勒级数公式希望x处于范围: 0 < x < 2 0<x<2 0<x<2 之间。如果x在收敛半径之外,则展开式中的项会越来越大,泰勒级数离答案也就越来越远。为了解决该问题,我们可以考虑当待开平方数大于4时以4去除它,最后将得到的数乘以相同次数的2即可。