| File: STL\PolynomialModel.cs | Web Access |
| Project: src\src\Microsoft.ML.TimeSeries\Microsoft.ML.TimeSeries.csproj (Microsoft.ML.TimeSeries) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using Microsoft.ML.Runtime; namespace Microsoft.ML.TimeSeries { internal abstract class AbstractPolynomialModel { protected IReadOnlyList<double> Coeffs; public AbstractPolynomialModel(IReadOnlyList<double> coeffs) { Contracts.CheckValue(coeffs, nameof(coeffs)); Coeffs = coeffs; } public abstract double Y(double x); } /// <summary> /// A general polynomial model /// </summary> internal sealed class PolynomialModel : AbstractPolynomialModel { public PolynomialModel(IReadOnlyList<double> coeffs) : base(coeffs) { } /// <summary> /// This function calculates the y value by given the x value, under this model /// </summary> /// <param name="x">The specific x value</param> public override double Y(double x) { double result = Coeffs[0]; double p = 1.0; for (int i = 1; i < Coeffs.Count; i++) { p *= x; result += Coeffs[i] * p; } return result; } } /// <summary> /// This class calculates f(x) = b0 + b1 * x /// </summary> internal sealed class LinearModel : AbstractPolynomialModel { /// <summary> /// Store the coefficients in member variables for better performance. /// </summary> private readonly double _b0; private readonly double _b1; public LinearModel(IReadOnlyList<double> coeffs) : base(coeffs) { Contracts.CheckParam(coeffs.Count == 2, nameof(coeffs), "must contain exact 2 elements."); _b0 = coeffs[0]; _b1 = coeffs[1]; } public override double Y(double x) { return _b0 + (_b1 * x); } } }