How to compute an integral of a given function without SymPy?










1















I'm having difficulties creating a simple for loop code to integrate a given function without using SymPy. I'm thinking using some sort of Riemann approximation but I don't know how to do this exactly. The code I have so far is:



def xsquared(x):
n = 2
return x**n

def integral(fun, xmin, xmax):
total = 0
for a in range(xmin, xmax):
x = a
total += fun(x*1.235)
return total

print(integral(xsquared, 0, 4))


The output gives 21.3 but how do I do this without inputting a number referring to the "fun(x*1.235)" part?



Any help would be appreciated.










share|improve this question




























    1















    I'm having difficulties creating a simple for loop code to integrate a given function without using SymPy. I'm thinking using some sort of Riemann approximation but I don't know how to do this exactly. The code I have so far is:



    def xsquared(x):
    n = 2
    return x**n

    def integral(fun, xmin, xmax):
    total = 0
    for a in range(xmin, xmax):
    x = a
    total += fun(x*1.235)
    return total

    print(integral(xsquared, 0, 4))


    The output gives 21.3 but how do I do this without inputting a number referring to the "fun(x*1.235)" part?



    Any help would be appreciated.










    share|improve this question


























      1












      1








      1








      I'm having difficulties creating a simple for loop code to integrate a given function without using SymPy. I'm thinking using some sort of Riemann approximation but I don't know how to do this exactly. The code I have so far is:



      def xsquared(x):
      n = 2
      return x**n

      def integral(fun, xmin, xmax):
      total = 0
      for a in range(xmin, xmax):
      x = a
      total += fun(x*1.235)
      return total

      print(integral(xsquared, 0, 4))


      The output gives 21.3 but how do I do this without inputting a number referring to the "fun(x*1.235)" part?



      Any help would be appreciated.










      share|improve this question
















      I'm having difficulties creating a simple for loop code to integrate a given function without using SymPy. I'm thinking using some sort of Riemann approximation but I don't know how to do this exactly. The code I have so far is:



      def xsquared(x):
      n = 2
      return x**n

      def integral(fun, xmin, xmax):
      total = 0
      for a in range(xmin, xmax):
      x = a
      total += fun(x*1.235)
      return total

      print(integral(xsquared, 0, 4))


      The output gives 21.3 but how do I do this without inputting a number referring to the "fun(x*1.235)" part?



      Any help would be appreciated.







      python python-3.x math






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 5:37









      ChaosPredictor

      1,96111624




      1,96111624










      asked Nov 12 '18 at 23:56









      complexsetscomplexsets

      102




      102






















          1 Answer
          1






          active

          oldest

          votes


















          1














          To compute integral by Riemann means that you are computing the limit of Riemann's sum by making partitions innner (Wikipedia).



          For that, your function could have a new parameter interval: dx or maybe you could just guess the interval by splitting the full range into N equal sized intervals. Here is an example asking dx as argument.



          Then, your function should be:



          def riemann(fun, xmin, xmax, dx):
          total = 0
          a = xmin
          while a < xmax:
          total += fun(a + dx/2)*dx
          a += dx
          return total


          Example Outputs



          print(riemann(xsquared, 0, 4, 0.1))
          > 21.330000000000013

          print(riemann(xsquared, 0, 4, 0.25))
          > 21.3125

          print(riemann(xsquared, 0, 4, 0.5))
          > 21.25


          Analythic resolution gives: 64/3 ~ 21.33333



          You're aproximating then the integral by computing the area of the rectangle having:




          • height: the function value at interval middle point fun(a + dx/2)


          • width: the interval length (dx)

          Note: if xmax < xmin, you should verify that dx < 0.






          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%2f53271821%2fhow-to-compute-an-integral-of-a-given-function-without-sympy%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            To compute integral by Riemann means that you are computing the limit of Riemann's sum by making partitions innner (Wikipedia).



            For that, your function could have a new parameter interval: dx or maybe you could just guess the interval by splitting the full range into N equal sized intervals. Here is an example asking dx as argument.



            Then, your function should be:



            def riemann(fun, xmin, xmax, dx):
            total = 0
            a = xmin
            while a < xmax:
            total += fun(a + dx/2)*dx
            a += dx
            return total


            Example Outputs



            print(riemann(xsquared, 0, 4, 0.1))
            > 21.330000000000013

            print(riemann(xsquared, 0, 4, 0.25))
            > 21.3125

            print(riemann(xsquared, 0, 4, 0.5))
            > 21.25


            Analythic resolution gives: 64/3 ~ 21.33333



            You're aproximating then the integral by computing the area of the rectangle having:




            • height: the function value at interval middle point fun(a + dx/2)


            • width: the interval length (dx)

            Note: if xmax < xmin, you should verify that dx < 0.






            share|improve this answer





























              1














              To compute integral by Riemann means that you are computing the limit of Riemann's sum by making partitions innner (Wikipedia).



              For that, your function could have a new parameter interval: dx or maybe you could just guess the interval by splitting the full range into N equal sized intervals. Here is an example asking dx as argument.



              Then, your function should be:



              def riemann(fun, xmin, xmax, dx):
              total = 0
              a = xmin
              while a < xmax:
              total += fun(a + dx/2)*dx
              a += dx
              return total


              Example Outputs



              print(riemann(xsquared, 0, 4, 0.1))
              > 21.330000000000013

              print(riemann(xsquared, 0, 4, 0.25))
              > 21.3125

              print(riemann(xsquared, 0, 4, 0.5))
              > 21.25


              Analythic resolution gives: 64/3 ~ 21.33333



              You're aproximating then the integral by computing the area of the rectangle having:




              • height: the function value at interval middle point fun(a + dx/2)


              • width: the interval length (dx)

              Note: if xmax < xmin, you should verify that dx < 0.






              share|improve this answer



























                1












                1








                1







                To compute integral by Riemann means that you are computing the limit of Riemann's sum by making partitions innner (Wikipedia).



                For that, your function could have a new parameter interval: dx or maybe you could just guess the interval by splitting the full range into N equal sized intervals. Here is an example asking dx as argument.



                Then, your function should be:



                def riemann(fun, xmin, xmax, dx):
                total = 0
                a = xmin
                while a < xmax:
                total += fun(a + dx/2)*dx
                a += dx
                return total


                Example Outputs



                print(riemann(xsquared, 0, 4, 0.1))
                > 21.330000000000013

                print(riemann(xsquared, 0, 4, 0.25))
                > 21.3125

                print(riemann(xsquared, 0, 4, 0.5))
                > 21.25


                Analythic resolution gives: 64/3 ~ 21.33333



                You're aproximating then the integral by computing the area of the rectangle having:




                • height: the function value at interval middle point fun(a + dx/2)


                • width: the interval length (dx)

                Note: if xmax < xmin, you should verify that dx < 0.






                share|improve this answer















                To compute integral by Riemann means that you are computing the limit of Riemann's sum by making partitions innner (Wikipedia).



                For that, your function could have a new parameter interval: dx or maybe you could just guess the interval by splitting the full range into N equal sized intervals. Here is an example asking dx as argument.



                Then, your function should be:



                def riemann(fun, xmin, xmax, dx):
                total = 0
                a = xmin
                while a < xmax:
                total += fun(a + dx/2)*dx
                a += dx
                return total


                Example Outputs



                print(riemann(xsquared, 0, 4, 0.1))
                > 21.330000000000013

                print(riemann(xsquared, 0, 4, 0.25))
                > 21.3125

                print(riemann(xsquared, 0, 4, 0.5))
                > 21.25


                Analythic resolution gives: 64/3 ~ 21.33333



                You're aproximating then the integral by computing the area of the rectangle having:




                • height: the function value at interval middle point fun(a + dx/2)


                • width: the interval length (dx)

                Note: if xmax < xmin, you should verify that dx < 0.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 13 '18 at 0:23

























                answered Nov 13 '18 at 0:11









                ChecheCheche

                816218




                816218



























                    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%2f53271821%2fhow-to-compute-an-integral-of-a-given-function-without-sympy%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

                    Use pre created SQLite database for Android project in kotlin

                    Darth Vader #20

                    Ondo