/// <summary> /// Constructs a new CPointFunction2D through evaluation of IRightValues /// in order to fill the data used to evaluate the function. /// </summary> /// <param name="coordinatesX"> /// An array of <see cref="IRightValue"/> whose result is ordered from /// lower to greater and will represent the x parameter of the function. /// </param> /// <param name="coordinatesY"> /// An array of <see cref="IRightValue"/> whose result is ordered from /// lower to greater and will represent the y parameter of the function. /// </param> /// <param name="values"> /// A bi-dimensional array containing the defined data points for /// all the coordinates specified by coordinatesX and coordinatesY. /// </param> /// <param name="interpolationType"> /// The interpolation to apply when evaluating the function /// in case the requested coordinates aren't represented, but inside them. /// </param> /// <param name="extrapolationType"> /// The extrapolation to apply when evaluating the function, /// in case the requested coordinates are outside the represented ones. /// </param> public CPointFunction2D(IRightValue[] coordinatesX, IRightValue[] coordinatesY, IRightValue[,] values, EInterpolationType interpolationType, ExtrapolationType extrapolationType) : this() { this.interpolationType = interpolationType; this.extrapolationType = extrapolationType; // Check if the interpolation and extrapolation methods are available. if (extrapolationType == ExtrapolationType.USEMODEL && interpolationType != EInterpolationType.LEAST_SQUARES) { throw new Exception("Use model extrapolation method is " + "supported only for Least Squares"); } // Sets the sizes depending on the passed arrays length. SetSizes(coordinatesX.Length, coordinatesY.Length); // First copy the parsed elements for the x coordinates. for (int i = coordinatesX.Length - 1; i >= 0; i--) { this[i, -1] = coordinatesX[i].V(); } // Then copy the parsed elements for the y coordinates. for (int i = coordinatesY.Length - 1; i >= 0; i--) { this[-1, i] = coordinatesY[i].V(); } // Finally populate the values matrix with the provided data. for (int x = 0; x < values.GetLength(0); x++) { for (int y = 0; y < values.GetLength(1); y++) { this[x, y] = values[x, y].V(); } } UpdateModel(); }
/// <summary> /// Constructs a new CPointFunction2D through evaluation of IRightValues /// in order to fill the data used to evaluate the function. /// </summary> /// <param name="cordinatesX"> /// An array of IRightValue whose result is ordered from lower to greater and will /// represent the x parameter of the function. /// </param> /// <param name="cordinatesY"> /// An array of IRightValue whose result is ordered from lower to greater and will /// represent the y parameter of the function. /// </param> /// <param name="values"> /// A bi-dimensional array containing the defined data points for /// all the coordinates specified by cordinatesX and cordinatesY. /// </param> /// <param name="interpolationType"> /// The interpolation to apply when evaluating the function /// in case the requested coordinates aren't represented, but inside them. /// </param> /// <param name="extrapolationType"> /// The extrapolation to apply when evaluating the function, /// in case the requested coordinates are outside the represented ones. /// </param> public CPointFunction2D(IRightValue[] cordinatesX, IRightValue[] cordinatesY, IRightValue[,] values, EInterpolationType interpolationType, ExtrapolationType extrapolationType) : this() { this.interpolationType = interpolationType; this.extrapolationType = extrapolationType; // Sets the sizes depending on the passed arrays length. SetSizes(cordinatesX.Length, cordinatesY.Length); // First copy the parsed elements for the x coordinates. for (int i = cordinatesX.Length - 1; i >= 0; i--) { this[i, -1] = cordinatesX[i].V(); } // Then copy the parsed elements for the y coordinates. for (int i = cordinatesY.Length - 1; i >= 0; i--) { this[-1, i] = cordinatesY[i].V(); } // Finally populate the values matrix with the provided data. for (int x = 0; x < values.GetLength(0); x++) { for (int y = 0; y < values.GetLength(1); y++) { this[x, y] = values[x, y].V(); } } }