Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2009-07-22
帖子: 1
声望力: 0 ![]() |
![]()
目标函数:122.5221*sqrt(0.9025+x1^2)*x2 约束:(1.2732e+007*sqrt(0.9025+x1^2)/(x1*x2)-4.2e+008)<=0,(25908*(0.0025^2+x2^2)*x1*x2-1.2732*(0.9025+x1^2)^1.5)+1/(x2-0.005)+1/(x1)>=0
clc m=zeros(1,100);a=zeros(1,100);b=zeros(1,100);f0=zeros(1,100);%a b为最优点坐标,f0为最优点函数值,f1 f2最优点梯度。 syms x1 x2 e; %e为罚因子。 m(1)=1;c=0.2;a(1)=0.75;b(1)=0.08; %c为递增系数,赋初值。 f=122.5221*sqrt(0.9025+x1^2)*x2+e*(1/(42*(x1*x2)-1.2732*sqrt(0.9025+x1^2))+1/(25908*(0.0025^2+x2^2)*x1*x2-1.2732*(0.9025+x1^2)^1.5)+1/(x2-0.005)+1/(x1)); %x1为高度h,x2为管直径D。 fx1=diff(f,'x1');fx2=diff(f,'x2');fx1x1=diff(fx1,'x1');fx1x2=diff(fx1,'x2');fx2x1=diff(fx2,'x1');fx2x2=diff(fx2,'x2');%求偏导、海森元素。 for k=1:5 %外点法e迭代循环. x1=a(k);x2=b(k);e=m(k); for n=1:1000 %牛顿法求最优值。 f1=subs(fx1); %求解梯度值和海森矩阵 f2=subs(fx2); f11=subs(fx1x1); f12=subs(fx1x2); f21=subs(fx2x1); f22=subs(fx2x2); if(double(sqrt(f1^2+f2^2))<0.01) %最优值收敛条件 a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f)); break; else %如未最优值收敛条件,对x1,x2进行迭代,直到寻找到合适的迭代点 X=[x1 x2]-(([f1 f2]*[f1 f2]')/([f1 f2]*[f11 f12;f21 f22]*[f1 f2]'))*[f1 f2]'; x1=X(1,1);x2=X(2,1); end end if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))<=0.01)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.01) %罚因子迭代收敛条件 h=a(k+1) %输出最优点h,D值,罚因子迭代次数,最优值 D=b(k+1) times=k zhiliang=f0(k+1) break; else m(k+1)=c*m(k); h=a(k+1) %输出最优点h,D值,罚因子迭代次数,最优值 D=b(k+1) times=k zhiliang=f0(k+1) end end 有什么错误,请详细指出来,谢谢了 此帖于 2010-04-08 23:20 被 ncgcake 编辑。 |
![]() |
![]() |