正文

牛顿法求平方根和立方根2005-08-23 19:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/4076.html

分享到:

例题:采用牛顿法求平方根 给定一个正数x,如何计算x的平方根呢? 牛顿的逐步逼近法 对于x的平方根,给定一个猜测值y,则y与x/y的平均值是比y更好的一个猜测值,继续这一过程,会得到越来越好的猜测值。 如何用过程语言表述这一计算过程? 初始条件:给定 x 和 猜测值 guess sqrt(guess,x){ if(goodEnough(guess,x)) return guess; return sqrt(improve(guess,x),x); } goodEnough(guess,x){     if(abs(guess*guess-x)<threshold) return true;     return false; } Improve(guess,x){    return (guess+x/guess)/2;    } 这个例子体现了 可以通过一个过程递归的方法得到越来越好的猜测值; 可以把过程抽象成一个个的黑箱,来完成不同的操作,过程的抽象一方面隐蔽了一些细节,使求解的过程更清晰,另一方面可以通过局部的修改改进整个求值过程的功能; 例如,通过修改goodEnough里面的threshold就可以改变求解的精度,而不必修改其它部分。 求立方根的牛顿法基于如下事实,如果y是x的立方根的一个近似值,那么下式将给出一个更好的近似值:             (x/y2+2y)/3     请利用这一公式实现一个类似平方根过程的求立方根的过程。 代码: #include<stdio.h> #include <math.h> float fun(float guess,float x) {     if(abs(guess*guess*guess-x)<0.0000001) return guess;     else     return fun((x/guess/guess+2*guess)/3,x); } int main() { float a,b; while(scanf("%f%f",&a,&b)) printf("%f\n",fun(a,b)); }

阅读(20814) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册