how to calculate a quadratic equation that best fits a set of given dataBig O, how do you calculate/approximate it?How to set up quadratic equation for a ray/sphere intersection?Easy interview question got harder: given numbers 1..100, find the missing number(s) given exactly k are missingFitting polynomial model to data in RFind an integer not among four billion given onesGiven a number, find the next higher number which has the exact same set of digits as the original numbersolve In Matlab a quadratic equation with very small coefficientsImage Processing: Algorithm Improvement for 'Coca-Cola Can' RecognitionHow to pair socks from a pile efficiently?Genetic algorithm to solve a quadratic equation

Strange math syntax in old basic listing

Asking bank to reduce APR instead of increasing credit limit

How to prevent bad sectors?

Can a wire having a 610-670 THz (frequency of blue light) AC frequency supply, generate blue light?

Different PCB color ( is it different material? )

Can an old DSLR be upgraded to match modern smartphone image quality

How can I prevent interns from being expendable?

Fastest way to perform complex search on pandas dataframe

How can I include a header file that contains `>` in its name?

Intuition behind eigenvalues of an adjacency matrix

Is having a hidden directory under /etc safe?

Creating Fictional Slavic Place Names

Can non-English-speaking characters use wordplay specific to English?

Can a rogue effectively triple their speed by combining Dash and Ready?

Do creatures all have the same statistics upon being reanimated via the Animate Dead spell?

What are the benefits of cryosleep?

If Sweden was to magically float away, at what altitude would it be visible from the southern hemisphere?

Why is there a need to modify system call tables in linux?

Can a helicopter mask itself from Radar?

Lunar orbital rendezvous

Get LaTeX form from step by step solution

What was this black-and-white film set in the Arctic or Antarctic where the monster/alien gets fried in the end?

Is it possible to kill all life on Earth?

Thousands and thousands of words



how to calculate a quadratic equation that best fits a set of given data


Big O, how do you calculate/approximate it?How to set up quadratic equation for a ray/sphere intersection?Easy interview question got harder: given numbers 1..100, find the missing number(s) given exactly k are missingFitting polynomial model to data in RFind an integer not among four billion given onesGiven a number, find the next higher number which has the exact same set of digits as the original numbersolve In Matlab a quadratic equation with very small coefficientsImage Processing: Algorithm Improvement for 'Coca-Cola Can' RecognitionHow to pair socks from a pile efficiently?Genetic algorithm to solve a quadratic equation






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








2















I have a vector X of 20 real numbers and a vector Y of 20 real numbers.



I want to model them as



y = ax^2+bx + c


How to find the value of 'a' , 'b' and 'c'
and best fit quadratic equation.



Given Values



X = (x1,x2,...,x20)
Y = (y1,y2,...,y20)


i need a formula or procedure to find following values



a = ???
b = ???
c = ???


Thanks in advance.










share|improve this question






























    2















    I have a vector X of 20 real numbers and a vector Y of 20 real numbers.



    I want to model them as



    y = ax^2+bx + c


    How to find the value of 'a' , 'b' and 'c'
    and best fit quadratic equation.



    Given Values



    X = (x1,x2,...,x20)
    Y = (y1,y2,...,y20)


    i need a formula or procedure to find following values



    a = ???
    b = ???
    c = ???


    Thanks in advance.










    share|improve this question


























      2












      2








      2








      I have a vector X of 20 real numbers and a vector Y of 20 real numbers.



      I want to model them as



      y = ax^2+bx + c


      How to find the value of 'a' , 'b' and 'c'
      and best fit quadratic equation.



      Given Values



      X = (x1,x2,...,x20)
      Y = (y1,y2,...,y20)


      i need a formula or procedure to find following values



      a = ???
      b = ???
      c = ???


      Thanks in advance.










      share|improve this question
















      I have a vector X of 20 real numbers and a vector Y of 20 real numbers.



      I want to model them as



      y = ax^2+bx + c


      How to find the value of 'a' , 'b' and 'c'
      and best fit quadratic equation.



      Given Values



      X = (x1,x2,...,x20)
      Y = (y1,y2,...,y20)


      i need a formula or procedure to find following values



      a = ???
      b = ???
      c = ???


      Thanks in advance.







      algorithm linear-algebra numerical-methods algebra polynomial-math






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 16 '14 at 10:27









      Bartosz Marcinkowski

      5,03512150




      5,03512150










      asked Jan 16 '14 at 10:08









      ThavamaniThavamani

      1,6861913




      1,6861913






















          2 Answers
          2






          active

          oldest

          votes


















          2














          That is a linear least squares problem. I think the easiest method which gives accurate results is QR decomposition using Householder reflections. It is not something to be explained in a stackoverflow answer, but I hope you will find all that is needed with this links.



          If you never heard about these before and don't know how it connects with you problem:



          A = [[x1^2, x1, 1]; [x2^2, x2, 1]; ...]
          Y = [y1; y2; ...]


          Now you want to find v = [a; b; c] such that A*v is as close as possible to Y, which is exactly what least squares problem is all about.






          share|improve this answer
































            2














            Everything @Bartoss said is right, +1. I figured I just add a practical implementation here, without QR decomposition. You want to evaluate the values of a,b,c such that the distance between measured and fitted data is minimal. You can pick as measure



            sum(ax^2+bx + c -y)^2)


            where the sum is over the elements of vectors x,y.



            Then, a minimum implies that the derivative of the quantity with respect to each of a,b,c is zero:



            d (sum(ax^2+bx + c -y)^2) /da =0
            d (sum(ax^2+bx + c -y)^2) /db =0
            d (sum(ax^2+bx + c -y)^2) /dc =0


            these equations are



            2(sum(ax^2+bx + c -y)*x^2)=0
            2(sum(ax^2+bx + c -y)*x) =0
            2(sum(ax^2+bx + c -y)) =0


            Dividing by 2, the above can be rewritten as



            a*sum(x^4) +b*sum(x^3) + c*sum(x^2) =sum(y*x^2)
            a*sum(x^3) +b*sum(x^2) + c*sum(x) =sum(y*x)
            a*sum(x^2) +b*sum(x) + c*N =sum(y)


            where N=20 in your case. A simple code in python showing how to do so follows.



            from numpy import random, array
            from scipy.linalg import solve
            import matplotlib.pylab as plt
            a, b, c = 6., 3., 4.
            N = 20
            x = random.rand((N))
            y = a * x ** 2 + b * x + c
            y += random.rand((20)) #add a bit of noise to make things more realistic

            x4 = (x ** 4).sum()
            x3 = (x ** 3).sum()
            x2 = (x ** 2).sum()
            M = array([[x4, x3, x2], [x3, x2, x.sum()], [x2, x.sum(), N]])
            K = array([(y * x ** 2).sum(), (y * x).sum(), y.sum()])
            A, B, C = solve(M, K)

            print 'exact values ', a, b, c
            print 'calculated values', A, B, C

            fig, ax = plt.subplots()
            ax.plot(x, y, 'b.', label='data')
            ax.plot(x, A * x ** 2 + B * x + C, 'r.', label='estimate')
            ax.legend()
            plt.show()


            enter image description here



            A much faster way to implement solution is to use a nonlinear least squares algorithm. This will be faster to write, but not faster to run. Using the one provided by scipy,



            from scipy.optimize import leastsq
            def f(arg):
            a,b,c=arg
            return a*x**2+b*x+c-y

            (A,B,C),_=leastsq(f,[1,1,1])#you must provide a first guess to start with in this case.





            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function ()
              StackExchange.using("externalEditor", function ()
              StackExchange.using("snippets", function ()
              StackExchange.snippets.init();
              );
              );
              , "code-snippets");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "1"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f21158765%2fhow-to-calculate-a-quadratic-equation-that-best-fits-a-set-of-given-data%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2














              That is a linear least squares problem. I think the easiest method which gives accurate results is QR decomposition using Householder reflections. It is not something to be explained in a stackoverflow answer, but I hope you will find all that is needed with this links.



              If you never heard about these before and don't know how it connects with you problem:



              A = [[x1^2, x1, 1]; [x2^2, x2, 1]; ...]
              Y = [y1; y2; ...]


              Now you want to find v = [a; b; c] such that A*v is as close as possible to Y, which is exactly what least squares problem is all about.






              share|improve this answer





























                2














                That is a linear least squares problem. I think the easiest method which gives accurate results is QR decomposition using Householder reflections. It is not something to be explained in a stackoverflow answer, but I hope you will find all that is needed with this links.



                If you never heard about these before and don't know how it connects with you problem:



                A = [[x1^2, x1, 1]; [x2^2, x2, 1]; ...]
                Y = [y1; y2; ...]


                Now you want to find v = [a; b; c] such that A*v is as close as possible to Y, which is exactly what least squares problem is all about.






                share|improve this answer



























                  2












                  2








                  2







                  That is a linear least squares problem. I think the easiest method which gives accurate results is QR decomposition using Householder reflections. It is not something to be explained in a stackoverflow answer, but I hope you will find all that is needed with this links.



                  If you never heard about these before and don't know how it connects with you problem:



                  A = [[x1^2, x1, 1]; [x2^2, x2, 1]; ...]
                  Y = [y1; y2; ...]


                  Now you want to find v = [a; b; c] such that A*v is as close as possible to Y, which is exactly what least squares problem is all about.






                  share|improve this answer















                  That is a linear least squares problem. I think the easiest method which gives accurate results is QR decomposition using Householder reflections. It is not something to be explained in a stackoverflow answer, but I hope you will find all that is needed with this links.



                  If you never heard about these before and don't know how it connects with you problem:



                  A = [[x1^2, x1, 1]; [x2^2, x2, 1]; ...]
                  Y = [y1; y2; ...]


                  Now you want to find v = [a; b; c] such that A*v is as close as possible to Y, which is exactly what least squares problem is all about.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Jan 16 '14 at 10:24

























                  answered Jan 16 '14 at 10:18









                  Bartosz MarcinkowskiBartosz Marcinkowski

                  5,03512150




                  5,03512150























                      2














                      Everything @Bartoss said is right, +1. I figured I just add a practical implementation here, without QR decomposition. You want to evaluate the values of a,b,c such that the distance between measured and fitted data is minimal. You can pick as measure



                      sum(ax^2+bx + c -y)^2)


                      where the sum is over the elements of vectors x,y.



                      Then, a minimum implies that the derivative of the quantity with respect to each of a,b,c is zero:



                      d (sum(ax^2+bx + c -y)^2) /da =0
                      d (sum(ax^2+bx + c -y)^2) /db =0
                      d (sum(ax^2+bx + c -y)^2) /dc =0


                      these equations are



                      2(sum(ax^2+bx + c -y)*x^2)=0
                      2(sum(ax^2+bx + c -y)*x) =0
                      2(sum(ax^2+bx + c -y)) =0


                      Dividing by 2, the above can be rewritten as



                      a*sum(x^4) +b*sum(x^3) + c*sum(x^2) =sum(y*x^2)
                      a*sum(x^3) +b*sum(x^2) + c*sum(x) =sum(y*x)
                      a*sum(x^2) +b*sum(x) + c*N =sum(y)


                      where N=20 in your case. A simple code in python showing how to do so follows.



                      from numpy import random, array
                      from scipy.linalg import solve
                      import matplotlib.pylab as plt
                      a, b, c = 6., 3., 4.
                      N = 20
                      x = random.rand((N))
                      y = a * x ** 2 + b * x + c
                      y += random.rand((20)) #add a bit of noise to make things more realistic

                      x4 = (x ** 4).sum()
                      x3 = (x ** 3).sum()
                      x2 = (x ** 2).sum()
                      M = array([[x4, x3, x2], [x3, x2, x.sum()], [x2, x.sum(), N]])
                      K = array([(y * x ** 2).sum(), (y * x).sum(), y.sum()])
                      A, B, C = solve(M, K)

                      print 'exact values ', a, b, c
                      print 'calculated values', A, B, C

                      fig, ax = plt.subplots()
                      ax.plot(x, y, 'b.', label='data')
                      ax.plot(x, A * x ** 2 + B * x + C, 'r.', label='estimate')
                      ax.legend()
                      plt.show()


                      enter image description here



                      A much faster way to implement solution is to use a nonlinear least squares algorithm. This will be faster to write, but not faster to run. Using the one provided by scipy,



                      from scipy.optimize import leastsq
                      def f(arg):
                      a,b,c=arg
                      return a*x**2+b*x+c-y

                      (A,B,C),_=leastsq(f,[1,1,1])#you must provide a first guess to start with in this case.





                      share|improve this answer



























                        2














                        Everything @Bartoss said is right, +1. I figured I just add a practical implementation here, without QR decomposition. You want to evaluate the values of a,b,c such that the distance between measured and fitted data is minimal. You can pick as measure



                        sum(ax^2+bx + c -y)^2)


                        where the sum is over the elements of vectors x,y.



                        Then, a minimum implies that the derivative of the quantity with respect to each of a,b,c is zero:



                        d (sum(ax^2+bx + c -y)^2) /da =0
                        d (sum(ax^2+bx + c -y)^2) /db =0
                        d (sum(ax^2+bx + c -y)^2) /dc =0


                        these equations are



                        2(sum(ax^2+bx + c -y)*x^2)=0
                        2(sum(ax^2+bx + c -y)*x) =0
                        2(sum(ax^2+bx + c -y)) =0


                        Dividing by 2, the above can be rewritten as



                        a*sum(x^4) +b*sum(x^3) + c*sum(x^2) =sum(y*x^2)
                        a*sum(x^3) +b*sum(x^2) + c*sum(x) =sum(y*x)
                        a*sum(x^2) +b*sum(x) + c*N =sum(y)


                        where N=20 in your case. A simple code in python showing how to do so follows.



                        from numpy import random, array
                        from scipy.linalg import solve
                        import matplotlib.pylab as plt
                        a, b, c = 6., 3., 4.
                        N = 20
                        x = random.rand((N))
                        y = a * x ** 2 + b * x + c
                        y += random.rand((20)) #add a bit of noise to make things more realistic

                        x4 = (x ** 4).sum()
                        x3 = (x ** 3).sum()
                        x2 = (x ** 2).sum()
                        M = array([[x4, x3, x2], [x3, x2, x.sum()], [x2, x.sum(), N]])
                        K = array([(y * x ** 2).sum(), (y * x).sum(), y.sum()])
                        A, B, C = solve(M, K)

                        print 'exact values ', a, b, c
                        print 'calculated values', A, B, C

                        fig, ax = plt.subplots()
                        ax.plot(x, y, 'b.', label='data')
                        ax.plot(x, A * x ** 2 + B * x + C, 'r.', label='estimate')
                        ax.legend()
                        plt.show()


                        enter image description here



                        A much faster way to implement solution is to use a nonlinear least squares algorithm. This will be faster to write, but not faster to run. Using the one provided by scipy,



                        from scipy.optimize import leastsq
                        def f(arg):
                        a,b,c=arg
                        return a*x**2+b*x+c-y

                        (A,B,C),_=leastsq(f,[1,1,1])#you must provide a first guess to start with in this case.





                        share|improve this answer

























                          2












                          2








                          2







                          Everything @Bartoss said is right, +1. I figured I just add a practical implementation here, without QR decomposition. You want to evaluate the values of a,b,c such that the distance between measured and fitted data is minimal. You can pick as measure



                          sum(ax^2+bx + c -y)^2)


                          where the sum is over the elements of vectors x,y.



                          Then, a minimum implies that the derivative of the quantity with respect to each of a,b,c is zero:



                          d (sum(ax^2+bx + c -y)^2) /da =0
                          d (sum(ax^2+bx + c -y)^2) /db =0
                          d (sum(ax^2+bx + c -y)^2) /dc =0


                          these equations are



                          2(sum(ax^2+bx + c -y)*x^2)=0
                          2(sum(ax^2+bx + c -y)*x) =0
                          2(sum(ax^2+bx + c -y)) =0


                          Dividing by 2, the above can be rewritten as



                          a*sum(x^4) +b*sum(x^3) + c*sum(x^2) =sum(y*x^2)
                          a*sum(x^3) +b*sum(x^2) + c*sum(x) =sum(y*x)
                          a*sum(x^2) +b*sum(x) + c*N =sum(y)


                          where N=20 in your case. A simple code in python showing how to do so follows.



                          from numpy import random, array
                          from scipy.linalg import solve
                          import matplotlib.pylab as plt
                          a, b, c = 6., 3., 4.
                          N = 20
                          x = random.rand((N))
                          y = a * x ** 2 + b * x + c
                          y += random.rand((20)) #add a bit of noise to make things more realistic

                          x4 = (x ** 4).sum()
                          x3 = (x ** 3).sum()
                          x2 = (x ** 2).sum()
                          M = array([[x4, x3, x2], [x3, x2, x.sum()], [x2, x.sum(), N]])
                          K = array([(y * x ** 2).sum(), (y * x).sum(), y.sum()])
                          A, B, C = solve(M, K)

                          print 'exact values ', a, b, c
                          print 'calculated values', A, B, C

                          fig, ax = plt.subplots()
                          ax.plot(x, y, 'b.', label='data')
                          ax.plot(x, A * x ** 2 + B * x + C, 'r.', label='estimate')
                          ax.legend()
                          plt.show()


                          enter image description here



                          A much faster way to implement solution is to use a nonlinear least squares algorithm. This will be faster to write, but not faster to run. Using the one provided by scipy,



                          from scipy.optimize import leastsq
                          def f(arg):
                          a,b,c=arg
                          return a*x**2+b*x+c-y

                          (A,B,C),_=leastsq(f,[1,1,1])#you must provide a first guess to start with in this case.





                          share|improve this answer













                          Everything @Bartoss said is right, +1. I figured I just add a practical implementation here, without QR decomposition. You want to evaluate the values of a,b,c such that the distance between measured and fitted data is minimal. You can pick as measure



                          sum(ax^2+bx + c -y)^2)


                          where the sum is over the elements of vectors x,y.



                          Then, a minimum implies that the derivative of the quantity with respect to each of a,b,c is zero:



                          d (sum(ax^2+bx + c -y)^2) /da =0
                          d (sum(ax^2+bx + c -y)^2) /db =0
                          d (sum(ax^2+bx + c -y)^2) /dc =0


                          these equations are



                          2(sum(ax^2+bx + c -y)*x^2)=0
                          2(sum(ax^2+bx + c -y)*x) =0
                          2(sum(ax^2+bx + c -y)) =0


                          Dividing by 2, the above can be rewritten as



                          a*sum(x^4) +b*sum(x^3) + c*sum(x^2) =sum(y*x^2)
                          a*sum(x^3) +b*sum(x^2) + c*sum(x) =sum(y*x)
                          a*sum(x^2) +b*sum(x) + c*N =sum(y)


                          where N=20 in your case. A simple code in python showing how to do so follows.



                          from numpy import random, array
                          from scipy.linalg import solve
                          import matplotlib.pylab as plt
                          a, b, c = 6., 3., 4.
                          N = 20
                          x = random.rand((N))
                          y = a * x ** 2 + b * x + c
                          y += random.rand((20)) #add a bit of noise to make things more realistic

                          x4 = (x ** 4).sum()
                          x3 = (x ** 3).sum()
                          x2 = (x ** 2).sum()
                          M = array([[x4, x3, x2], [x3, x2, x.sum()], [x2, x.sum(), N]])
                          K = array([(y * x ** 2).sum(), (y * x).sum(), y.sum()])
                          A, B, C = solve(M, K)

                          print 'exact values ', a, b, c
                          print 'calculated values', A, B, C

                          fig, ax = plt.subplots()
                          ax.plot(x, y, 'b.', label='data')
                          ax.plot(x, A * x ** 2 + B * x + C, 'r.', label='estimate')
                          ax.legend()
                          plt.show()


                          enter image description here



                          A much faster way to implement solution is to use a nonlinear least squares algorithm. This will be faster to write, but not faster to run. Using the one provided by scipy,



                          from scipy.optimize import leastsq
                          def f(arg):
                          a,b,c=arg
                          return a*x**2+b*x+c-y

                          (A,B,C),_=leastsq(f,[1,1,1])#you must provide a first guess to start with in this case.






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Jan 16 '14 at 11:41









                          gg349gg349

                          14.6k23651




                          14.6k23651



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f21158765%2fhow-to-calculate-a-quadratic-equation-that-best-fits-a-set-of-given-data%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

                              Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

                              Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript