matlab鲍威尔方法求函数,基于MATLAB的鲍威尔法求极值问题.doc
機械優化設計報告(4)
基于MATLAB的鮑威爾法求極值問題
姓名:xxx學號:xxx
(北京理工大學機械與車輛學院車輛工程,北京 100081)
摘要:無約束優化方法主要有七種,按照求導與否把這些方法分為間接法和直接法。牛頓法的成敗與初始點選擇有極大關系,其可靠性最差;坐標輪換法、單純形法和最速下降法對于高維優化問題計算效率很低,有效性差;由于編制變尺度法程序復雜,其簡便性不足。綜合考慮后,鮑威爾法、共軛梯度法具有較好的綜合性能。本文首先對鮑威爾法的原理進行闡述,根據其迭代過程給出流程圖,并編寫MATLAB程序。最后用此MATLAB程序求解實際的極值問題,并對求解結果進行簡要分析。
1. 鮑威爾法的基本思想
1.1其他優化方法對鮑威爾法形成的影響
通過對鮑威爾法的學習,可以很明顯看出來其迭代思想中汲取了其他幾種優化方法的核心思想。為了更全面、更深入的學習鮑威爾法,很有必要對其他有影響的優化思想進行學習和梳理。
由最基本的數學基礎知識可知,梯度方向是函數增加最快的方向,負梯度方向是函數下降最快的方向,于是,利用這個下降最快方向產生了最速下降法。每次迭代都沿著負梯度方向進行一維搜索,直到滿足精度要求為止。其特點是相鄰兩個搜索方向互相正交,所以很明顯的一個現象就是剛開始搜索步長比較大,愈靠近極值點其步長愈小,收斂速度愈慢,特別當二維二次目標函數的等值線是較扁的橢圓時,迭代速度更慢。這時,倘若目標函數是等值線長、短軸都平行于坐標軸的橢圓形,則通過坐標輪換法可以很高效的解決問題。通過兩次分別沿坐標軸進行一維搜索,便可達到極值點。但對于目標函數的等值線橢圓的長、短軸傾斜于坐標軸時,坐標輪換法的搜索效率也顯得極低。拋開這兩種特殊情況,對于一般形態的目標函數,如果在某些明顯可以直達最優點的情況下(一般為靠近極值點區域),迭代過程完全可以不沿負梯度方向搜索,取而代之的是找到直達最優點的方向,一步到位。但這樣的直達方向應該如何去找呢?共軛梯度法由此產生。其基本原理是:任意形式的目標函數在極值點附近的特性都近似一個二次函數,其等值線在極值點附近為近似的同心橢圓簇,而同心橢圓簇有一個特性便是任意兩條平行線與橢圓簇切點的連線必通過橢圓的中心。而這個連線方向便是所尋找的直達方向。通過對其迭代過程的分析,很明顯可以看出需大量的求目標函數的一階和二階偏導數。對于一些實際的機械優化問題,目標函數可能復雜到難以求取其偏導數或者根本就不存在,求取極值問題就顯得無從下手。所以,一個效率高的、適應性強的優化方法急需出現,而鮑威爾法便是這么一種綜合的方法。
1964年,鮑威爾提出了對共軛方向法的改進方法——鮑威爾共軛方向法。一維搜索法、共軛方向和坐標輪換法的思想在鮑威爾法中體現的淋漓盡致。下面就對鮑威爾法的基本原理進行闡述。
1.2鮑威爾法的數學原理
通過前文可知,鮑威爾法也算一種共軛方向法,但與共軛梯度法相比,不需要對函數求導,而是在迭代過程中逐次構造出用于搜索的共軛方法。
1). 對于二維無約束優化問題,采用鮑威爾法求解的迭代過程如圖1-1所示。
任選一初始點,令,按照坐標輪換法,選擇兩個單位向量和,以此作為搜索方向進行第一輪搜索得到點。
2). 用和的連線方向構成新的搜索方向。從點出發,沿方向一維搜索得到點,作為下一輪搜索的初始點。
3). 從出發,依次沿和方向進行一維搜索,得到點和點。
4). 用點和點的連線方向構成新的搜索方向。和是從兩個不同點出發沿相同方向搜索得到的,所以與和的連線方向互為共軛方向。從點出發,沿方向一維搜索得到點。因是從點出發依次沿兩個互為共軛的方向和進行兩次一維搜索得到的,所以就是該二維二次函數的極小點。
圖1-1 二維情況下鮑威爾法的迭代過程
將上述二維優化問題擴展到n維的情況,得到鮑威爾法的基本迭代過程:從初始點出發依次沿n個線性無關的方向組進行一維搜索得到一個終點,沿初始點和終點的連線方向一維搜索得到下一輪迭代的初始點,并以這個方向作為下一輪迭代方向組中的最后一個方向,同時去掉第一個方向,組成的新方向組進行第一輪迭代。若目標函數是個n維的正定二次函數,則經過這樣的n輪迭代以后,就可以收斂到最優點。
但是這種方法有一個缺陷,通過這種方法產生的n個新方向,有可能是線性相關或近似線性相關的。因為新方向,如果其中出現了,則就可以表示為,,…,的線性組合,這樣用新方向替換后,新的坐標輪換方向組就成為線性相關的一組向量,以后的各輪迭代計算將在維數下降了的空間內進行,這將導致算法收斂不到真正的最優點。
針對此現象,通過適當改進,產生了新的鮑威爾法。
1.3改進的鮑威爾法
由上一小節討論可知,如果對新方向組的形成加以適當的選擇,防止其線性相關,則可以避免鮑威爾法的“退化”。在這里直接給出是否用方向替代來組成新的搜索方向組的判別條件,供后面編程所用。
設,,。其中最大者。
若且成立,則用方向替代方向,否則仍用原來的n個搜索方向。
這樣,改進后的鮑威爾法保證了對于非線性函數計算時收斂的可靠性。
2. 迭代過程和算法流程圖
2.1迭代過程
1). 給定初值點,n個線性無關的初始向量組及精度,置。
2). 從點出發沿中的方向進行一維搜索:
,其中
3). 判斷是否滿足收斂準則,若
成立,則迭代停止,輸出,即為最優點;否則跳至第4步。
4). 計算第k輪迭代中相鄰兩點目標函數值的下降量,并找出下降量最大者。
相應的方向:
5). 沿共軛方向計算反射點。
6). 檢驗判別條件。
令,,,若同時滿足:
則轉第6步;否則轉第7步。
7). 由出發沿方向進行一維搜索,求出此方向極小點,并令下一輪迭代初始點。同時令,同時置。并轉第2步。
8). 若,則;否則。置,轉第2步。
2.2算法流程圖
鮑威爾法的算法流程圖如圖2-1。
圖 2-1 鮑威爾法的算法流程圖
3. 鮑威爾法的MATLAB程序
function [x,minf,k,allX,allY] = Powell_Graphic(f,x0,D,var,eps)
format long;
if nargin == 4 %默認精度為1.0e-2
eps = 1.0e-2;
end
n = length(var)+1;
k = 0;
syms l;
while 1
tx = zeros(size(D));
tx(:,1) = x0;
for i=1:n-1 %在每個方向上開始一維搜索
xv = tx(:,i) + l*D(:,i);
fx = Funval(f, var,xv);
[a,b] = minJT(fx,0,0.1); %一維搜索進退法確定搜索區間
tl = minHJ(fx,a,b); %黃金分割法求最優點
tx(:,i+1) = tx(:,i) + tl*D(:,i);
end
D(:,n) = tx(:,n) - tx(:,1); %判斷收斂性是否滿足精度要求
if norm(D(:,n)) <= eps
x = tx(:,n);
allX(:,k*n+1:(k+1)*n) = tx(:,1:n);
for j=1:n
allY(:,k*n+j) = Funval(f, var,tx(:,j));
end
break;
else
for j=1:n
FX(j) = Funval(f, var,tx(:,j));
end
maxDF = -inf;
m = 0;
for j=1:n-1
df = FX(j) - FX(j+1);
if df > maxDF
maxDF = df;
m = j+1;
end
end
tmpF = Funval(f, var,2*tx(:,n)-tx(:,1));
fl=(FX(1)-2*FX(n-1)+tmpF)*(FX(1)-FX(n-1)-maxDF)^2;
if fl<0.5*maxDF*(FX(1)-tmpF)^2 && tmpF> syms s t;
>> f=t^2+s^2-t*s-10*t-4*s+60;
>> D=[1 0 0;0 1 0];
>> [x,mf,k]=Powell(f,[0 0],D,[t s])
計算結果為:
x =
8.0000
6.0000
mf =
8.0000
k=
2
與書中提供的精確解完全吻合,說明此方法有效可行。計算變量如圖3-1。
圖3-1 計算結果()
4.2實例結果分析
此處主要從以下三個方面來分析此算法及計算結果。
1) 可靠性。
通過對其他多元多次函數進行求極值計算,結果都比較精確,說明此算法可靠性、通用性好。
另外,對于給定不同的初始點,其求解結果同樣精確。分別如下:
圖3-2 [-10 -10]
圖3-3 [0 0]
圖3-4 [10 10]
可見,不論給予什么樣的迭代初始點,其最終迭代結果同樣正確且精確。
2) 有效性。
對于本例,目標函數不是很復雜,其求解速率在2s內可完成,迭代次數為k=2次,而且對于上面給出的三個不同初始點,迭代次數均為2次,對于初值點[100 100],k=3,迭代次數也才增加一次,足見此算法的效率是相當高的。
3) 簡便性。
此程序邏輯清晰,簡明易懂,對計算機的要求也不是很高,其簡便性不言而明。
參考文獻
[1] 李志鋒。機械優化設計。高等教育出版社。
13
展開閱讀全文
總結
以上是生活随笔為你收集整理的matlab鲍威尔方法求函数,基于MATLAB的鲍威尔法求极值问题.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是YottaChain存储,为什么说
- 下一篇: 惠普服务器自动装驱动安装,Win10系统