forum.alglib.nethttp://forum.alglib.net/ Needing help with Levenberg-Marquardthttp://forum.alglib.net/viewtopic.php?f=2&t=2096 Page 1 of 1

 Author: DominikGebhardt [ Tue Aug 05, 2014 6:10 am ] Post subject: Needing help with Levenberg-Marquardt Hi,I'm quite new to this and so I'm currently struggeling a little bit with using "minlmcreatevj".I want to fit a circle to a number of points. P(x,y)I want to minimize the function: SUM[ ((xi-a)^2 + (yi-b)^2 - r^2)^2 ]The documentation says, that i have to split it in single function f[0]^2+f[1]^2+f[2]^2I'm not sure if I did this right so here are my functions:Code:        public static void function1_fvec(double[] x, double[] fi, object obj)        {            // m_x = x-coordinate of center            // m_y = y-coordinate of center            // r      = radius of circle            // x      = x-coordinate of point            // y      = y-coordinate of point             fi[0] = Math.Pow(x - m_x, 2);            fi[1] = Math.Pow(y - m_y, 2);            fi[2] = -Math.Pow(r, 2);        }        public static void function1_jac(double[] x, double[] fi, double[,] jac, object obj)        {            // m_x = x-coordinate of center            // m_y = y-coordinate of center            // r      = radius of circle            // x      = x-coordinate of point            // y      = y-coordinate of point             fi[0] = Math.Pow(x - m_x, 2);            fi[1] = Math.Pow(y - m_y, 2);            fi[2] = -Math.Pow(r, 2);            jac[0, 0] = -2 * (x - m_x);            jac[0, 1] = 0;            jac[0, 2] = 0;            jac[1, 0] = 0;            jac[1, 1] = -2 * (y - m_y);            jac[1, 2] = 0;            jac[2, 0] = 0;            jac[2, 1] = 0;            jac[2, 2] = -2 * r        }But I don't understand, where I can input my points. Otherwise he wouldn't know to what points he should fit the circle.I'm using C#.I'm a little bit confused and I hope, that you could help me with my problem how this library actually works.Best regardsDominik

 Author: Sergey.Bochkanov [ Tue Aug 05, 2014 7:01 am ] Post subject: Re: Needing help with Levenberg-Marquardt Hello!You got it wrong :) In your case, problem should be stated as:Quote:f0 = (x0-a)^2 + (y0-b)^2 - r^2f1 = (x1-a)^2 + (y1-b)^2 - r^2f2 = (x2-a)^2 + (y2-b)^2 - r^2...Thus, you have fixed number of parameters (three, a, b, r) - and variable number of functions, which is equal to the number of points.

 Author: DominikGebhardt [ Tue Aug 05, 2014 7:11 am ] Post subject: Re: Needing help with Levenberg-Marquardt Ah ok.Do I get this right, if I have 74 points I will have to fill f[0] till f[73]?And in addition to that, for each function i will have 3 derivates so i will have something like this:grad[0,0] = -2 * (x0-a)grad[0,1] = -2 * (x1-b)grad[0,2] = -2 * rgrad[1, 0].........and so on?If this is right, is x[] one of my points? So x[] should look like this:double[] x = {{0, 0}, {1, 0.5}...}Thank you so much for your fast reply! :)Edit: But if this would be correct, where should I define a,b,r?My function would now look like this:Code:        public static void function1_fvec(double[] x, double[] fi, object obj)        {            for (int i = 0; i < 74; i++)            {                fi[i] = (x[i] - a) ^ 2 + (x[i + 1] - b) ^ 2 - r ^ 2;            }                    }I'm also not sure if I should minlm or lsfit. If I understood the documentation, than lsfit should only be a wrapper for minlm isn't it?

 Author: Sergey.Bochkanov [ Tue Aug 05, 2014 11:34 am ] Post subject: Re: Needing help with Levenberg-Marquardt 1. You are right, for 74 points you should have f[0]...f[73].2. In your case (LM optimizer is used), x[] stores coefficients a, b, r - not (xi,yi)! Thus, you have x=double[3], not double[74]. You should store list of point coordinates elsewhere - in globally visible variables/fields or pass 2D array as additional parameter obj. 3. Both minlm and lsfit will work for you. Because you already started with minlm, you can just continue using it :)

 Author: NobregaRP [ Wed Nov 18, 2015 4:29 pm ] Post subject: Re: Needing help with Levenberg-Marquardt Does anyone know how to estimate the error of each parameter using lmoptimizer?

 Page 1 of 1 All times are UTC Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Grouphttp://www.phpbb.com/