优化算法——牛顿法(Newton Method)
一、牛顿法概述
二、基本牛顿法
1、基本牛顿法的原理
2、基本牛顿法的流程
- 给定终止误差值,初始点,令;
- 计算,若,则停止,输出;
- 计算,并求解线性方程组得解:;
- 令,,并转2。
三、全局牛顿法
1、全局牛顿法的流程
- 给定终止误差值,,,初始点,令;
- 计算,若,则停止,输出;
- 计算,并求解线性方程组得解:;
- 记是不满足下列不等式的最小非负整数:;
- 令,,,并转2。
2、Armijo搜索
四、算法实现
1、基本牛顿法Java实现
package org.algorithm.newtonmethod;/*** Newton法* * @author dell* */
public class NewtonMethod {private double originalX;// 初始点private double e;// 误差阈值private double maxCycle;// 最大循环次数/*** 构造方法* * @param originalX初始值* @param e误差阈值* @param maxCycle最大循环次数*/public NewtonMethod(double originalX, double e, double maxCycle) {this.setOriginalX(originalX);this.setE(e);this.setMaxCycle(maxCycle);}// 一系列get和set方法public double getOriginalX() {return originalX;}public void setOriginalX(double originalX) {this.originalX = originalX;}public double getE() {return e;}public void setE(double e) {this.e = e;}public double getMaxCycle() {return maxCycle;}public void setMaxCycle(double maxCycle) {this.maxCycle = maxCycle;}/*** 原始函数* * @param x变量* @return 原始函数的值*/public double getOriginal(double x) {return x * x - 3 * x + 2;}/*** 一次导函数* * @param x变量* @return 一次导函数的值*/public double getOneDerivative(double x) {return 2 * x - 3;}/*** 二次导函数* * @param x变量* @return 二次导函数的值*/public double getTwoDerivative(double x) {return 2;}/*** 利用牛顿法求解* * @return*/public double getNewtonMin() {double x = this.getOriginalX();double y = 0;double k = 1;// 更新公式while (k <= this.getMaxCycle()) {y = this.getOriginal(x);double one = this.getOneDerivative(x);if (Math.abs(one) <= e) {break;}double two = this.getTwoDerivative(x);x = x - one / two;k++;}return y;}}
2、全局牛顿法Java实现
package org.algorithm.newtonmethod;/*** 全局牛顿法* * @author dell* */
public class GlobalNewtonMethod {private double originalX;private double delta;private double sigma;private double e;private double maxCycle;public GlobalNewtonMethod(double originalX, double delta, double sigma,double e, double maxCycle) {this.setOriginalX(originalX);this.setDelta(delta);this.setSigma(sigma);this.setE(e);this.setMaxCycle(maxCycle);}public double getOriginalX() {return originalX;}public void setOriginalX(double originalX) {this.originalX = originalX;}public double getDelta() {return delta;}public void setDelta(double delta) {this.delta = delta;}public double getSigma() {return sigma;}public void setSigma(double sigma) {this.sigma = sigma;}public double getE() {return e;}public void setE(double e) {this.e = e;}public double getMaxCycle() {return maxCycle;}public void setMaxCycle(double maxCycle) {this.maxCycle = maxCycle;}/*** 原始函数* * @param x变量* @return 原始函数的值*/public double getOriginal(double x) {return x * x - 3 * x + 2;}/*** 一次导函数* * @param x变量* @return 一次导函数的值*/public double getOneDerivative(double x) {return 2 * x - 3;}/*** 二次导函数* * @param x变量* @return 二次导函数的值*/public double getTwoDerivative(double x) {return 2;}/*** 利用牛顿法求解* * @return*/public double getGlobalNewtonMin() {double x = this.getOriginalX();double y = 0;double k = 1;// 更新公式while (k <= this.getMaxCycle()) {y = this.getOriginal(x);double one = this.getOneDerivative(x);if (Math.abs(one) <= e) {break;}double two = this.getTwoDerivative(x);double dk = -one / two;// 搜索的方向double m = 0;double mk = 0;while (m < 20) {double left = this.getOriginal(x + Math.pow(this.getDelta(), m)* dk);double right = this.getOriginal(x) + this.getSigma()* Math.pow(this.getDelta(), m)* this.getOneDerivative(x) * dk;if (left <= right) {mk = m;break;}m++;}x = x + Math.pow(this.getDelta(), mk)*dk;k++;}return y;}
}
3、主函数
package org.algorithm.newtonmethod;/*** 测试函数* @author dell**/
public class TestNewton {public static void main(String args[]) {NewtonMethod newton = new NewtonMethod(0, 0.00001, 100);System.out.println("基本牛顿法求解:" + newton.getNewtonMin());GlobalNewtonMethod gNewton = new GlobalNewtonMethod(0, 0.55, 0.4,0.00001, 100);System.out.println("全局牛顿法求解:" + gNewton.getGlobalNewtonMin());}
}
优化算法——牛顿法(Newton Method)相关推荐
- 牛顿法 Newton Method
上一次我们讨论了具有 Q-线性收敛性的普通的 gradient descent 方法,今天我们要介绍一种收敛速度更快的算法:Newton Method(或者叫 Newton's Method). 可能 ...
- 经典凸优化算法(牛顿法,BFGS)的python实现
文章目录 牛顿法 代码 结果 BFGS 代码 结果 就如文章标题所示,只是简单的代码整理,用于数模比赛的准备(虽然并没有用上) 算法的数学原理请查阅前人blog 牛顿法 代码 这里我演示的函数为 f( ...
- 优化算法——拟牛顿法之BFGS算法
一.BFGS算法简介 BFGS算法是使用较多的一种拟牛顿方法,是由Broyden,Fletcher,Goldfarb,Shanno四个人分别提出的,故称为BFGS校正. 同DFP校正的推导公式一样,D ...
- 牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)
简述 在看伊恩·古德费洛的深度学习,4.3节基于梯度的优化方法时提到 仅使用梯度信息的优化算法称为 一阶优化算法 ,如梯度下降. 使用Hessian矩阵的优化算法称为 二阶最优化算法 ,如牛顿法. 牛 ...
- matlab共轭梯度法_优化算法之牛顿法
牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根. 牛顿法最初由艾萨克·牛顿在<Method ...
- 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法
一.梯度下降法 1.总述: 在机器学习中,基于基本的梯度下降法发展了三种梯度下降方法,分别为随机梯度下降法,批量梯度下降法以及小批量梯度下降法. (1)批量梯度下降法(Batch Gradient D ...
- 常用的优化算法:梯度下降法,牛顿法,拟牛顿法,共轭梯度法
目录 0.几个数学概念 1. 梯度下降法(Gradient Descent) 2. 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) 3. 共轭 ...
- 优化算法(一):牛顿法与拟牛顿法
机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题.在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BF ...
- 优化算法之梯度下降法、牛顿法、拟牛顿法和拉格朗日乘数法
在机器学习中,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解最优化问题. - 无约束最优化问题:梯度下降法.牛顿法.拟牛顿法: - 有约束最优化问题:拉格朗 ...
最新文章
- TCP/IP协议簇简介
- did双重差分法_Stata中双重差分操流程及代码
- P1450 [HAOI2008]硬币购物
- JavaWeb笔记04-解决GET与POST乱码问题
- 服务器控件开发之复杂属性
- python机器学习:决策树ID3、C4.5
- 计算机用户名uz,Dnuznq全国计算机二级考试vb试题.doc
- 树莓派 pcf8591 AD转换模块使用
- RFID电子耳标识别棒,牦牛身份识别管理专用设备
- Asp.Net Web Api 部署------在云服务器IIS上部署Web Api程序
- nodejs模块加载的猜想
- matlab_plot实时画点
- vue之原生上传图片并压缩图片大小(1)
- centos7安装OTRS开源工单管理平台
- 15位和18位的身份证正则,以及通过身份证获取出生日期
- UEdit 使用总结
- “0x00000014”内存。该内存不能为“Written”(或“Read”)的解决办法。
- GZIP文件格式简介
- 【测试工具】五、jmeter在GUI与non-GUI模式下结果集自定义封装展示
- iOS---集成融云SDK即时通讯