x0=[-1.21]
delte=1eita=0.05abtol=1e-6max2=100
x1=x0
syms x y
f(x,y)
df=jacobian(f(x,y))
ddf=jacobian(df)
for k=1:max2
x1
g=subs(df,[x,y],[x1(1),x1(2)])
g=g'
B=subs(ddf,[x,y],[x1(1),x1(2)])
f_g=norm(g)
if f_g<abtol
disp('单折线法----已经找到最优解,迭代次数k及极小点如下')
kx1
break
else
beta=(g'*g)/(g'*inv(B)*g)
d_cp=-beta*g
d_np=-inv(B)*g
f_d_cp=norm(d_cp)
f_d_np=norm(d_np)
if f_d_np<=delte
dk=d_np
else
if f_d_cp<delte
a=(norm(d_np-d_cp))^2
b=d_cp'*(d_np-d_cp)
c=d_cp'*d_cp-delte^2
t=(-b+sqrt(b^2-a*c))/a
dk=d_cp+t*(d_np-d_cp)
else
dk=delte*d_cp/f_d_cp
end
end
qk=f(x1(1),x1(2))+g'*dk+1/2*dk'*B*dk
x2=x1+dk
fk=f(x1(1),x1(2))-f(x2(1),x2(2))
fqk=f(x1(1),x1(2))-qk
rk=fk/fqk
if rk<=eita
x1=x1
end
if rk>3/4
delte=2*delte
elseif (rk>eita)&(rk<1/4)
delte=1/2*delte
elseif (rk>1/4)&(rk<=3/4)
delte=delte
end
x1=x1+dk
end
end
minf=f(x1(1),x1(2))
x1
[k,minf]%--------相应的迭代次数及最小值
意思是说:警告:用于大型优化问题的信赖域方法不能解决楼主这种类型问题,请改为中型优化算法(线性搜索算法);
已经超过了最大目标函数计算次数,请调高此设置,即OPTIONS.MaxFunEvals
事实上,很可能是你的优化模型有问题,没有最有解。
options=optimset('LargeScale','off','display','iter','MaxFunEvals',100000)
用上面这句代替原程序中的代码,仍然没有最优结果,基本上是你的模型的问题,你有很多等式约束,这种优化不好搞,能不能消掉几个设计变量,减少等式约束的个数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)