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

资源简介

用matlab编程实现最优控制理论中的共轭梯度法。程序运行没有错误。

资源截图

代码片段和文件信息

format long;
flag=1;
n=2;
X0=[2;2]%设定x初值为(22)

while flag==1
syms x1 x2 rr    
%f=100*(x2-x1^2)^2+(1-x1)^2
f=x1^2+2*x2^2-4*x1-2*x1*x2
%f=(x1-1)^4+x2^2
%f=2*x1^2+x2^2-4*x1+2

df(11)=diff(fx1)     %取函数的梯度(df(11)df(21))
df(21)=diff(fx2)
gg1=gradient(X0df)         %将求得的梯度向量值存入gg1中
ex1=sqrt(gg1(11)^2+gg1(21)^2) %求得梯度下降模值存入变量ex1
ss1=-gg1
k=0                        %迭代次数

while 1
syms x1 x2 rr
x1=X0(11)+rr*ss1(11)     %将x1x2变为一维搜索极小点变量rr的函数
x2=X0(21)+rr*ss1(21)
flamda=eval(f)         %求得rr的函数,便于进行一维搜索
rr=partition(flamda)    %用黄金分割法求得精确以为搜索的rr值
X0(11)=eval(x1)    %重新给变量x1x2赋值,以便进行下一次循环;
X0(21)=eval(x2)
x1=X0(11)
x2=X0(21) 
eval(f)
f
gg2=gradient(X0df)         %将求得的梯度向量值存入gg2中
ex2=sqrt(gg2(11)^2+gg2(21)^2) %求得梯度下降模值存入变量ex2
if ex2<1e-4
        disp(‘x*=‘)
        disp(X0)
        disp(‘函数最优解为:f=‘)
        disp(eval(f))
        flag=0;
        break;
end
if k    u=ex2^2/(ex1^2)
    ss2=-gg2+u*ss1
    ss1=ss2
    gg1=gg2
    ex1=ex2
    k=k+1
elseif k==n-1
    break;
end
end
end








 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1216  2010-12-27 23:03  共轭梯度法\conjugategradient.m

     文件        118  2010-12-26 13:15  共轭梯度法\gradient.m

     文件        914  2010-12-27 23:01  共轭梯度法\partition.m

     文件       2338  2010-12-27 23:23  共轭梯度法\共轭梯度法.txt

     目录          0  2011-06-12 13:45  共轭梯度法

----------- ---------  ---------- -----  ----

                 4586                    5


评论

共有 条评论