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