数学是一门工具性很强的科学,具有较高的抽象性,随着人工智能、GPS(全球定位系统)等飞速的发展和计算机运算性能飞跃性的提升,计算机的优势越来越深入到思维领域,计算机将高深的数学理论用到实际中来,十分有效地解决了许多实际问题,如著名难题四色问题就是被计算机证明的。如分析几何、小波分析、离散数学、仿生计算、数值计算中的有限单元方法等。它让人们知道计算机程序设计结合的就是数学知识和数学思想。

算法与数学之美

今天的故事让我们从力扣(LeetCode)的一个问题开始:

手写实现一个int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4

输出: 2

示例 2:

输入: 8

输出: 2

说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

相信很多人第一眼看到这个题目的时候,都跟杠宝一样,想用二分法去解,而二分法也确实能够有效的解决这个问题,但是今天咱们的重点不是这个,所以这里就不多深入,文末会附上二分法的解题Java实现

话不多说,让我们直接进入今天的主题"牛顿迭代法",首先普及一下牛顿法的概念和基本思想:概念:牛顿法(英语:Newton's method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。

基本思想:在迭代过程中,以直线代替曲线,用一阶泰勒展式(即在当前点的切线)代替原曲线,求直线与 x 轴的交点,重复这个过程直到收敛。https://zh.wikipedia.org/​zh.wikipedia.org

那我们该如何将牛顿法应用到我们的程序中呢,别急,让我们回到最初的这个题目,以求平方根为例,我们先通过牛顿法得到他的求值函数,然后建立我们的软件编程解决问题模型:图作者:liweiwei1419

得到我们的迭代函数之后,开始编程,我们的代码就变得格外的简单咯⬇️

class Solution2 {

int s;

public static void main(String[] args) {

System.out.println(new Solution2().mySqrt(2));

}

public int mySqrt(int x) {

s=x;

if(x==0){

return 0;

}

return ((int)(sqrts(x)));

}

public double sqrts(double x){

double res = (x + s / x) / 2;

if (res == x) {

System.out.println(res);

return x;

} else {

return sqrts(res);

}

}

}

控制台输出:

1.414213562373095

1

由于题目中返回是int,所以我们直接丢弃掉小数部分就好,显而易见,运用一些数学知识能让我们的代码更加简洁高效!

总结:软件编程是基于数学模型的基础上面的,所以,数学是计算机科学的主要基础,软件编程中不仅许多理论是用数学描述的,而且许多技术也是用数学描述的。从计算机各种应用的程序设计方面考察,任何一个可在存储程序式电子数字计算机上运行的程序,其对应的计算方法首先都必须是构造性的,数据表示必须离散化,计算操作必须使用逻辑或代数的方法进行,这些都应体现在算法和程序之中。

软件编程的思想最重要是算法,而算法是建立在数学思维上的,其实说白了,程序只是一件衣服,算法才是它的灵魂,算法就来自于数学,没有深厚的数学思维功底,很难弄懂算法。所以,如果你想从事软件编程并有深入的打算,那么就认真的培养自己的数学思维吧!

附二分法解决方法:

public class Solution {

public int mySqrt(int x) {

long left = 0;

long right = Integer.MAX_VALUE;

while (left < right) {

// 这种取中位数的方法又快又好,是我刚学会的,原因在下面这篇文章的评论区

// https://www.liwei.party/2019/06/17/leetcode-solution-new/search-insert-position/

// 注意:这里得用无符号右移

long mid = (left + right + 1) >>> 1;

long square = mid * mid;

if (square > x) {

right = mid - 1;

} else {

left = mid;

}

}

return (int) left;

}

}

链接:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liweiw/

python牛顿迭代法应用_浅谈牛顿迭代法与编程相关推荐

  1. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  2. python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

  3. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...

  4. python 共享内存变量_浅谈python多进程共享变量Value的使用tips

    前言: 在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料).在根据网上资料使用Value时,由于 ...

  5. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  6. python数据类型转换原因_浅谈Python数据类型之间的转换

    Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 compl ...

  7. python采用函数编程模式_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  8. python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因

    昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile =open("C:\Users\Spirit\Desktop\bc.txt",'r ...

  9. python计算现场得分_浅谈用 Python 计算文本 BLEU 分数

    浅谈用 Python 计算文本 BLEU 分数 BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评 ...

最新文章

  1. CopyOnWriteArrayList实现原理及源码分析
  2. ue4 无限地图_RPG游戏开发日志13:无限地图的实现
  3. 故障分析--主从复制故障1
  4. hdu2037今年暑假不AC
  5. 一线互联网企业面试题总结(帮你成功拿到offer)
  6. Java NIO学习篇之通道FileChannel详解
  7. 微信翻译团队课余也搞围棋AI:比腾讯绝艺更强,首次亮相就夺冠
  8. 深度学习自学(二十六):人脸数据集
  9. 十一、JAVA接口的定义和使用
  10. DSP28335笔记 —— 定时器
  11. excel 中vb组合框_Excel 2013中的工作表组合框问题
  12. Adobe Flash Player 是什么
  13. 卫星遥感—地块/边界提取相关论文
  14. 【报告分享】2021B站创作者生态报告-哔哩哔哩(附下载)
  15. 地铁AFC付出体式格局近况及移动付出安好性探究
  16. html中并列式的应用,并列式结构梳理
  17. 如何查询往年国家自然科学基金
  18. 倍福--威伦触摸屏通信IP设置
  19. 快速了解做一款App所用到的技术,及实现流程
  20. python编程求圆的周长和面积公式_C语言求圆的周长和面积

热门文章

  1. Explaining complex machine learning models with LIME
  2. 基于android的母婴商城app系统
  3. tp5下delete()方法
  4. lms算法的matlab实现,LMS算法的MATLAB实现
  5. excel文档最下面被计算机框挡住,电脑excle数据栏?求电脑专家 电脑屏幕下方的任务栏把excel表格最下面那一栏挡住显示不出来了 自动求和数据看不到。。。...
  6. 用Floyd算法解决选址问题(附完整matlab代码)
  7. OpenWrt系统下挂载阿里云盘提供webDAV服务再用kodi打造家庭影院
  8. PPP与PPPoE的学习
  9. java日期和时间操作
  10. Python爬虫 | 获取股票行业资金流向