声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 704|回复: 0

[综合讨论] 关于共轭梯度法的程序运行问题

[复制链接]
发表于 2007-12-8 22:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
分别用共轭梯度法和拟牛顿法极小化奇异函数f(x)=x1+10*x2)^2+5*(x3-x4)^2+10*(x1-x4)^4,x0=(3,-1,0,1)',
我用FR-CG法编的,但是迭代到第二步,就解不搜索因子了。麻烦高手帮忙看哈嘛
clc
clear
syms x1 x2 x3 x4
x=[x1,x2,x3,x4];
f=(x1+10*x2)^2+5*(x3-x4)^2+10*(x1-x4)^4;
g=[diff(f,x1),diff(f,x2),diff(f,x3),diff(f,x4)];
err=0.01;
a1=3;a2=-1;a3=0;a4=1;
A=[0 0 0 0];
k=0;
for i=1:10
f0=subs(subs(subs(subs(f,x1,a1),x2,a2),x3,a3),x4,a4);
g0=simple([subs(g(:,1),x,A),subs(g(:,2),x,A),subs(g(:,3),x,A),subs(g(:,4),x,A)])
d=-g0
s=eval(sqrt(g0(:,1)^2+g0(:,2)^2+g0(:,3)^2+g0(:,4)^2))
if err>s
   A
    break
else
    syms t
    A1=A+t*d;
    f1=subs(f,x,A1);
   df1=simple(diff(f1,t))
   t1=eval(simple(solve(df1,t)))
   t1=t1(1,:)
   A1=[subs(A1(:,1),t,t1),subs(A1(:,2),t,t1),subs(A1(:,3),t,t1),subs(A1(:,4),t,t1)]
   g1=[subs(g(:,1),x,A1),subs(g(:,2),x,A1),subs(g(:,3),x,A1),subs(g(:,4),x,A1)]
   b=(g1*g1')/(g0*g0')
   d1=-g1+b*d;
   d=d1
   A=A1
   k=k+1
end
end

[ 本帖最后由 eight 于 2007-12-10 15:52 编辑 ]
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 19:25 , Processed in 0.060546 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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