无约束最优化算法-Newton法原理及c++编程实现

2012-12-14 13:04 6536人阅读 评论(5) 收藏 举报
本文章已收录于:
分类:
【算法】(27)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

无约束最优化方法-牛顿法

牛顿法Newton'smethod)又称为牛顿-拉弗森方法Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法,迭代的示意图如下:

总结@郑海波 blog.csdn.net/nuptboyzhb/

参考:斯坦福大学machine learning

本博客中所有源代码:http://download.csdn.net/detail/nuptboyzhb/4886786

求解问题:

1.无约束函数f的0点。

2.无约束函数f的最小值,最大值。

函数的曲线(matlab画出)

#include <iostream>

#include <math.h>

using namespace std;

#define f(x)  (pow(x,3)-4.0*pow(x,2)+3.0*x)

#define  df(x)    (3.0*pow(x,2)-8.0*x+3)

int main()

{

doublex=9;//设置迭代的初始值

doubleerr=1.0e-10;//设置精度

intcount=0;

while(true)

{

x=x-f(x)/df(x);

if(abs(f(x))<err)

{

break;

}

cout<<"第"<<count++<<"迭代x="<<x<<" f(x)="<<f(x)<<endl;

}

cout<<"函数f的0点为:"<<x<<endl;

return0;

}

结果讨论:

迭代结果与初始值有关,迭代的结果总是初始值x附近的0点。如:

1.初始值x=9时,运行结果如下:

第0迭代 x=6.51724 f(x)=126.47

第1迭代 x=4.90174 f(x)=36.3714

第2迭代 x=3.88768 f(x)=9.96551

第3迭代 x=3.30967 f(x)=2.36715

函数f的0点为:3.05742

Press any key tocontinue

2.初始值x=1.3时,运行结果如下:

函数f的0点为:1.01545

Press any key tocontinue

3.初始值为-10时,运行结果如下:

第0迭代 x=-6.26632 f(x)=-421.924

第1迭代 x=-3.79793 f(x)=-123.873

第2迭代 x=-2.18197 f(x)=-35.9783

第3迭代 x=-1.14629 f(x)=-10.201

第4迭代 x=-0.51317 f(x)=-2.72803

函数f的0点为:-0.167649

Press any key tocontinue

[cpp] view plaincopyprint?
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. #define  f(x)   (pow(x,3)-4.0*pow(x,2)+3.0*x)
  5. #define df(x)    (3.0*pow(x,2)-8.0*x+3)
  6. #define ddf(x)    (6.0*x-8)
  7. int main()
  8. {
  9. double x=1.2;//初始值
  10. double err=1.0e-10;
  11. int count=0;
  12. while (true)
  13. {
  14. x=x-df(x)/ddf(x);
  15. if (abs(df(x))<err)
  16. {
  17. break;
  18. }
  19. cout<<"第"<<count++<<"迭代x="<<x<<" df(x)="<<df(x)<<endl;
  20. }
  21. cout<<"函数f极点为:("<<x<<","<<f(x)<<")"<<endl;
  22. return 0;
  23. }
#include <iostream>
#include <math.h>
using namespace std;
#define  f(x)   (pow(x,3)-4.0*pow(x,2)+3.0*x)
#define df(x)    (3.0*pow(x,2)-8.0*x+3)
#define ddf(x)    (6.0*x-8)
int main()
{double x=1.2;//初始值double err=1.0e-10;int count=0;while (true){x=x-df(x)/ddf(x);if (abs(df(x))<err){break;}cout<<"第"<<count++<<"迭代x="<<x<<" df(x)="<<df(x)<<endl;}cout<<"函数f极点为:("<<x<<","<<f(x)<<")"<<endl;return 0;
}

结果讨论:

迭代结果与初始值有关,迭代的结果总是初始值x附近的极值。如:

1.初始值x=9时,运行结果如下:

第0迭代x=5.21739df(x)=42.9244

第1迭代x=3.37549df(x)=10.1778

第2迭代x=2.54484df(x)=2.06992

函数f极点为:(2.26008,-2.1072)

Press any key tocontinue

2.初始值x=1.2时,运行结果如下:

第0迭代x=-1.65df(x)=24.3675

第1迭代x=-0.288687df(x)=5.55952

函数f极点为:(0.282567,0.550886)

Press any key tocontinue

3.初始值为-10时,运行结果如下:

第0迭代x=-4.36765df(x)=95.1702

第1迭代x=-1.58537df(x)=23.2232

第2迭代x=-0.259259df(x)=5.27572

函数f极点为:(0.292851,0.560622)

Press any key tocontinue

注意:对于只有1个0点的函数求解或只有一个极值的函数求解时,迭代结果一般与初始值的关系不大,但迭代次数会受影响。

转载请声明,未经允许,不得用以商业目的

无约束最优化方法-牛顿法相关推荐

  1. 非线性规划(凸规划,无约束最优化方法,约束最优化方法)

    非线性规划 非线性规划的最优解可能在可行域的任何地方取得. 一元函数:二阶导数>=0,曲线凹,即下凸. 二元函数:图解法 凸集:集合中任意取两个点x1和x2,若x1和x2之间的任意一个点都在该集 ...

  2. 机器人中的数值优化(三)—— 无约束最优化方法基础、线搜索准则

       本系列文章主要是我在学习<数值优化>过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程<机器人中的数值优化>和高立编著的<数值最优化方法>等,本系列文 ...

  3. 最优化方法:五、无约束最优化方法

    主要参考书目: 最优化方法及其应用/郭科,陈聆,魏友华.-北京:高等教育出版社,2007.7(2013.7重印) 在第四章中,我们解决了确定搜索步长的问题,现在解决确定搜索方向的问题. 1.最速下降法 ...

  4. 《最优化方法》——无约束具体算法以及KK

    4 无约束具体算法 [机器学习之数学]02 梯度下降法.最速下降法.牛顿法.共轭方向法.拟牛顿法 - wuliytTaotao - 博客园 (cnblogs.com) 4.1最速下降法 梯度方向 某点 ...

  5. MATLAB 无约束一维极值问题

    无约束一维极值问题   极值问题表达式:min f(x)  x,x[ x1 x2];   一维极值的搜索方式包括线性搜索和非线性搜索,线性搜索包含黄金分割法.斐波那契法和牛顿法,非线性方法包含抛物线法 ...

  6. 运筹优化(十一)--无约束非线性规划

    这个系列将非线性规划是以"不是什么"定义的,也就是说,之前的线性规划模型使用连续决策变量,线性约束和线性目标函数,而非线性规划涵盖了所有其他单目标,连续决策变量的规划模型.意味着, ...

  7. 机器学习之求解无约束最优化问题方法(手推公式版)

    文章目录 前言 1. 基础知识 1.1 方向导数 1.2 梯度 1.3 方向导数与梯度的关系 1.4 泰勒展开公式 1.5 Jacobian矩阵与Hessian矩阵 1.6 正定矩阵 2. 梯度下降法 ...

  8. 数学基础(五)最优化理论(最优化,无约束,有约束,拉格朗日乘子的意义,KKT条件)

    目录 一.无约束优化 1.梯度下降法 2.牛顿法 二.有约束优化 1.约束为等式 2.约束为不等式 一.无约束优化 无约束优化问题十分普遍,如梯度下降法.牛顿法就是无约束的优化算法. 像最小二乘法.极 ...

  9. 优化工具包—无约束非线性优化求解器(fminsearch)

    优化工具包-无约束非线性优化求解器(fminsearch) 原创不易,路过的各位大佬请点个赞 室内定位/导航/优化技术探讨:WX: ZB823618313 目录 优化工具包-无约束非线性优化求解器(f ...

最新文章

  1. 归并排序的 Go 语言实现和优化
  2. Ubuntu下浏览Json文件
  3. springboot1.5.10兼容高版本6.1.1elasticsearch
  4. python字典新的定义方式
  5. Intellij IDEA 的使用
  6. 黑苹果hp有声音hdmi无声音_黑科技!不戴耳机也能独享声音!以色列公司推出无耳机传输音乐...
  7. 按钮随复选框选中与取消变换样式
  8. 面试官 | count(1)、count(*) 、count(列名) 有什么区别?
  9. php-7.2.13的安装,Centos7.2编译安装php-7.0.13
  10. html非封闭标签,自封闭的html标签
  11. eclipse导出war包放入服务器中
  12. 第一章 了解BaseApplication框架以及使用Ogre Application Wizzard
  13. matlab 深度学习环境配置
  14. DoIP(三)—— 通信流程
  15. 【数模之数据分析-1】
  16. 多御浏览器安卓版有哪些地方值得下载使用?
  17. 纷享销客标讯通,大客招标经营的杀手锏
  18. pyautogui实现微信自动回复和其他功能
  19. FIR窗函数和IIR模拟、数字滤波器的MATLAB实现
  20. android 自动替换资源文件,简单高效的实现Android App全局字体替换

热门文章

  1. win10怎么用Linux命令,教你Windows10系统使用Linux命令的技巧
  2. mysql custom_MySQL安装教程
  3. C++类继承时的作用域嵌套,破解C++继承的一切秘密
  4. 【1024程序员节】都有什么?现场亲历者告诉你...
  5. 听说你想去大厂看学妹,带你看看京东软件产品经理面经
  6. Python Generators(生成器)——yield关键字
  7. Eclipse开发环境设置
  8. hadoop学习-海量日志分析(提取KPI指标)
  9. vector can通信源码_汽车电子CAN网络dbc文件
  10. Python入门100题 | 第074题