找回密码
 注册
Simdroid-非首页
查看: 70|回复: 0

调用fmincon出现的问题

[复制链接]
发表于 2010-11-12 16:56:02 | 显示全部楼层 |阅读模式 来自 湖南长沙
下面的是部分程序,数组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=[];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 05:22 , Processed in 0.038787 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表