public void CalculateHessian(double[][] jacobian,
double[] errors)
{
for (int i = 0; i < _parametersLength; i++)
{
// Compute Jacobian Matrix Errors
double s = 0.0d;
for (int j = 0; j < _trainingLength; j++)
{
s += jacobian[j][i]*errors[j];
}
_gradient[i] = s;
// Compute Quasi-Hessian Matrix using Jacobian (H = J'J)
for (int j = 0; j < _parametersLength; j++)
{
double c = 0.0d;
for (int k = 0; k < _trainingLength; k++)
{
c += jacobian[k][i]*jacobian[k][j];
}
_hessian[i][j] = _beta*c;
}
}
for (int i = 0; i < _parametersLength; i++)
{
_diagonal[i] = _hessian[i][i];
}
}