哪位大神可以提供一个求解信赖域子问题单折线法的matlab程序啊

哪位大神可以提供一个求解信赖域子问题单折线法的matlab程序啊,第1张

format long g

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)

用上面这句代替原程序中的代码,仍然没有最优结果,基本上是你的模型的问题,你有很多等式约束,这种优化不好搞,能不能消掉几个设计变量,减少等式约束的个数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7808470.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存