-
大小: 276KB文件類型: .rar金幣: 2下載: 0 次發布日期: 2021-05-09
- 語言: C/C++
- 標簽:
資源簡介
近代優化方法,利用C++編寫的PRP共軛梯度法求最優解的程序

代碼片段和文件信息
#include?
#include?
#include?“Matrix.h“
const?double?gama=2;
const?double?lamda=0.618033989;
const?double?h=0.001;
const?double?eps=10e-5;
double?X0[2]={00};
double?f(Matrix?x)
{
double?x1=x.elems[0]?x2=x.elems[1];
return?100*(x2-x1*x1)*(x2-x1*x1)+(1-x1)*(1-x1);
}
double?df1(Matrix?x)
{
????double?x1=x.elems[0]?x2=x.elems[1];
return?-400*x1*(x2-x1*x1)-2*(1-x1);
}
double?df2(Matrix?x)
{
????double?x1=x.elems[0]?x2=x.elems[1];
return?2*100*(x2-x1*x1);
}
Matrix?tiduf(Matrix?x)
{
Matrix?*ans=new?Matrix(21);
double?df[2]={df1(x)df2(x)};
*ans=Matrix(df21);
return?*ans;
}
void?ssqj(double?&a?double?&b?Matrix?x?Matrix?d)????//確定搜索區間的子函數用到引用類型的變量
{
double?a0=0.1?g1=gama?g2=gama?a1=a0+h?t?a2;
if?(?f(x+a0*d)>f(x+a1*d)?)
{
a2=a1+g1*h;
while?(?f(x+a2*d)<=f(x+a1*d)?)
{
g1=g1*gama;
a0=a1;
t=a2;
a2=a1+g1*h;
a1=t;
}
a=a0;
b=a2;
}
else
{
a2=a0-g2*h;
while?(?f(x+a2*d)<=f(x+a0*d)?)
{
g2=g2*gama;
a1=a0;
t=a2;
a2=a0-g2*h;
a0=t;
}
a=a2;
b=a1;
}
}
double?hjfg(double?a?double?b?Matrix?x?Matrix?d)??????//用黃金分割法搜索極值點的子函數
{
double?a1?a2;
a1=b-lamda*(b-a);
a2=a+lamda*(b-a);
while?(?(b-a)>=eps?)
{
if?(?f(x+a1*d)<=f(x+a2*d)?)
{
b=a2;
a2=a1;
a1=b-lamda*(b-a);
}
else
{
a=a1;
a1=a2;
a2=a+lamda*(b-a);
}
}
if?(?f(x+a1*d) return?a1;
else?
return?a2;
}
double?alphak(Matrix?x?Matrix?d)
{
double?a?b;
ssqj(abxd);?
return?hjfg(abxd);
}
int?main()
{
Matrix?x0(X021)?x1(21)?d(21)?y(21);
double?alpha?beta;
cout?<“目標函數:f(x)=100*(x2-x1*x1)*(x2-x1*x1)+(1-x1)*(1-x1)“?< d=(-1)*tiduf(x0);
while?(1)
{
alpha=alphak(x0?d);
x1=x0+alpha*d;
if?(?tiduf(x0).norm() {
cout?<“最優解為:X=(“?< return?0;
}
????????else
{
beta=((tiduf(x1)-tiduf(x0)).trans()*tiduf(x1)).MTod()/(tiduf(x0).trans()*tiduf(x0)).MTod();
d=(-1)*tiduf(x1)+beta*d;
x0=x1;
}
}
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4363??2008-05-08?21:47??PRP\FR.dsp
?????文件????????529??2008-05-08?21:14??PRP\PRP.dsw
?????文件??????50176??2009-06-17?12:44??PRP\FR.ncb
?????文件???????1265??2009-06-17?13:59??PRP\FR.plg
?????文件???????2021??2008-05-28?22:22??PRP\Matrix.cpp
?????文件????????397??2008-05-04?20:12??PRP\Matrix.h
?????文件??????53760??2009-06-17?12:44??PRP\FR.opt
?????文件??????50176??2009-06-17?13:59??PRP\Debug\vc60.idb
?????文件??????61440??2009-06-17?13:59??PRP\Debug\vc60.pdb
?????文件??????14112??2009-06-17?13:59??PRP\Debug\Matrix.obj
?????文件?????258748??2009-06-17?13:59??PRP\Debug\FR.ilk
?????文件?????241733??2009-06-17?13:59??PRP\Debug\FR.exe
?????文件?????541696??2009-06-17?13:59??PRP\Debug\FR.pdb
?????文件?????281352??2009-06-17?13:59??PRP\Debug\FR.pch
?????文件??????30775??2009-06-17?13:59??PRP\Debug\FRmin.obj
?????文件??????41984??2009-06-18?08:37??PRP\PRP.ncb
?????文件???????2226??2009-06-17?13:59??PRP\FRmin.cpp
?????文件??????53760??2009-06-18?08:37??PRP\PRP.opt
?????目錄??????????0??2009-06-17?13:56??PRP\Debug
?????目錄??????????0??2009-06-17?13:56??PRP
-----------?---------??----------?-----??----
??????????????1690513????????????????????20
評論
共有 條評論