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

 我来答
学习之神好好看
2016-04-07
知道答主
回答量:22
采纳率:0%
帮助的人:5.3万
展开全部
format long g
x0=[-1.2;1];
delte=1;eita=0.05;abtol=1e-6;max2=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及极小点如下');
k;x1;
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]%--------相应的迭代次数及最小值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式