/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }