powell法-鲍威尔法详解-附案例matlab代码
生活随笔
收集整理的這篇文章主要介紹了
powell法-鲍威尔法详解-附案例matlab代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
powell法-鮑威爾法詳解-附案例matlab代碼
- powell法(共軛方向法、方向加速法)
- 基本思想
- 共軛方向的定義
- 共軛方向的性質
- 步驟
- 說明
- 方法評價
- 算例
- matlab求解
- 所得結果
- 附注
powell法(共軛方向法、方向加速法)
基本思想
若沿連接相鄰兩輪搜索末端的向量 S 方向搜索,收斂速度加快。
因為兩條平行線 S1與同心橢圓族相切,兩個切點的連線 S 直指中心。稱 S1與 S2 為共軛方向。
目的:以共軛方向打破振蕩,加速收斂。
共軛方向的定義
共軛方向的性質
步驟
說明
1)若是正定二次函數,n 輪迭代后收斂于最優點 x* 。
2)若是非正定二次函數,則迭代次數增加。
3)若是 n 維問題,步驟相同。
搜索方向:第一輪迭代,沿初始方向組 Si(1) (i=1,2,…,n) 的 n 個方向和共軛方向 S(1),搜索 n+1 次得極值點 xn+1(1) ;第二輪迭代,沿方向組 Si(2) ( i=1,2,…,n;i≠m ) 的 n-1 個方向和共軛方向 S(1),構筑共軛方向 S(2) 搜索 n+1次得極值點 xn+1(2) 。其中,為保證搜索方向的線性無關,去除了 Sm(2) 方向 。
在第 k 輪迭代中,為避免產生線性相關或近似線性相關,需要去除前一輪中的某個方向 Sm(k)。
方法評價
1.計算步驟復雜;
2.是二次收斂方法,收斂快。對非正定函數,也很有效;
3.是比較穩定的方法。
算例
用Powell法求解:
初始點x0=[1,1],精度e=0.0001.
matlab求解
clear all clch0=0.1;x0=[1,1];e=[1,0;0,1];n=2; for k=1:50 for i=1:n x01=x0(1);x02=x0(2);d=e(i,:); F0=ff(x0(1),x0(2));opt_step=goldsection(x01,x02,d,h0);x(i,:)=x0+opt_step*d; F(i)=ff(x(i,1),x(i,2));D(i)=F(i)-F0;endfor i=2:n x01=x(i-1,1);x02=x(i-1,2);d=e(i,:);opt_step=goldsection(x01,x02,d,h0);x(i,:)=x(i-1,:)+opt_step*d; F(i)=ff(x(i,1),x(i,2));D(i)=F(i-1)-F(i);endif abs(x(n,:)-x0)<1e-4%收斂條件break;endd=x(n,:)-x0;x(n+1,:)=2*x(n,:)-x0;[D_m,j]=max(D);F2=F(n);F3=ff(x(n+1,1),x(n+1,2));if F3<F0 && (F0-2*F2+F3)*(F0-F2-D_m)^2>=D_m/2*(0-F3)^2x01=x(n,1);x02=x(n,2);opt_step=goldsection(x01,x02,d,h0); opt_step;x(n+1,:)=x(n,:)+opt_step*d;e(j,:)=[];e(n,:)=d;x0=x(n+1,:);else if F2<F3x0=x(n,:);elsex0=x(n+1,:);end endend disp('最優化結果 x0') disp(x0) F_x0 = ff(x0(1),x(2)); disp('最優化結果最小函數值F_x0') disp(F_x0)目標函數:
function y=ff(x1,x2) y = 60-10*x1-4*x2+x1^2+x2^2-x1*x2;區間搜索:
function [a,b]=search2(x01,x02,d,h0) a1=0; y1=ff(x01+d(1)*a1,x02+d(2)*a1); h=h0; a2=h; y2=ff(x01+d(1)*a2,x02+d(2)*a2); if y2>y1 h=-h;a3=a1;y3=y1;a1=a2;y1=y2;a2=a3;y2=y3; end a3=a2+h;y3=ff(x01+d(1)*a3,x02+d(2)*a3);while y3<y2h=2*h;a1=a2;y1=y2;a2=a3;y2=y3;a3=a2+h; y3=ff(x01+d(1)*a3,x02+d(2)*a3); endif h>0a=a1;b=a3; elsea=a3;b=a1; end所得結果
本優化問題的精確解為x0=(8,6)
附注
黃金分割鏈接
總結
以上是生活随笔為你收集整理的powell法-鲍威尔法详解-附案例matlab代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: phpcms v9模板制作教程
- 下一篇: 全美电影票房排行(截止2010.12.1