Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="power"></param>
        /// <param name="cf"></param>
        /// <param name="error"></param>
        /// <param name="equation"></param>
        /// <returns></returns>
        private static float[] expn(float[] x, float[] y, int power, out float[] cf, out float error, out string equation)
        {
            // Options:
            int m = (power < 1) ? 2 : power + 1;
            int n = x.Length, i;

            float[] ya = new float[n];

            // log-scale:
            for (i = 0; i < n; i++)
            {
                ya[i] = Maths.Log(y[i], Maths.E);
            }

            // approximation:
            cf = LeastSquaresOptions.Coefficients(x, ya, m);
            float[] p = LeastSquaresOptions.Polynomial(x, cf);

            // exponential-scale:
            for (i = 0; i < n; i++)
            {
                ya[i] = Maths.Pow(Maths.E, p[i]);
            }

            error    = LeastSquaresOptions.Error(ya, y);
            equation = "EXP" + '(' + LeastSquaresOptions.Equation(cf) + ')';
            return(ya);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="power"></param>
        /// <param name="cf"></param>
        /// <param name="error"></param>
        /// <param name="equation"></param>
        /// <returns></returns>
        private static Complex32[] powr(Complex32[] x, Complex32[] y, int power, out Complex32[] cf, out Complex32 error, out string equation)
        {
            // Options:
            int m = (power < 1) ? 2 : power + 1;
            int n = x.Length, i;

            Complex32[] xa = new Complex32[n];
            Complex32[] ya = new Complex32[n];

            // log-scale:
            for (i = 0; i < n; i++)
            {
                xa[i] = Maths.Log(x[i]);
                ya[i] = Maths.Log(y[i]);
            }

            // approximation:
            cf = LeastSquaresOptions.Coefficients(xa, ya, m);
            Complex32[] p = LeastSquaresOptions.Polynomial(xa, cf);

            // exponential-scale:
            for (i = 0; i < n; i++)
            {
                ya[i] = Maths.Exp(p[i]);
            }

            error    = LeastSquaresOptions.Error(ya, y);
            equation = "EXP" + '(' + LeastSquaresOptions.Equation(cf, " * LN(X)^") + ')';
            return(ya);
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="power"></param>
        /// <param name="cf"></param>
        /// <param name="error"></param>
        /// <param name="equation"></param>
        /// <returns></returns>
        private static Complex32[] poly(Complex32[] x, Complex32[] y, int power, out Complex32[] cf, out Complex32 error, out string equation)
        {
            // Options:
            int m = (power < 1) ? 2 : power + 1;

            cf = LeastSquaresOptions.Coefficients(x, y, m);
            Complex32[] ya = LeastSquaresOptions.Polynomial(x, cf);
            error    = LeastSquaresOptions.Error(ya, y);
            equation = LeastSquaresOptions.Equation(cf);
            return(ya);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Returns an array of polynomial values.
        /// </summary>
        /// <param name="x">Argument</param>
        /// <param name="c">Approximation coefficients</param>
        /// <returns>Array</returns>
        public static float[] Polynomial(float[] x, float[] c)
        {
            int n = x.Length, i;

            float[] y = new float[n];

            for (i = 0; i < n; i++)
            {
                y[i] = LeastSquaresOptions.Polynomial(x[i], c);
            }
            return(y);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Returns an array of polynomial values.
        /// </summary>
        /// <param name="x">Argument</param>
        /// <param name="c">Approximation coefficients</param>
        /// <returns>Array</returns>
        public static Complex32[] Polynomial(Complex32[] x, Complex32[] c)
        {
            int n = x.Length, i;

            Complex32[] y = new Complex32[n];

            for (i = 0; i < n; i++)
            {
                y[i] = LeastSquaresOptions.Polynomial(x[i], c);
            }
            return(y);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Returns an array of polynomial values.
        /// </summary>
        /// <param name="x">Argument</param>
        /// <param name="y">Function</param>
        /// <param name="iterations">Number of iterations</param>
        /// <returns>Array</returns>
        public static float[] Coefficients(float[] x, float[] y, int iterations)
        {
            int i, j;
            int n = x.Length;
            int m = iterations < 1 ? 1 : iterations;

            float[,] matrix = new float[m, m + 1];

            for (i = 0; i < m; i++)
            {
                for (j = 0; j < m; j++)
                {
                    matrix[i, j] = LeastSquaresOptions.SummaryPow(x, j + i);
                }
                matrix[i, m] = LeastSquaresOptions.SummaryPow(y, x, 1, i);
            }

            return(Matrice.Solve(matrix));
        }
Exemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="power"></param>
        /// <param name="cf"></param>
        /// <param name="error"></param>
        /// <param name="equation"></param>
        /// <returns></returns>
        private static Complex32[] logc(Complex32[] x, Complex32[] y, int power, out Complex32[] cf, out Complex32 error, out string equation)
        {
            // Options:
            int n = x.Length, i;
            int m = (power < 1) ? 2 : power + 1;

            Complex32[] xa = new Complex32[n];
            Complex32[] ya = new Complex32[n];

            // log-scale:
            for (i = 0; i < n; i++)
            {
                xa[i] = Maths.Log(x[i]);
            }

            // approximation:
            cf       = LeastSquaresOptions.Coefficients(xa, y, m);
            ya       = LeastSquaresOptions.Polynomial(xa, cf);
            error    = LeastSquaresOptions.Error(ya, y);
            equation = LeastSquaresOptions.Equation(cf, " * LN(X)^");
            return(ya);
        }