LevenbergMarquardt C#优化

时间:2019-05-12 19:58:25

标签: c# levenberg-marquardt

我试图校准一些眼睛检测设备。我在csv文件中有校准数据。数据表是具有测量点的表,值是具有函数结果的表。 我假设这个模型是a x ^ 2 + b x + c y ^ 2 + d y + e。但是结果却与我本应得到的不同。我正在为C#使用Accord库。你能告诉我我在做什么错吗?

我从回归对象中获取系数(a,b,c,d,e)。当我使用此数据计算函数时,结果不正确。...

         double[][] inputs = data.ToJagged(); // Measured data X,Y for each group of points i know real position on screen -> outputs
        double[] outputs = values.ToArray(); // Known value of point

        var nls = new NonlinearLeastSquares()
        {
            NumberOfParameters = 5,

            // Initialize to some random values
            StartValues = new[] { -4.3, 2.4, -1.0, 2.3, -0.6 },

            // Let's assume a quadratic model function: a*x^2 + b*x + c*y^2 + d*y +e
            Function = (w, x) => w[0] * x[0] * x[0] + w[1] * x[0] + w[2] * x[1] * x[1] + w[3] * x[1] + w[4],

            // Derivative in respect to the weights:
            Gradient = (w, x, r) =>
            {

                r[0] = x[0] * x[0]; // w.r.t a: x² 
                r[1] = x[0];    // w.r.t b: x  
                r[2] = x[1] * x[1];        // w.r.t c: y^2  
                r[3] = x[1];       // w.r.t d: y 
                r[4] = 1;     // w.r.t e: 1   
            },

            Algorithm = new LevenbergMarquardt()
            {
                MaxIterations = 1000,
                Tolerance = 0.0001
            }
        };


        var regression = nls.Learn(inputs, outputs);

enter image description here

黑色-已知点 蓝色-测量点 红色-计算和校准点

0 个答案:

没有答案