private void testJacobian(DoubleArray x) { int n = x.size(); System.Func <DoubleArray, DoubleArray> func = _fitter.ModelValueFunction; System.Func <DoubleArray, DoubleMatrix> jacFunc = _fitter.ModelJacobianFunction; VectorFieldFirstOrderDifferentiator differ = new VectorFieldFirstOrderDifferentiator(); System.Func <DoubleArray, DoubleMatrix> jacFuncFD = differ.differentiate(func); DoubleMatrix jac = jacFunc(x); DoubleMatrix jacFD = jacFuncFD(x); int rows = jacFD.rowCount(); int cols = jacFD.columnCount(); assertEquals(_cleanVols.Length, rows); assertEquals(n, cols); assertEquals(rows, jac.rowCount()); assertEquals(cols, jac.columnCount()); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { assertEquals(jacFD.get(i, j), jac.get(i, j), 2e-2); } } }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testNonLinearTransform() public virtual void testNonLinearTransform() { BitArray @fixed = new BitArray(); DoubleArray start = DoubleArray.filled(2); UncoupledParameterTransforms transforms = new UncoupledParameterTransforms(start, TRANSFORMS, @fixed); NonLinearTransformFunction transFunc = new NonLinearTransformFunction(FUNCTION, JACOBIAN, transforms); System.Func <DoubleArray, DoubleArray> func = transFunc.FittingFunction; System.Func <DoubleArray, DoubleMatrix> jacFunc = transFunc.FittingJacobian; VectorFieldFirstOrderDifferentiator diff = new VectorFieldFirstOrderDifferentiator(); System.Func <DoubleArray, DoubleMatrix> jacFuncFD = diff.differentiate(func); DoubleArray testPoint = DoubleArray.of(4.5, -2.1); DoubleMatrix jac = jacFunc(testPoint); DoubleMatrix jacFD = jacFuncFD(testPoint); assertEquals(3, jac.rowCount()); assertEquals(2, jac.columnCount()); for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { assertEquals(jacFD.get(i, j), jac.get(i, j), 1e-6); } } }
public virtual DoubleArray findRoot(System.Func <DoubleArray, DoubleArray> function, DoubleArray startPosition) { VectorFieldFirstOrderDifferentiator jac = new VectorFieldFirstOrderDifferentiator(); return(findRoot(function, jac.differentiate(function), startPosition)); }
//------------------------------------------------------------------------- /// <summary> /// Create an instance of the finite difference calculator. /// </summary> /// <param name="fdType"> the finite difference type </param> /// <param name="shift"> the shift to be applied to the curves </param> private CurveGammaCalculator(FiniteDifferenceType fdType, double shift) { this.fd = new VectorFieldFirstOrderDifferentiator(fdType, shift); }