下面是用二分法和牛顿迭代法求一个正数的平方根。

二分法

这里的题目稍微宽了一点点,包含了整数和小数的情况,这里二分法就不用多说了,如果中间值的平方与目标值在误差范围内,则返回,否则根据大小情况改变左/右区间的端点。

#include<iostream>
using namespace std;
int main()
{double eps = 1e-6;double k = 0.8;  # 输入正数double l = 0.0,r,mid;if (k>=1) r = k;  # 若输入正数大于1,则右端点设为 kif (k<1)  r = 1;  # 若输入整数小于1,则右端点设为 1while (fabs(l-k/l)>eps){mid = l + (r - l) /2 ;   if (mid<k/mid){l = mid;}else {r = mid;}}cout << l << endl;return 0;
}

上面主要是注意两点小细节,一个是 mid 的计算方式:

mid = (l+r)/2;
mid = l + (k-l)/2;  # 推荐

还有判断条件:

if(mid*mid<k){}
if(mid < k/mid){}  # 推荐

这里推荐的原因是推荐使用的这两种方式都可以防止计算的数值溢出的情况。

牛顿迭代法

这里主要是使用了方程的泰勒展开式,将求平方根问题看作求

与 x 轴的交点。.

如上图所示,就是求出曲线上某一点(初始时为二分右端点)切线与x轴的交点,然后将此交点代入原方程中,继续求切线,求切线与x轴交点,直到满足条件,即使平方根的值。 由泰勒方程得切线 L 为:

所以切线交点 x1 为: .

以此类推:

以上类推来看:

若是求平方根可以将 m=2 直接带入得到: .

由上可以得到:

#include<iostream>
using namespace std;double mysqrt(double x)
{if (x == 1 || x == 0)return x;double temp = x / 2;while (1){double a = temp;temp = (temp + x / temp) / 2;if (fabs(a - temp) < 0.000001){return temp;}}
}int main()
{double k = 0.5;double result= 0.0;result= mysqrt(k);cout << result << endl;return 0;
}

进一步,我们将内容拓展到 正数的 3次方根,4次方根....,根据上面的迭代式可以得到:

#include<iostream>
using namespace std;double func(double x, double target,int n)  # F(x)
{return pow(x, n)-target;
}double funct(double x, int n)  # F‘(x)
{return n*pow(x, n - 1);
}double myRootEq(double target,int n)
{double x1, x0;x0 = target;if (x0 == 1 || x0 == 0)return x0;while (1){x1 = x0 - func(x0, target,n) / funct(x0, n);  # 递推式if (fabs(x1 - x0)<0.000001){return x1;}else{x0 = x1;}}
}int main()
{double k = 0.5;double result= 0.0;result= myRootEq(k,3);cout << result << endl;return 0;
}

参考博客:https://blog.csdn.net/ycf74514/article/details/48996383

c语言迭代法求平方根_求平方根问题 (C++ 实现)相关推荐

  1. java 大整数平方根_手算平方根和基于 Java BigInteger 的大整数平方根的实现

    为了实现任意大数的运算,long用BigInteger替换带哦. 好了废话少数,先说数学原理,也就是手算平方根计算机代码实现!那么什么叫手算平方根了??? 手开方图解 据说前苏联的普通工人都会的(毛熊 ...

  2. python语言画成圆相切_求作一圆,使它过一定点且与两直线都相切

    原标题:求作一圆,使它过一定点且与两直线都相切 求作一圆,使它过一定点且与两条给定直线都相切.如下图所示.图中只画出了一个符合要求的圆.很明显,在右侧还应该有一个更大一些的圆符合要求(这里画不下是原因 ...

  3. python怎么求指数_求指数 python

    softmax用于多分类过程中最后一层,将多个神经元的输出,映射到(0, 1)区间内,可以看成概率来理解,从而来进行多分类! softmax函数如下: 更形象的如下图表示: softmax 直白来说就 ...

  4. 分式求二阶导数_求微分   方程y-2x=(x-y)ln(x-y) 求dy/ dx 和d^2y/ dx^2

    满意答案 wushijun216 2013.04.17 采纳率:48%    等级:12 已帮助:15009人 解:因为y=y(x),所以y是x的函数!这道题考虑的主要是隐函数求导的问题. 因为:y- ...

  5. java无权图求最短路径_求有权图和无权图的最短路径

    无权图的最短路径 思路:无权图的最短路径也就是要求两点之间最少几跳可达,那么我们可以这样,用广度遍历,从起点开始一层层遍历,如果第一次遍历到终点,那么肯定是最短路径. public static vo ...

  6. 二维数组求最小值_求一列中满足条件的最大最小值

    [后台回复数字1-10,可查平台所有内容!] 最近碰到一个求最小值的问题,今天和大家分享一下.如下图: 想求张三的几次成绩的最高分和最低分. 我们先来看看最高分,这里大家先别往下看,想想如果是你,你怎 ...

  7. 计算机vba函数,excel vba求平均值_求VBA编程或EXCEL公式(函数)

    最佳答案 =IF(AND(--SUBSTITUTE($C$2,MID($B4,1,1),"")=$C$2,--SUBSTITUTE($C$2,MID($B4,2,1)," ...

  8. 已知法向量 求投影_求点在平面上的投影点坐标

    Q1:怎样求空间曲面在坐标平面上的投影? 求曲面z=f(x,y)在XOY平面内的投影区域,只要把曲面的边界曲线投影到XOY平面,投影曲线在XOY平面内围成的区域就是所求.\x0d曲面z=f(x,y)的 ...

  9. java 求导函数_求导程序编写(oo-java编程)

    本单元的任务为求导. 即将一个含自变量x的多项式F求导成为另外一个含自变量x的多项式f.使得 dF/dx = f 为降低我们的难度,这个任务被分解成了三个阶段: (1)对幂函数进行求导(不允许嵌套) ...

最新文章

  1. 分享基于分布式Http长连接框架--设计模型
  2. bash shell 变量的配置守则
  3. 【机器学习实战】第1章 机器学习基础
  4. 网络工程师交换试验手册之十八:SWITCH的基本配置
  5. nmap常用参数详解
  6. 求以下double数组的平均值(四舍五入保留两位小数):
  7. HDU 1711 Number Sequence(KMP模板)
  8. Linux下使用iotop检测磁盘io使用情况
  9. Linux部署Apache ActiveMQ 5.14.1
  10. Hyperledger Fabric 2.2.1 区块链问题汇总(持续更新)
  11. java -jar命令引导启动Springboot项目的那点事
  12. .NET下使用ufun函数取CAM操作的进给速度
  13. python epoll多路复用技术_python网络编程——IO多路复用之epoll
  14. 家里还装摄像头?看完B站直播毛骨悚然!
  15. 航模飞机设计基础知识
  16. 网页唤起QQ临时会话
  17. IDEA .java with UTF-8: MALFORMED[1] [error] Please try specifying another one usi
  18. android高仿股票源码,StockChart 自定义股票行情图,高仿某币 app 行情图 @codeKK Android开源站...
  19. Parallels Desktop 16 已损坏,无法打开,您应该推出磁盘映像。怎么解决?
  20. Shiro session过期跳转到登录页面问题

热门文章

  1. RxSwift之订阅UITableViewCell里的按钮点击事件
  2. 2014/School_C_C++_B/3/x的x次幂
  3. 2013\Province_Java_A\2.振兴中华
  4. 2014年第五届蓝桥杯C/C++ A组国赛 —— 第四题:排列序数
  5. Vue.js的基本使用 学习笔记
  6. 适用于android 4.0以上版本的子线程网络图片查看器
  7. 【ARM】Tiny4412裸板编程之MMU简介
  8. python 泛型_Python插件 - 如何创建C#泛型List
  9. 线性代数知识点总结_2020考研数学线性代数强化复习重点知识点总结
  10. Window下VS运行达梦DPI