复合型法matlab,复合形法程序出错求大神改错急急急
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
function[ x,minf]=minconSimpSearch2(f,g,gg,X,alpha,sita,gama,beta,var,eps)
% f:目標(biāo)函數(shù)
% g:約束函數(shù)1 gg:約束函數(shù)2
% X:初始復(fù)合形
% alpha:反射系數(shù)
% sita:緊縮系數(shù)
% gama:擴(kuò)張系數(shù)
% beta:收縮系數(shù)
% var:自變量向量
% eps:精度
% x:目標(biāo)函數(shù)取最小值時(shí)的自變量
% minf:目標(biāo)函數(shù)的最小值
N=size(X);
n=N(2);
FX=zeros(1,n);
while 1
for i=1:n
FX(i)=subs(f,var,X(:,i));
end
[XS,IX]=sort(FX);
Xsorted=X(:,IX); %按照IX的順序重新排列X
px=sum(Xsorted(:,1:(n-1)),2)/(n-1); %sum(a,2),a矩陣行相加 Xsorted(:,1:2)保留Xsort的1,2列。中心點(diǎn)坐標(biāo)。
Fpx=subs(f,var,px); %中心點(diǎn)函數(shù)值
SumF=0
for i=1:n
SumF=SumF+(FX(IX(i))-Fpx)^2; %判斷收斂
end
SumF=sqrt(SumF/(n-1));
if SumF<=eps
x=Xsorted(:,1);
break;
else
bcon_1=1;
cof_alpha=alpha;
while bcon_1
x2=px+cof_alpha*(px-Xsorted(:,n)); %算反射點(diǎn)的坐標(biāo)
gx2=subs(g,var,x2); %看有沒(méi)有出界
ggx2=subs(gg,var,x2);
if gx2>=0 ggx2>=0 2<=x2(1)<=4 0.5<=x2(2)<=1
bcon_1=0;
else
cof_alpha=0.7*(cof_alpha);
end
end
fx2=subs(f,var,x2); %反射點(diǎn)函數(shù)值
if fx2
cof_gama=gama;
bcon_2=1;
while bcon_2
x3=x2+cof_gama*(x2-px); %擴(kuò)張步驟,感覺(jué)應(yīng)該用x2代貼第一部分px
gx3=subs(g,var,x3);
ggx3=subs(gg,var,x3);
fx3=subs(f,var,x3);
if gx3>=0 ggx3>=0 2<=x3(1)<=4 0.5<=x3(2)<=1
bcon_2=0;
if fx3
count=1;
else
count=2;
end
else
bcon_2=0;
count=3;
end
end
if count==1
Xsorted(:,n)=x3;
X=Xsorted;
continue
else
Xsorted(:,n)=x2;
X=Xsorted;
continue
end
else
if fx2
Xsorted(:,n)=x2;
X=Xsorted;
continue
else
if fx2
Xsorted(:,n)=x2;
cof_beta=beta;
bcon_3=1;
while bcon_3<4
%x4=px+cof_beta*(Xsorted(:,n)-px)
x4=Xsorted(:,n)+cof_beta*(px-Xsorted(:,n));
gx4=subs(g,var,x4);
ggx4=subs(gg,var,x4);
if gx4>=0 ggx4>=0 2<=x4(1)<=4 0.5<=x4(2)<=1
bcon_3=5;;
else
cof_beta=cof_beta/2;
bcon_3=bcon_3+1;
end
end
if gx4>=0 ggx4>=0 2<=x4(1)<=4 0.5<=x4(2)<=1
fx4=subs(f,var,x4);
FNnew=subs(f,var,Xsorted(:,n));
if fx4
Xsorted(:,n)=x4;
X=Xsorted;
continue
else
x0=Xsorted(:,1);
for i=1:n
Xsorted(:,i)=x0+sita*(Xsorted(:,i)-x0);
end
end
else
x0=Xsorted(:,1);
for i=1:n
Xsorted(:,i)=x0+sita*(Xsorted(:,i)-x0);
X=Xsorted;
continue
end
end
else
x0=Xsorted(:,1);
for i=1:n
Xsorted(:,i)=x0+sita*(Xsorted(:,i)-x0);
X=Xsorted;
continue
end
end
end
end
end
X=Xsorted;
end
minf=subs(f,var,x);
disp(x);
disp(f);
用復(fù)合形法求約束問(wèn)題的最優(yōu)解,目標(biāo)函數(shù):
f(x)=25/(x1x2^3)
約束條件:
g2(x)=1-0.4x1x2≥0
2≤x1≤4
0.5≤x2≤1
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的复合型法matlab,复合形法程序出错求大神改错急急急的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Oracle 10g 问题集锦
- 下一篇: php性能需求,PHP语言性能考察