• 大小: 600KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Matlab
  • 标签:

资源简介

无约束最优化问题典型算法的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


评论

共有 条评论

相关资源