2019独角兽企业重金招聘Python工程师标准>>>
头文件:
/** Copyright (c) 2008-2011 Zhang Ming (M. Zhang), zmjerry@163.com** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License as published by the* Free Software Foundation, either version 2 or any later version.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions are met:** 1. Redistributions of source code must retain the above copyright notice,* this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** This program is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for* more details. A copy of the GNU General Public License is available at:* http://www.fsf.org/licensing/licenses*//****************************************************************************** bfgs.h** BFGS quasi-Newton method.** This class is designed for finding the minimum value of objective function* in one dimension or multidimension. Inexact line search algorithm is used* to get the step size in each iteration. BFGS (Broyden-Fletcher-Goldfarb* -Shanno) modifier formula is used to compute the inverse of Hesse matrix.** Zhang Ming, 2010-03, Xi'an Jiaotong University.*****************************************************************************/#ifndef BFGS_H
#define BFGS_H#include
#include
{template
// namespace splab#endif
// BFGS_H
实现文件:
/** Copyright (c) 2008-2011 Zhang Ming (M. Zhang), zmjerry@163.com** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License as published by the* Free Software Foundation, either version 2 or any later version.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions are met:** 1. Redistributions of source code must retain the above copyright notice,* this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** This program is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for* more details. A copy of the GNU General Public License is available at:* http://www.fsf.org/licensing/licenses*//****************************************************************************** bfgs-impl.h** Implementation for BFGS class.** Zhang Ming, 2010-03, Xi'an Jiaotong University.*****************************************************************************//*** constructors and destructor*/
template
BFGS
{
}template
BFGS
{
}/*** Finding the optimal solution. The default tolerance error and maximum* iteratin number are "tol=1.0e-6" and "maxItr=100", respectively.*/
template
void BFGS
{// initialize parameters.int k = 0,cnt = 0,N = x0.dim();Dtype ys,yHy,alpha;Vector
}/*** Get the optimum point.*/
template
inline Vector
{return xOpt;
}/*** Get the norm of gradient in each iteration.*/
template
inline Vector
{return gradNorm;
}/*** Get the minimum value of objective function.*/
template
inline Dtype BFGS
{return fMin;
}/*** Get the iteration number.*/
template
inline int BFGS
{return gradNorm.dim()-1;
}
运行结果:
The iterative number is: 7The number of function calculation is: 16The optimal value of x is: size: 2 by 1
-0.7071
0.0000The minimum value of f(x) is: -0.4289The gradient's norm at x is: 0.0000Process returned 0 (0x0) execution time : 0.078 s
Press any key to continue.