python牛顿迭代法应用_浅谈牛顿迭代法与编程
数学是一门工具性很强的科学,具有较高的抽象性,随着人工智能、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牛顿迭代法应用_浅谈牛顿迭代法与编程相关推荐
- python sys模块作用_浅谈Python中的模块
模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...
- python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式
本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...
- python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题
前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...
- python 共享内存变量_浅谈python多进程共享变量Value的使用tips
前言: 在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料).在根据网上资料使用Value时,由于 ...
- python中怎么计数_浅谈python中统计计数的几种方法和Counter详解
1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...
- python数据类型转换原因_浅谈Python数据类型之间的转换
Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 compl ...
- python采用函数编程模式_浅谈Python 函数式编程
匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...
- python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因
昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile =open("C:\Users\Spirit\Desktop\bc.txt",'r ...
- python计算现场得分_浅谈用 Python 计算文本 BLEU 分数
浅谈用 Python 计算文本 BLEU 分数 BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评 ...
最新文章
- CopyOnWriteArrayList实现原理及源码分析
- ue4 无限地图_RPG游戏开发日志13:无限地图的实现
- 故障分析--主从复制故障1
- hdu2037今年暑假不AC
- 一线互联网企业面试题总结(帮你成功拿到offer)
- Java NIO学习篇之通道FileChannel详解
- 微信翻译团队课余也搞围棋AI:比腾讯绝艺更强,首次亮相就夺冠
- 深度学习自学(二十六):人脸数据集
- 十一、JAVA接口的定义和使用
- DSP28335笔记 —— 定时器
- excel 中vb组合框_Excel 2013中的工作表组合框问题
- Adobe Flash Player 是什么
- 卫星遥感—地块/边界提取相关论文
- 【报告分享】2021B站创作者生态报告-哔哩哔哩(附下载)
- 地铁AFC付出体式格局近况及移动付出安好性探究
- html中并列式的应用,并列式结构梳理
- 如何查询往年国家自然科学基金
- 倍福--威伦触摸屏通信IP设置
- 快速了解做一款App所用到的技术,及实现流程
- python编程求圆的周长和面积公式_C语言求圆的周长和面积
热门文章
- Explaining complex machine learning models with LIME
- 基于android的母婴商城app系统
- tp5下delete()方法
- lms算法的matlab实现,LMS算法的MATLAB实现
- excel文档最下面被计算机框挡住,电脑excle数据栏?求电脑专家 电脑屏幕下方的任务栏把excel表格最下面那一栏挡住显示不出来了 自动求和数据看不到。。。...
- 用Floyd算法解决选址问题(附完整matlab代码)
- OpenWrt系统下挂载阿里云盘提供webDAV服务再用kodi打造家庭影院
- PPP与PPPoE的学习
- java日期和时间操作
- Python爬虫 | 获取股票行业资金流向