資源簡介
用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
- 上一篇:短路支節匹配Matlab實現
- 下一篇:matlab實現梯度法
評論
共有 條評論