示例#1
0
        public static string PolynomialFit(List <float[]> data)
        {
            int elements = data[0].Length - 1;
            int samples  = data.Count;

            double[][] xy = new double[samples][];
            double[]   z  = new double[samples];
            for (int s = 0; s < samples; s++)
            {
                xy[s] = new double[elements];
                for (int i = 0; i < elements; i++)
                {
                    xy[s][i] = data[s][i + 1];
                }
                z[s] = data[s][0];
            }

            if (elements == 3)
            {
                double[] p = Fit.LinearMultiDim(xy, z,
                                                d => 1.0,
                                                d => d[0],
                                                d => d[1],
                                                d => d[2],
                                                d => d[0] * d[1],
                                                d => d[1] * d[2],
                                                d => d[0] * d[2],
                                                d => d[0] * d[1] * d[2]
                                                );
                return($"a+bX+cY+dI+eXY+fYI+gXI+hXYI,{p[0]},{p[1]},{p[2]},{p[3]},{p[4]},{p[5]},{p[6]},{p[7]}");
            }
            else if (elements == 2)
            {
                double[] p = Fit.LinearMultiDim(xy, z,
                                                d => 1.0,
                                                d => d[0],
                                                d => d[1],
                                                d => d[0] * d[1]
                                                );
                return($"a+bX+cY+dXY,{p[0]},{p[1]},{p[2]},{p[3]}");
            }
            else if (elements == 1)
            {
                double[] p = Fit.LinearMultiDim(xy, z,
                                                d => 1.0,
                                                d => d[0]
                                                );
                return($"a+bX,{p[0]},{p[1]}");
            }
            else if (elements == 0)
            {
                double[] p = Fit.LinearMultiDim(xy, z,
                                                d => 1.0
                                                );
                return($"a,{p[0]}");
            }
            throw new ArgumentException();
        }