public static void Test()
        {
            Random rand = new Random();
            int    dim  = rand.Next(2, 7);
            MemorySavingLeastSquare msls = new MemorySavingLeastSquare(dim);

            double[]        ans      = Enumerable.Range(0, dim).Select(x => rand.NextDouble() * 200 - 100).ToArray();
            List <double[]> leftArr  = new List <double[]>();
            List <double>   rightArr = new List <double>();

            for (int k = 0; k < 200; k++)
            {
                double[] left  = Enumerable.Range(0, dim).Select(x => rand.NextDouble() * 200 - 100).ToArray();
                double   right = Enumerable.Range(0, dim).Select(i => left[i] * ans[i]).Sum() + rand.NextDouble() * 10 - 5;
                msls.PutPoint(left, right);
                leftArr.Add(left);
                rightArr.Add(right);
            }
            double[] ans1 = CvEx.Solve(leftArr, rightArr, InvertMethod.Svd);
            double[] ans2 = msls.Solve();
            System.Windows.MessageBox.Show(string.Join(", ", ans.Select(x => x.ToString("0.00000"))) + "\n" + string.Join(", ", ans1.Select(x => x.ToString("0.00000"))) + "\n" + string.Join(", ", ans2.Select(x => x.ToString("0.00000"))));
        }