1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkRegularStepGradientDescentOptimizer.cxx,v $
Language: C++
Date: $Date: 2007-03-22 14:29:14 $
Version: $Revision: 1.19 $
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef _itkRegularStepGradientDescentOptimizer_txx
#define _itkRegularStepGradientDescentOptimizer_txx
#include "itkRegularStepGradientDescentOptimizer.h"
#include "itkCommand.h"
#include "itkEventObject.h"
namespace itk
{
/**
* Advance one Step following the gradient direction
* This method will be overrided in non-vector spaces
*/
void
RegularStepGradientDescentOptimizer
::StepAlongGradient( double factor,
const DerivativeType & transformedGradient )
{
itkDebugMacro(<<"factor = " << factor << " transformedGradient= " << transformedGradient );
const unsigned int spaceDimension =
m_CostFunction->GetNumberOfParameters();
ParametersType newPosition( spaceDimension );
ParametersType currentPosition = this->GetCurrentPosition();
for(unsigned int j=0; j<spaceDimension; j++)
{
newPosition[j] = currentPosition[j] + transformedGradient[j] * factor;
}
itkDebugMacro(<<"new position = " << newPosition );
this->SetCurrentPosition( newPosition );
}
} // end namespace itk
#endif
|