无约束最优化方法-牛顿法
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
無約束最優化方法-牛頓法
牛頓法(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?
結果討論:
迭代結果與初始值有關,迭代的結果總是初始值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點的函數求解或只有一個極值的函數求解時,迭代結果一般與初始值的關系不大,但迭代次數會受影響。
轉載請聲明,未經允許,不得用以商業目的
總結
以上是生活随笔為你收集整理的无约束最优化方法-牛顿法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息检索与数据挖掘的常用加权技术。
- 下一篇: 再理解RankNet算法