📄 单纯形推移函数程序.m
字号:
function X=simpx(N,A,N1)
ende=0.0001;
%fNFS='反射点';
while(1)
NZ=zeros(N,1);
NF=zeros(N+1,N);
NZF=zeros(N,1);
NFS=zeros(N,1);
NK=zeros(N,1);
NS2=zeros(N,1);
AA=-2; %预设最好点指标为0
for I=1:N+1 %此循环求最好点
if A(I)>=AA %寻找最优点M1
AA=A(I); %最优指标以AA表示
M1=I; %最优顶点序号为M1
end
end
A0=2; %预设最坏点指标为2
for I=1:N+1 %此循环求最坏点
if A(I)<=A0
A0=A(I); %最坏点指标为A0
M3=I; %最坏点序号为M3
end
end
ACC=2.0; %预设次坏点指标为2
for I=1:N+1 %以下求次坏点
if I~=M3
if A(I)<=ACC
ACC=A(I); %次坏点指标为ACC
M2=I; %次坏点序号为M2
end
end
end
if abs(AA-A0)<=ende
break;
end
NF=N1;
for I=1:N %为求形心去最坏点
NF(M3,I)=0;
end
for I=1:N %对每一个因素求n个点的加和
for J=1:N+1
NZ(I)=NF(J,I)+NZ(I);
end
end
for I=1:N %求平均得形心点坐标NZ
NZ(I)=NZ(I)/N;
end
for I=1:N %求最坏点到形心的距离NZF
NZF(I)=NZ(I)-N1(M3,I);
end
for I=1:N %求反射点NFS
NFS(I)=NZ(I)+NZF(I);
end
%fNFS
NFS
AF=input('输入反射点试验指标:'); %输入反射点试验指标或由目标函数计算
if AF>A(M1)
for I=1:N %求延伸点坐标NK
NK(I)=(NFS(I)+NZF(I));
end
NK
AK=input('输入延伸点试验指标:'); %或由目标函数计算
if AK>AF
for I=1:N %以延伸点代最坏点构造新的单纯形
N1(M3,I)=NK(I);
end
A(M3)=AK;
newsimp=[N1 A'] %输出新的单纯形
else
for I=1:N %以反射点代最坏点构造新的单纯形
N1(M3,I)=NFS(I);
end
A(M3)=AF;
N1 %输出新的单纯形
end
else
if AF>A(M2)
for I=1:N %直接以反射点代最坏点构造新的单纯形
N1(M3,I)=NFS(I);
end
A(M3)=AF;
newsimp=[N1 A'] %输出新的单纯形
else
if AF>A(M3)
for I=1:N %将形心至最坏点以相反数表示
NZF(I)=NZ(I)-NFS(I);
end
end
for I=1:N %求正压缩点或负压缩点
NS2(I)=NZ(I)-0.5*NZF(I);
end
NS2
AT=input('输入正压缩:'); %或负压缩点试验指标
if AT>A(M3)
for I=1:N %以压缩点代最坏点构造新单纯形
N1(M3,I)=NS2(I);
end
A(M3)=AT;
newsimp=[N1 A'] %输出新的单纯形
else
nn1=zeros(N,1);
for I=1:N+1 %整体收缩计算
if I~=M1
for J=1:N
N1(I,J)=(N1(I,J)+N1(M1,J))/2;
nn1(j,1)=N1(i,j);
end
else
for J=1:n
nn1(j,1)=N1(i,j);
end
end
nn1
A(I)=input('输入整体收缩点试验指标:'); %输入整体收缩点试验指标
end
end
end
end
end
X=N1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -