无约束最优化算法-Newton法原理及c++编程实现
2012-12-14 13:04
274 查看
无约束最优化方法-牛顿法
牛顿法(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
结果讨论:
迭代结果与初始值有关,迭代的结果总是初始值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点的函数求解或只有一个极值的函数求解时,迭代结果一般与初始值的关系不大,但迭代次数会受影响。
转载请声明,未经允许,不得用以商业目的
牛顿法(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
#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点的函数求解或只有一个极值的函数求解时,迭代结果一般与初始值的关系不大,但迭代次数会受影响。
转载请声明,未经允许,不得用以商业目的
相关文章推荐
- 无约束最优化算法-Newton法原理及c++编程实现
- 无约束最优化算法-Newton法原理及c++编程实现
- 推荐系统的常用算法原理和实现
- Raft算法的原理与实现
- 朴素贝叶斯分类和预测算法的原理及实现
- 各种算法的C#实现系列1 - 合并排序的原理及代码分析
- 第五篇:朴素贝叶斯分类算法原理分析与代码实现
- 堆排序原理及算法实现(最大堆)
- 前端实现网络阅读软件之分页原理与算法(一)
- 带色彩恢复的多尺度视网膜增强算法(MSRCR)的原理、实现及应用
- BP神经网络的数学原理及其算法实现
- CRC_16 原理及其C语言算法实现
- OpenCV: Canny边缘检测算法原理及其VC实现详解
- 二叉堆建堆的优化算法原理图解及代码实现
- 算法基础:基本排序算法原理、实现与总结
- [置顶] Hadoop伪分布安装详解+MapReduce运行原理+基于MapReduce的KNN算法实现
- Unsharp Mask(USM)锐化算法的的原理及其实现
- 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)
- 无监督学习算法K-means算法总结与c++编程实现
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现