用迭代法求x=a \sqrt{a}


#include 
#include 

int main()
{
    float a, x0, x1;
    printf("请输入一个正数: ");
    scanf("%f", &a);
    x0 = a / 2;
    x1 = (x0 + a / x0) / 2;
    do
    {
        x0 = x1;
        x1 = (x0 + a / x0) / 2;
    } while (fabs(x0 - x1) >= 1e-5);
    printf("[%f] 的平方根为 [%f]\n", a, x1);
    return 0;
}

为什么x0=a/2

求平方根的值不就是对半取值么,比如4,那就是2*2

采用迭代法求解平方根时,迭代公式为x(n+1) = (x(n) + a/x(n))/2,其中a为被开方数,x(n)为第n次迭代的近似值。

而在选择初始近似值x(0)时,通常选择a/2作为初始值,这是因为平方根函数在x=a/2处具有单峰性质,也就是说,当x小于a/2时,平方根函数单调递增,当x大于a/2时,平方根函数单调递减。因此选择a/2作为初始值可以更快地逼近平方根。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^