求解方程数值近似解

Last updated on May 7, 2023 pm

Solve \(\sqrt{x}\) [1][2]

Babylonian:巴比伦算法/牛顿法 [2][3]

1
2
3
4
5
6
// c++ code
double ans=1, pre=0;
while(abs(ans-pre)>1e-6){
pre=ans;
ans=(ans+x/ans)/2;
}

基于泰勒公式的级数逼近 [2]

在 线性化点 \(x_0=1\) 泰勒展开

\[ \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_0=1\) 进行计算时,泰勒级数公式希望x处于范围: \(0<x<2\) 之间。如果x在收敛半径之外,则展开式中的项会越来越大,泰勒级数离答案也就越来越远。为了解决该问题,我们可以考虑当待开平方数大于4时以4去除它,最后将得到的数乘以相同次数的2即可。

Code with Online Compiler

Reference


求解方程数值近似解
https://cgabc.xyz/posts/52064f73/
Author
Gavin Gao
Posted on
May 1, 2022
Licensed under