以下程式能夠適應一維和多維的目標函式。
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...