• 大小: 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


评论

共有 条评论

相关资源