全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1413 0
2011-04-28
请问下列优化问题为什么只迭代一次,我找了很久都找不到错误,希望了解fmincon的朋友能够批评指正,谢谢
function sansan()
clear;

options = optimset('LargeScale','off','Display','iter','TOLFUN',1e-30,'TOLX',1e-30);
x0=[50;1.35;1.37];   % Starting guess
lb=[1;0.95;0.97];
ub=[5;1.15;1.17];
[x,fval,exitflag,output]=fmincon(@myfun,x0,[],[],[],[],lb,ub,[],options) %后面两个向量是变量的LB和UB

function f=myfun(x)
u=1;
for b=1:1:50;
s=((b-1)*x(1)*1000):(b*x(1)*1000);
for m=0:100;
F1=((exp(-2.5*10^-5*s).* (1.896*10^-5*s).^m)/ gamma(m+1)).*normcdf((1250-(8.4823*10^-3*s+100*m))./sqrt(3.6*10^-7*s.^2+400*m)).^2.*normcdf((1270-(8.4823*10^-3*s+100*m))./sqrt(3.6*10^-7*s.^2+400*m)).^2;
Z1= trapz(s,F1);%积分
Zrecord1(m+1)=Z1;%用于记录每个m值所对应的积的值,之所以Zrecord后加1,因为matlab不允许序号为零的数组元素
end
Ztotal(u)=sum(Zrecord1);%分母在这
u=u+1;
end
for k=2:51  %时间间隔前的倍数
     for j=1:50   %打击次数
     a=-2.5*10^-5;
     b=1.896*10^-5;
     c=8.4823*10^-3;
     d=3.6*10^-7;
     K1a(j,k)=exp(a*(k-1).*x(1)*1000)* (b*(k-1).*x(1)*1000).^j./ gamma(j+1).* normcdf((1000*x(2)-(c*(k-1).*x(1)*1000+100*j))./sqrt(d*((k-1).*x(1)*1000)^2+400*j)).^2.*normcdf((1000*x(3)-(c*(k-1).*x(1)*1000+100*j))./sqrt(d*((k-1).*x(1)*1000)^2+400*j)).^2;
     K1b(j,k)=exp(a*(k-1).*x(1)*1000)* (b*(k-1).*x(1)*1000).^j./ gamma(j+1).* normcdf((1250-(c*(k-1).*x(1)*1000+100*j))./sqrt(d*((k-1).*x(1)*1000)^2+400*j)).^2.*normcdf((1270-(c*(k-1).*x(1)*1000+100*j))./sqrt(d*((k-1).*x(1)*1000)^2+400*j)).^2;
%给定t,在固定打击j下,t前倍数k的值
  end
  K2a(k)=1-sum(K1a(:,k));          %给定t,t前倍数k的值,j求和
  K2a(1)=0;
  K2b(k)=1-sum(K1b(:,k));          %给定t,t前倍数k的值,j求和
  K2b(1)=0;
end

for k=2:50;
K3a(k)=-x(1)*1000*K2a(k);
end
K3=sum(K3a)+50*x(1)*1000*K2a(51);  %t前倍数累加, EK

for k=2:50;
K4a(k)=-K2a(k);
end
K4=sum(K4a)+50*K2a(51);        %t前倍数累加, EN

for k=2:50;
K5(k)=-x(1)*1000*K2b(k).*K2b(k+1);
end                             %t前倍数累加, EP1
K5=sum(K5(k));
for k=2:50;
K6(k)=x(1)*1000*K2b(k).^2;
end
K6=sum(K6(k));
                            %t前倍数累加, EP2
for k=2:50;
K7(k)=K2b(k).*(x(1)*1000-Ztotal(k-1));
end
K7=sum(K7(k));                            %t前倍数累加, EP3
for k=2:50;
K8(k)=-K2b(k).*(x(1)*1000-Ztotal(k));    %t前倍数累加, EP4
end         %t前倍数累加, EP4
K8=sum(K8(k));
K9=K5+K6+K7+K8;       %downtime expected value
f=(2000*K4+5000*K9+27000)./K3;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群