無約束最優化演算法-newton法原理及c++程式設計實現
2012-12-14 13:04
6536人閱讀收藏
舉報
【演算法】(27)
作者同類文章x
無約束最優化方法-牛頓法
牛頓法(newton'smethod)又稱為牛頓-拉弗森方法(newton-raphson method),它是一種在實數域和複數域上近似求解方程的方法,迭代的示意圖如下:
總結@鄭海波 blog.csdn.net/nuptboyzhb/
參考:史丹福大學machine learning
本部落格中所有源**:
求解問題:
1.無約束函式f的0點。
2.無約束函式f的最小值,最大值。
函式的曲線(matlab畫出)
第"迭代
x="< }
cout<
的0點為:"<
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 plain
copy
print?
#include
#include
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()
cout<
cout<
}
#include #include 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))
結果討論:
迭代結果與初始值有關,迭代的結果總是初始值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點的函式求解或只有乙個極值的函式求解時,迭代結果一般與初始值的關係不大,但迭代次數會受影響。
無約束最優化二
2.1 a k合理性討論 如下將要討論關於a k需要滿足的兩個條件,當a k滿足這兩個條件後,就可以認為從x k點移動到x k 1點的步長已經確定下來了。第乙個條件為sufficient decrease condition,從直觀角度來看,該條件主要要用保證x k 1點的函式值要小於x k點的函式...
無約束最優化三
2.2 a k步長的選擇 了解了a k的合理性之後,就相當於獲得了標尺,在此基礎上我們可以選擇合適的策略來求取a k。所有的line search過程在計算每一步的a k時,均需要提供乙個初始點a 0,然後再此基礎上生成一系列的,直到a i滿足2.1節所規定的條件為止,此時該a k即被確定為a i,...
無約束最優化四
3 quasi newton method 在第2節中我們了解了步長的概念,以及從x k走到x k 1點使用line search方法計算步長的方法。不過我們在那裡忽略了乙個重要的概念,即 方向 從第2節,我們了解到從每一點x k走到下一點x k 1時,需要給出要走的 方向 只有 方向 確定好之後,...