日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/21 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无约束最优化方法-牛顿法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
 無約束最優化算法-Newton法原理及c++編程實現 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<<"函數f0點為:"<<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

    函數f0點為:3.05742

    Press any key tocontinue

    2.初始值x=1.3時,運行結果如下:

    函數f0點為: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

    函數f0點為:-0.167649

    Press any key tocontinue


    [cpp] view plaincopyprint?
  • #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;??
  • }??
  • #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點的函數求解或只有一個極值的函數求解時,迭代結果一般與初始值的關系不大,但迭代次數會受影響。

    轉載請聲明,未經允許,不得用以商業目的


    總結

    以上是生活随笔為你收集整理的无约束最优化方法-牛顿法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。