资源简介
无约束最优化问题典型算法的MATLAB代码
代码片段和文件信息
%% conjugate gradient method
clc;
clear;
format long;
error=1e-5; %停机门限
syms x1 x2 x3 x4 r;
P=(x1+10*x2)^2+(sqrt(5)*(x3-x4))^2+((x2-2*x3)^2)^2+(sqrt(10)*(x1-x4)^2)^2;
f = [ x1+10*x2; 5^(1/2)*(x3-x4); (x2-2*x3)^2; 10^(1/2)*(x1-x4)^2];
v=[x1 x2 x3 x4];
x=[3;-1;0;1];
j=jacobian(fv); %求jacobian行列式
g=jacobian(Pv); %求目标函数梯度向量
g=g‘;
J=subs(jvx); %初值带入表达式
F=subs(fvx);
G=subs(gvx);
k=0;
tic
while (sum((J‘*F).^2))^(1/2)>error %判断停机与否
if k==0
d=-G; %初始搜索方向为负梯度方向
else
beta=G_new‘*G_new/(G_old‘*G_old);
d=-G_new+beta*d; %从x(k)出发搜索方向介于从x(k-1)出发搜索方向和点x(k)负梯度方向之间
end
y=subs(Pvx+r*d);
interval=jintuifa(yr);
step=gold(yrinterval); %一维搜索确定步长
G_old=subs(gvx); %前一点x(k-1)梯度
x=x+step*d;
G_new=subs(gvx); %新一点x(k)梯度
J=subs(jvx); %新的迭代点数值带入表达式
F=subs(fvx);
k=k+1; %迭代次数加1
end;
toc
disp(‘Conjugate gradient method‘);
k
x
sigma=(sum((J‘*F).^2))^(1/2)
F=(sum(F.^2))^(1/2) %显示迭代次数,变量取值,停机表达式值,目标函数值
%%
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1252 2011-12-03 20:12 LM.m
文件 2295 2011-12-03 18:59 total.m
文件 454 2011-12-02 13:42 jintuifa.m
文件 373 2011-12-03 18:32 gold.m
文件 815 2011-12-04 19:29 Gauss_Newton.m
文件 1324 2011-12-04 18:05 DFP.m
文件 1253 2011-12-04 18:18 conjugate_gradient.m
文件 704512 2011-12-04 19:47 报告.doc
----------- --------- ---------- ----- ----
712278 8
- 上一篇:无线通信技术32QAM
- 下一篇:基于meanshift的图像分割matlab代码
评论
共有 条评论