?? powell.m
字號:
%powell方法 非線性規劃
clc;
clear;
e=1e-5;n=2;
d=[1 0;0 1];
x(1,:)=[0 0];m=0;k=1;ap=0;
f(1)=powellfun(x(1,:));
r=f(1);
for p=1:n
for q=1:n
for i=-5:0.001:5
x((k+1),:)=x(k,:)+i*d(k,:);
b=powellfun(x((k+1),:));
if b<r
f(k+1)=b;
r=b;
a(k)=i;
end
end
x((k+1),:)=x(k,:)+a(k)*d(k,:);
if k==n
if abs(x(k+1,:)-x(1,:))<=e
lastx=x(k+1,:);
lastf=powellfun(lastx);
hold
else
for i=1:k
b(i)=f(i)-f(i+1);
end
MIN=b(1);
MAX=b(1);
for i=2:k
if MIN>b(i)
MIN=b(i);
end
if MAX<b(i)
MAX=b(i);
end
end
for i=1:k
if MAX==b(i)
m=i-1;
end
end
fl=powellfun((2*x(k+1,:)-x(1,:)));
if (fl>=f(1))
f(1)=f(k+1);
x(1,:)=x(k,:);
k=1;
else
for i=1:m
d(i,:)=d(i,:);
end
for i=(m+1):n-1
d(i,:)=d((i+1),:);
end
d(k,:)=(x(k+1,:)-x(1,:));
fp=f(k+1);
for i=-5:0.001:5
xp=x(k+1,:)+i*d(k,:);
s=powellfun(xp);
if s<fp
fp=s;
s=fp;
ap=i;
end
end
x(1,:)=x(k+1,:)+ap*d(k,:);
f(1)=powellfun(x(1,:));
k=1;
end
end
else
k=k+1;
end
end
end
lastx=x(1,:)
lastf=f(1)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -