public float Evaluate(float x) { float y = x; if (InnerFunction != null) { y = InnerFunction.Evaluate(x); } y = EvaluateThis(y); if (OuterFunction != null) { y = OuterFunction.Evaluate(y); } return(y); }
public Matrix <PF> ComputeParametersJacobian(IFD input) { if (OuterFunction.ParametersCount > 0 && InnerFunction.ParametersCount > 0) { Matrix <PF> outerParamsJacobian = OuterFunction.ComputeParametersJacobian(InnerFunction.Compute(input)); Matrix <PF> outerVarsJacobian = OuterFunction.ComputeVariablesJacobian(InnerFunction.Compute(input)); Matrix <PF> innerParamsJacobian = InnerFunction.ComputeParametersJacobian(input); return(Matrix <PF> .ConcatRows(outerParamsJacobian, outerVarsJacobian *innerParamsJacobian)); } else if (OuterFunction.ParametersCount == 0) { Matrix <PF> outerVarsJacobian = OuterFunction.ComputeVariablesJacobian(InnerFunction.Compute(input)); Matrix <PF> innerParamsJacobian = InnerFunction.ComputeParametersJacobian(input); return(outerVarsJacobian * innerParamsJacobian); } else { return(OuterFunction.ComputeParametersJacobian(InnerFunction.Compute(input))); } }
public void GetAllParametersOptimizationScales(PF[] buffer, int startIndex) { OuterFunction.GetAllParametersOptimizationScales(buffer, startIndex); InnerFunction.GetAllParametersOptimizationScales(buffer, startIndex + OuterFunction.ParametersCount); }
public void SetAllParameters(PF[] paramValues, int startIndex) { OuterFunction.SetAllParameters(paramValues, startIndex); InnerFunction.SetAllParameters(paramValues, startIndex + OuterFunction.ParametersCount); }
public Matrix <PF> ComputeVariablesJacobian(IFD input) { return(OuterFunction.ComputeVariablesJacobian(InnerFunction.Compute(input)) * InnerFunction.ComputeVariablesJacobian(input)); }
public OFR Compute(IFD input) { return(OuterFunction.Compute(InnerFunction.Compute(input))); }