資源簡(jiǎn)介
c/c++ 最速下降法計(jì)算最優(yōu)值 利用armijo計(jì)算最優(yōu)步長(zhǎng)
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#define?m?2
#define?epsilon???pow(10-5)
double?norm_1(double?*x);
double?fun_obj(double?*x);//原函數(shù)
void?fun_grad(double?*xdouble?*grad);//求梯度:
void?armijograd(double?*x0double?*grad);
int?main()
{
????int?i;
????double?*x;
????x?=?(double*)malloc(sizeof(double)*m);
????x[0]?=?3.0;
????x[1]?=?1.0;
????double?*grad;
????grad?=?(double*)malloc(sizeof(double)*m);
????grad[0]?=?0.0;
????grad[1]?=?0.0;
????armijograd(xgrad);
????for(i?=?0;i ????????printf(“%f?“x[i]);
????free(x);free(grad);
????return?0;
}
double?fun_obj(double?*x)//原函數(shù)
{
????double?f?=?0.0;
????f?=?pow(x[0]-12)+pow(x[1]-12);
????return?f;
}
void?fun_grad(double?*xdouble?*grad)//求梯度:
{
????grad[0]?=?2*(x[0]-1);
????grad[1]?=?2*(x[1]-1);
}
double?norm_1(double?*x)
{
????double?sum?=?0.0;
????int?i;
????for(i=0;i ????????sum+=x[i]*x[i];
????sum?=?sqrt(sum);
????return?sum;
}
void?armijograd(double?*x0double?*grad)
{
????int?max_iter?=?5000;???//?max?number?of?iterations
????double?EPS?=?1e-6;????????//threshold?of?gradient?norm
????double?rho?=?0.45;?double?sigma?=?0.2;??//?Armijo?pa
- 上一篇:坦克大戰(zhàn):(MFC]).zip
- 下一篇:命名管道 vc
評(píng)論
共有 條評(píng)論