通过"牛顿迭代法求平方根"的java实现和原理 缺乏、安全感 2022-03-21 15:12 380阅读 0赞 # 简介 # 牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method), 它是一种在实数域和复数域上近似求解方程的方法。方法使用函数 f(x)泰勒级数的前面几项来寻找方程f(y)=0的根。 以上维基百科 # 原理分析 # ![维基百科][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDUzMzAw_size_16_color_FFFFFF_t_70] # 具体例子 # 求f(x)=-x2\+5 当f(x)=0 求x的值 答案就相当于求5的平方根 在f(x)上随便取点P1(x1,y1) 那么P1切线方程为y=-2x1x+2\*x1*x1\+y1 \-2x1x+2*x1\*x1\+y1=0 得到x2=x1+f(x)/2x1 得到 x2=3 x3=2.333 x4=2.238 不断的接近根号5的值2.36 # 简单画图了下 # ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDUzMzAw_size_16_color_FFFFFF_t_70 1] 图的说明:P2比P1接近绿色的那个了 如果再画P3 就更接近了 # java代码 # public class niudundiedai { public static double sqt(double c){ if(c<0){ return Double.NaN; } double err=1e-15; double t=c;//t代表参数c的平方根,先随便给t一个初始值c int count=0;//count没任何用,就是用来看计算过程的 while(Math.abs(t-c/t)>err*t){//由于只是无限接近真正的平方根,所以比较c的估算平方根t,t的平方和初始c的差距,要小于指定误差,并计算次数 t=(c/t+t)/2.0;//x2=(x1+c/x1)/2,不断计算x值,接近真是的值 count++;//计算的次数 System.out.print("第"+count+"次计算"); System.out.println(t);//每次计算的值,越来越接近了! } return t; } public static void main(String[] args) { double sqt = sqt(102); System.out.println("符合误差的最终值"); System.out.println(sqt); } } # 结果 # ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDUzMzAw_size_16_color_FFFFFF_t_70 2] # 后续拓展 # 比如可以计算多次方程等 等用到了再写 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDUzMzAw_size_16_color_FFFFFF_t_70]: /images/20220321/d72749eb77514a5b9b290786af64f0d6.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDUzMzAw_size_16_color_FFFFFF_t_70 1]: /images/20220321/8fffd7a03cad4c0694d9c791f1c94e35.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDUzMzAw_size_16_color_FFFFFF_t_70 2]: /images/20220321/d64e5063a98849f2b681e9dfc15c46ca.png
还没有评论,来说两句吧...