Powell優化的Matlab實現

2021-10-14 09:10:45 字數 1213 閱讀 3242

以下程式能夠適應一維和多維的目標函式。

powell.m

function [x,fval]=powell(f,x0,e,n)

% powell 函式f 初始點x0 精度e 未知數個數n

x=zeros(n,n+2); % x矩陣第一列為初始點,第n+1列為sn方向搜尋後的點,最後一列為反射點

x(:,1)=x0; % 將初始點賦值給矩陣x

s=eye(n); % n階單位矩陣的n列向量分別代表n元方程的n個搜尋方向

delta=zeros(1,n); % 預分配記憶體,用於存放各點的函式下降量

x=x0';

fval=f(x0);

k=0;

while(k<20) % 最大迭代次數暫定為20

k=k+1;

for i=1:n

syms a;

a=solve(diff(subs(f(x(:,i)+a*s(:,i))),a)==0); % 求得當前搜尋方向下最短步長

x(:,i+1)=x(:,i)+a*s(:,i); % 迭代後的新點座標

delta(i)=f(x(:,i))-f(x(:,i+1)); % 函式值下降量

end% 判斷是否符合精度,退出迴圈

x=x(:,1)';

fval=f(x(:,1));

if(norm(x(:,n+1)-x(:,1))<=e)

break

ends(:,n+1)=x(:,n+1)-x(:,1); % 生成新的搜尋方向

x(:,n+2)=2*x(:,n+1)-x(:,1); % 求得反射點

f=[f(x(:,1)),f(x(:,n+1)),f(x(:,n+2))];

% powell判別

if(f(3)main.m

clc,clear;e=0.001; % 精度

x0=[0,0,0]';% 初始點

n=3; % 自變數個數

f=@(x)(10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2+(x(3)-2)^2); % 目標函式

[x,fval]=powell(f,x0,e,n)

matlab優化工具箱 MATLAB優化問題應用

優化理論是一門實踐性很強的學科。所謂最優化問題,一般是指按照給定的標準在某些約束條件下選取最優的解集。它被廣泛地應用於生產管理 軍事指揮和科學試驗等領域,如工程設計中的最優設計 軍事指揮中的最優火力配置問題等。優化理論和方法於20世紀50年代形成基礎理論。在第二次世界大戰期間,出於軍事上的需要,提出...

基於黃金分割的修正Powell演算法

function y textf x 目標函式 輸入引數x x1,x2 輸出引數y y x 1 x 1 2 x 2 x 2 4 x 1 2 x 1 x 2 end function matrix,value powell step1 設定初始迭代輪次k 1 迭代精度 err 初始點 初始搜尋方向組 ...

matlab 非線性優化

求解非線性問題 min z f x s.t.c x 0,ceqx 0,ax b,aeqx beq,lb x ub.x,fval,exitflag,output,lambda,grad,hessian fmincon fun,x0,a,b,aeq,beq,lb,ub,nonlcon,options,p...