• 大小: 2KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: c  c++  

资源简介

c/c++ 最速下降法计算最优值 利用armijo计算最优步长

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#define m 2
#define epsilon   pow(10-5)

double norm_1(double *x);
double fun_obj(double *x);//原函数
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)//原函数
{
    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

评论

共有 条评论