-
大小: 276KB文件类型: .rar金币: 1下载: 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)“ << endl;
d=(-1)*tiduf(x0);
while (1)
{
alpha=alphak(x0 d);
x1=x0+alpha*d;
if ( tiduf(x0).norm() {
cout << “最优解为:X=(“ << x1.elems[0] << ‘ ‘ << x1.elems[1] << “)\nf(X)=“ << f(x1) << endl;
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
评论
共有 条评论