首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 二进制:不了解计算机的源头,你学什么编程
02 | 余数:原来取余操作本身就是个哈希函数
03 | 迭代法:不用编程语言的自带函数,你会如何计算平方根?
04 | 数学归纳法:如何用数学归纳提升代码的运行效率?
05 | 递归(上):泛化数学归纳,如何将复杂问题简单化?
06 | 递归(下):分而治之,从归并排序到MapReduce
07 | 排列:如何让计算机学会“田忌赛马”?
08 | 组合:如何让计算机安排世界杯的赛程?
09 | 动态规划(上):如何实现基于编辑距离的查询推荐?
10 | 动态规划(下):如何求得状态转移方程并进行编程实现?
11 | 树的深度优先搜索(上):如何才能高效率地查字典?
12 | 树的深度优先搜索(下):如何才能高效率地查字典?
13 | 树的广度优先搜索(上):人际关系的六度理论是真的吗?
14 | 树的广度优先搜索(下):为什么双向广度优先搜索的效率更高?
15 | 从树到图:如何让计算机学会看地图?
16 | 时间和空间复杂度(上):优化性能是否只是“纸上谈兵”?
17 | 时间和空间复杂度(下):如何使用六个法则进行复杂度分析?
18 | 总结课:数据结构、编程语句和基础算法体现了哪些数学思想?
19 | 概率和统计:编程为什么需要概率和统计?
20 | 概率基础(上):一篇文章帮你理解随机变量、概率分布和期望值
21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
22 | 朴素贝叶斯:如何让计算机学会自动分类?
23 | 文本分类:如何区分特定类型的新闻?
24 | 语言模型:如何使用链式法则和马尔科夫假设简化概率模型?
25 | 马尔科夫模型:从PageRank到语音识别,背后是什么模型在支撑?
26 | 信息熵:如何通过几个问题,测出你对应的武侠人物?
27 | 决策树:信息增益、增益比率和基尼指数的运用
28 | 熵、信息增益和卡方:如何寻找关键特征?
29 | 归一化和标准化:各种特征如何综合才是最合理的?
30 | 统计意义(上):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
31 | 统计意义(下):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
32 | 概率统计篇答疑和总结:为什么会有欠拟合和过拟合?
33 | 线性代数:线性代数到底都讲了些什么?
34 | 向量空间模型:如何让计算机理解现实事物之间的关系?
35 | 文本检索:如何让计算机处理自然语言?
36 | 文本聚类:如何过滤冗余的新闻?
37 | 矩阵(上):如何使用矩阵操作进行PageRank计算?
38 | 矩阵(下):如何使用矩阵操作进行协同过滤推荐?
39 | 线性回归(上):如何使用高斯消元求解线性方程组?
40 | 线性回归(中):如何使用最小二乘法进行直线拟合?
41 | 线性回归(下):如何使用最小二乘法进行效果验证?
42 | PCA主成分分析(上):如何利用协方差矩阵来降维?
43 | PCA主成分分析(下):为什么要计算协方差矩阵的特征值和特征向量?
44 | 奇异值分解:如何挖掘潜在的语义关系?
45 | 线性代数篇答疑和总结:矩阵乘法的几何意义是什么?
46 | 缓存系统:如何通过哈希表和队列实现高效访问?
47 | 搜索引擎(上):如何通过倒排索引和向量空间模型,打造一个简单的搜索引擎?
48 | 搜索引擎(下):如何通过查询的分类,让电商平台的搜索结果更相关?
49 | 推荐系统(上):如何实现基于相似度的协同过滤?
50 | 推荐系统(下):如何通过SVD分析用户和物品的矩阵?
51 | 综合应用篇答疑和总结:如何进行个性化用户画像的设计?
当前位置:
首页>>
技术小册>>
程序员必学数学基础课
小册名称:程序员必学数学基础课
### 03 | 迭代法:不用编程语言的自带函数,你会如何计算平方根? 在编程与数学的交汇点,计算平方根是一项基础而重要的技能。尽管现代编程语言如Python、Java、C++等都提供了直接计算平方根的内置函数(如Python的`math.sqrt()`),但了解不使用这些内置函数,通过迭代法手动计算平方根的原理与方法,对于深入理解数值计算、算法设计以及数学原理有着不可估量的价值。本章将深入探讨几种经典的迭代算法,用于计算任意非负实数的平方根。 #### 一、引言 平方根是一个数的平方等于给定数的非负实数。例如,4的平方根是2,因为2的平方等于4。在数学和计算机科学中,计算平方根的方法多种多样,从简单的二分搜索到复杂的牛顿迭代法,每种方法都有其独特的适用场景和性能特点。迭代法因其简单性和高效性,在实际应用中尤为常见。 #### 二、二分搜索法求平方根 二分搜索法(Binary Search)是一种在有序数组中查找特定元素的快速算法,但也可以巧妙地用于计算平方根。基本思路是,对于给定的非负实数`x`,我们知道其平方根一定位于`0`和`x`之间(对于`x=0`,平方根为0,此处作为特殊情况处理)。通过不断缩小这个区间,我们可以逼近真实的平方根值。 **算法步骤**: 1. **初始化**:设置两个指针`left = 0`和`right = x`,表示平方根可能存在的区间。 2. **循环条件**:当`left <= right`时执行循环。 3. **计算中点**:`mid = left + (right - left) / 2`,避免大数相加导致的溢出。 4. **判断与调整**: - 如果`mid*mid`等于`x`,则找到了精确的平方根,返回`mid`。 - 如果`mid*mid`小于`x`,说明真实平方根在`mid`的右侧,更新`left = mid + 1`。 - 如果`mid*mid`大于`x`,说明真实平方根在`mid`的左侧,更新`right = mid - 1`。 5. **循环结束**:当`left > right`时,循环结束,此时`left`或`right`(由于更新规则,两者相邻)即为所求平方根的近似值(根据精度要求,可能需要额外处理)。 **注意**:由于浮点数运算的精度限制,二分搜索法得到的平方根是一个近似值,其精度取决于循环的终止条件(如`left - right < epsilon`,其中`epsilon`是一个很小的正数,表示精度要求)。 #### 三、牛顿迭代法(Newton's Method) 牛顿迭代法,又称牛顿-拉弗森方法(Newton-Raphson method),是一种在实数域和复数域上近似求解方程的方法。对于平方根的计算,我们可以将其转化为求解方程`f(y) = y^2 - x = 0`的根。牛顿迭代法的基本思想是从一个初始猜测值开始,通过迭代不断逼近真实解。 **算法步骤**: 1. **选择初始猜测值**:通常选择`y0 = x / 2`作为初始猜测值,因为对于任意非负实数`x`,其平方根不会超过`x/2`(除非`x`非常小或为零)。 2. **迭代公式**:根据牛顿迭代法的原理,迭代公式为`yn+1 = yn - f(yn) / f'(yn)`。将`f(y) = y^2 - x`代入,得到`yn+1 = (yn + x / yn) / 2`。 3. **迭代过程**:使用上述迭代公式,从`y0`开始,不断计算新的`yn+1`,直到满足某个终止条件(如`|yn+1 - yn| < epsilon`)。 4. **输出结果**:当满足终止条件时,`yn+1`即为所求平方根的近似值。 **优点**:牛顿迭代法通常比二分搜索法收敛得更快,特别是对于接近真实解的初始猜测值。然而,其性能也依赖于初始猜测值的选择,不恰当的初始值可能导致算法不收敛或收敛到错误的解。 #### 四、其他迭代方法简述 除了二分搜索法和牛顿迭代法外,还有其他一些迭代方法可用于计算平方根,如割线法(Secant Method)、固定点迭代法(Fixed-Point Iteration)等。这些方法各有特点,但基本原理相似,都是通过不断迭代逼近真实解。 - **割线法**:是牛顿迭代法的一种近似,使用前两次迭代的结果来构造一条割线,以此割线与x轴的交点作为新的迭代值。 - **固定点迭代法**:选择一个合适的函数`g(y)`,使得`g(y)`的固定点(即满足`y = g(y)`的`y`值)即为所求方程的解。通过不断迭代`y = g(y)`来逼近固定点。 #### 五、实际应用与注意事项 在实际应用中,选择哪种迭代方法取决于具体问题的需求、初始值的易得性、算法的收敛速度以及计算资源的限制。对于平方根的计算,牛顿迭代法因其高效性和广泛适用性而备受青睐。然而,无论采用哪种方法,都需要注意浮点数的精度问题,以及迭代过程中可能出现的数值稳定性问题。 此外,虽然迭代法能够手动实现平方根的计算,但在实际编程中,直接使用编程语言提供的内置函数往往更为高效和便捷。因此,了解这些迭代方法更多是为了深入理解数值计算的本质和算法设计的思想,而非完全替代内置函数的使用。 #### 六、总结 本章介绍了通过迭代法计算平方根的几种经典方法,包括二分搜索法和牛顿迭代法。这些方法不仅展示了迭代法在数值计算中的应用,也体现了算法设计与数学原理的紧密结合。通过学习和掌握这些迭代方法,读者可以更加深入地理解数值计算的精髓,为后续的编程和算法学习打下坚实的基础。同时,也应注意到,在实际应用中,应根据具体问题的需求选择合适的算法,并关注数值稳定性和计算效率等关键问题。
上一篇:
02 | 余数:原来取余操作本身就是个哈希函数
下一篇:
04 | 数学归纳法:如何用数学归纳提升代码的运行效率?
该分类下的相关小册推荐:
ChatGPT原理与实战:大型语言模型(下)
人人都能学AI,66个提问指令,14个AI工具
人工智能基础——基于Python的人工智能实践(中)
ChatGPT实战开发微信小程序
AI时代架构师:ChatGPT与架构师(下)
秒懂AI提问:人工智能提升效率
人工智能基础——基于Python的人工智能实践(下)
巧用ChatGPT轻松学演讲(下)
AI 时代的软件工程
Midjourney新手攻略
深度学习之LSTM模型
巧用ChatGPT快速搞定数据分析