- 积分
- 0
- 注册时间
- 2007-6-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
下面的是部分程序,数组x是已知的,现在遇到的问题是:在求解最小值时,库函数fmincon只是按我给的初始值p0来计算,现在是没有迭代优化!!!!!(在循环优化中,我给一组x,fmincon就应该优化出一组p值,再计算出最小值) 请大侠給指导下 谢谢(以前算过一个目标函数很简单的例子,那个可以迭代优化)
global uu %w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 全局变量定义
uu(1)=x(1);
uu(2)=x(2);
uu(3)=x(3);
uu(4)=x(4);
uu(5)=x(5);
uu(6)=x(6);
uu(7)=x(7);
uu(8)=x(8);
uu(9)=x(9);
uu(10)=x(10);
OPT=optimset;OPT.Display='iter';OPT.LargeScale='off';%OPT.HessUpdate='steepdesc';%fmincon函数最值求解
OPT.TolFun=1e-10;OPT.TolX=1e-10;OPT.TolCon=1e-20;
p0=[445000;446800;1719200];A=[];B=[];Aeq=[];Beq=[];pm=[442800;442800;1709200];pM=[446800;446800;1849200];%;pm=[];pM=[];
[p,f_opt,key,c]=fmincon(@bars10_fun4,p0,A,B,Aeq,Beq,pm,pM,@bars10_con4,OPT)---------调用fmincon库函数来求解最小值
下面两个被调用的子函数
function y=bars10_fun4(p) -------(目标函数)
global uu
E=6.8948E10;
L=9.144;
a11=(1/uu(1)+1/uu(3)+1/uu(5)+2.828427/uu(7)+2.828427/uu(8))*L/(2*E);
a12=L/(2*uu(5)*E);
a21=a12;
a22=(1/uu(2)+1/uu(4)+1/uu(6)+2.828427/uu(9)+2.828427/uu(10))*L/(2*E);
b1=(p(2)/uu(1)-(p(1)+2*p(2)-p(3))/uu(3)-p(2)/uu(5)-2.828427*(p(1)+p(2))/uu(7))*1.414213562*L/(2*E);
b2=(1.414213562*(p(3)-p(2))/uu(4)-1.414213562*p(2)/uu(5)-4*p(2)/uu(9))*L/(2*E);
N(8)=(a22*b1-a12*b2)/(a11*a22-a12*a21);
N(10)=(a11*b2-a21*b1)/(a11*a22-a12*a21);
N(1)=p(2)-0.707106781*N(8);
N(2)=-0.707106781*N(10);
N(3)=-p(1)-2*p(2)+p(3)-0.707106781*N(8);
N(4)=-p(2)+p(3)-0.707106781*N(10);
N(5)=-p(2)-0.707106781*N(8)-0.707106781*N(10);
N(6)=-0.707106781*N(10);
N(7)=1.414213562*(p(1)+p(2))+N(8);
N(9)=1.414213562*p(2)+N(10);
a011=(1/uu(1)+1/uu(3)+1/uu(5)+2.828427/uu(7)+2.828427/uu(8))*L/(2*E);
a012=L/(2*uu(5)*E);
a021=a012;
a022=(1/uu(2)+1/uu(4)+1/uu(6)+2.828427/uu(9)+2.828427/uu(10))*L/(2*E);
b01=(1/uu(1)-2/uu(3)-1/uu(5)-2.828427/uu(7))*1.414213562*L/(2*E);
b02=(1.414213562*(-1)/uu(4)-1.414213562/uu(5)-4/uu(9))*L/(2*E);
N0(8)=(a022*b01-a012*b02)/(a011*a022-a012*a021);
N0(10)=(a011*b02-a021*b01)/(a011*a022-a012*a021);
N0(1)=1-0.707106781*N0(8);
N0(2)=-0.707106781*N0(10);
N0(3)=-2-0.707106781*N0(8);
N0(4)=-1-0.707106781*N0(10);
N0(5)=-1-0.707106781*N0(8)-0.707106781*N0(10);
N0(6)=-0.707106781*N0(10);
N0(7)=1.414213562+N0(8);
N0(9)=1.414213562+N0(10);
ggg1=0;
ggg2=0;
for i=1:6
ggg1=ggg1+(N0(i)*N(i)/uu(i));
end
for i=7:10
ggg2=ggg2+(N0(i)*N(i)/uu(i))*1.414213562;
end
y=0.05-(ggg1+ggg2)*L/E
function [c,ceq]=bars10_con4(p)---约束函数
c=(p(1)-444800)^2/2000^2+(p(2)-444800)^2/2000^2+(p(3)-1779200)^2/70000^2-1;
ceq=[]; |
|