BRDFLafortuneFitting.LevenbergMarquardt.Step C# (CSharp) Метод

Step() защищенный Метод

protected Step ( ) : void
Результат void
        protected void Step()
        {
            // Evaluate the functions values and jacobian.
            m_MinValue = m_Estimator.Eval( m_MinPoint, m_Jacobian );

            // Find extended matrix
            for ( int i=0; i < m_ParametersCount; i++ )
                for ( int j=0; j < m_Dimension; j++ )
                    m_JacobianEx[i,j] = m_Jacobian[i,j];

            double	SqrtLambda = Math.Sqrt( m_Lambda );
            for ( int i=0; i < m_Dimension; i++ )
                m_JacobianEx[i+m_ParametersCount,i] = SqrtLambda * m_Diagonal.m[i];

            // Find extended vector of function values
            for ( int i=0; i < m_ParametersCount; i++ )
            {
                double	Value = m_Estimator.GetCalcFunctionValues()[i];
                m_FunctionValues.m[i] = Value;
                m_FunctionValuesEx.m[i] = -Value;	// !! Mind the NEGATIVE sign here !!
            }

            // Solve min ||jacExt*x+funValsExt||
            //			if(isQR)
                m_Delta = m_JacobianEx.SolveLeastSquareQR( m_FunctionValuesEx );
            // 			else
            // 				m_Delta = jacExt->solveLstSqrSVD(-m_FunctionValuesEx);

            // Candidate for new minimizer
            for ( int i=0; i < m_Dimension; i++)
                m_TempPoint.m[i] = m_MinPoint[i] + m_Delta[i];

            // Calculate ro : showing how expansion works for the function
            Vector	Temp = m_Jacobian * m_Delta;
            m_PredictedReduction = -(Temp * m_FunctionValues) - Temp*Temp*0.5;
            m_Reduction = m_MinValue - m_Estimator.Glou( m_TempPoint );
            if ( m_PredictedReduction == m_Reduction )
                ro = 1;
            else
                ro = m_Reduction/m_PredictedReduction;
        }