李豐兵 李向利


【摘要】黃金分割法是一種簡單而實用的一維搜索算法,是最優化方法課程中的一個基本內容。在黃金分割法的理論教學過程中,本文利用Matlab程序設計輔助解答了兩個有關黃金分割法收斂特性的教學問題,使得課堂講解更加直觀、更加清楚,同時改變了以往枯燥乏味的課堂氣氛,吸引了學生的注意力,提高了教師的教學效率。
【關鍵詞】黃金分割法 ?Matlab 軟件 ?實驗仿真
【中圖分類號】G42 ?【文獻標識碼】A 【文章編號】2095-3089(2019)51-0252-02
1.引言
黃金分割法[1,2,3]又稱為0.618法,是最優化算法中一種基本的一維搜索算法,本質上是一種用來求解單谷函數極值的方法,其算法思想是通過迭代的方式逐步縮小搜索區間,直到極小值點所在的區間長度滿足所給定精度要求時算法終止迭代,具體步驟如下:
步1:給定初始搜索區間[a,b],及計算精度eps>0;
步2:計算x1=a+0.382(b-a),x2=a+0.618(b-a);
步3:若x2-x1 步4: 若f(x1)≥f(x2),則令a=x1,轉步2; 若f(x1) 盡管黃金分割法的算法步驟比較簡單,但在課堂上僅僅依靠理論講解,很多學生對它的理解還是不夠深入,特別是對黃金分割法的各種收斂性能。本文利用Matlab程序設計輔助解答了課堂上碰到的兩個教學問題:(1)如何結合實例介紹黃金分割法的迭代過程以及算法的收斂性能。(2)如何理解算法的精度要求與所需的迭代次數存在的關系。 2.實驗仿真分析 為輔助解答上述兩個問題,考慮以下實例 例:設f(x)=-(sinx)6tan(1-x)e6x,求f(x) 對于第一個問題,本文利用Matlab程序設計分析迭代次數與最優解和最優目標函數值的關系,并由此了解算法的迭代過程以及收斂性能,編寫程序如下: 程序中數組OPTXV及OPTYV分別用來存儲每次迭代后的最優解和最優目標函數值,t為迭代次數,輸入參數值設為a=0,b=1,eps=0.00001,運行程序即可得每次迭代后的最優解和最優目標函數值,如下 OPTXV=0.5, 0.691, 0.80904, 0.88199, 0.92707, 0.89921, 0.91642, 0.90578, 0.91236 0.9083, 0.90578, 0.90734, 0.90638, 0.90578, 0.90615, 0.90592, 0.90606, 0.90598, 0.90603, ? ? ? ?0.906, 0.90602, 0.90601。 OPTYV=-0.13324, -1.3514, -3.5605, -4.9879, -4.9832, -5.1292, -5.1066, -5.1431, -5.1299, -5.1414, -5.1431, -5.1425, -5.143, -5.1431, -5.1431, -5.1431, -5.1431, -5.1431, -5.1431, -5.1431, -5.1431, -5.1431。 為了更直觀地了解黃金分割法的收斂性能,利用Matlab的繪圖函數plot可以畫出最優解和最優目標函數值隨迭代次數的增大的變化曲線圖,如圖1所示。從圖1中可清楚看出,黃金分割法的收斂速度相對于迭代次數來說,前期收斂較快,后期明顯收斂很慢。 對于第二個問題,為了分析精度要求值與迭代次數的關系,分別取精度值eps為:10-10,10-9,10-8,…,10-1,利用Matlab的for循環語句及調用黃金分割法的自定義函數就可以算出每個精度值所需的迭代次數,具體程序如下: 運行程序后可得到不同精度值對應的迭代次數為:T = [46,42,37,32,27,22,18,13,8,3]。為了更直觀地分析精度值eps與迭代次數t的關系,先對eps取以10為底的對數,然后再利用Matlab的繪圖函數plot畫出精度值的對數值與迭代次數的關系圖,如圖2所示。 由圖2可清楚看出,精度值的對數值與迭代次數幾乎呈線性關系。 3.結論 本文利用Matlab程序設計,針對某一個實際問題對黃金分割法進行了兩個實驗仿真,由仿真結果及其圖像直觀地展示了黃金分割法的算法特性,再結合理論講解,使得課堂上學生學習變得更加輕松、更加容易、學習效率和學習積極性都得到了提高。同時,教師的教學效果也明顯得到了改善,“教”與“學”不再是枯燥乏味的事情。 參考文獻: [1]何堅勇.最優化方法[M].北京:清華大學出版社,2007. [2]馬昌鳳.最優化方法及其Matlab程序設計[M].北京:科學出版社,2010. [3]陳寶林.最優化理論與算法[M].北京:清華大學出版社,2005. 作者簡介: 李豐兵(1980.08-),男,苗族,貴州思南人,碩士,中級職稱,研究方向為復雜網絡及人工智能。