Integration in SymPy raises “no attribute '_eval_power'” error










0














Why does integral_0^1 log(x)/(x^2 - 1) dx not work in SymPy?




AttributeError: 'Not' object has no attribute '_eval_power'




http://www.ms.u-tokyo.ac.jp/kyoumu/a20170524.pdf#page=4



(OK)
Wolfram|Alpha Examples:



https://www.wolframalpha.com/input/?i=∫%5B0,1%5D+log(x)%2F(x%5E2-1)+dx



integral_0^1 log(x)/(x^2 - 1) dx = π^2/8?



1.2337



(??)
sympy



from sympy import *
# var("x")
x = symbols('x', positive=True)
f=log(x)/(x^2-1)
print(integrate(f,(x, 0, 1)))
print(float(integrate(f,(x, 0, 1))))
# AttributeError: 'Not' object has no attribute '_eval_power'









share|improve this question























  • ^ is not the power operator in Python. Have you tried x**2?
    – user8408080
    Nov 12 at 12:52















0














Why does integral_0^1 log(x)/(x^2 - 1) dx not work in SymPy?




AttributeError: 'Not' object has no attribute '_eval_power'




http://www.ms.u-tokyo.ac.jp/kyoumu/a20170524.pdf#page=4



(OK)
Wolfram|Alpha Examples:



https://www.wolframalpha.com/input/?i=∫%5B0,1%5D+log(x)%2F(x%5E2-1)+dx



integral_0^1 log(x)/(x^2 - 1) dx = π^2/8?



1.2337



(??)
sympy



from sympy import *
# var("x")
x = symbols('x', positive=True)
f=log(x)/(x^2-1)
print(integrate(f,(x, 0, 1)))
print(float(integrate(f,(x, 0, 1))))
# AttributeError: 'Not' object has no attribute '_eval_power'









share|improve this question























  • ^ is not the power operator in Python. Have you tried x**2?
    – user8408080
    Nov 12 at 12:52













0












0








0







Why does integral_0^1 log(x)/(x^2 - 1) dx not work in SymPy?




AttributeError: 'Not' object has no attribute '_eval_power'




http://www.ms.u-tokyo.ac.jp/kyoumu/a20170524.pdf#page=4



(OK)
Wolfram|Alpha Examples:



https://www.wolframalpha.com/input/?i=∫%5B0,1%5D+log(x)%2F(x%5E2-1)+dx



integral_0^1 log(x)/(x^2 - 1) dx = π^2/8?



1.2337



(??)
sympy



from sympy import *
# var("x")
x = symbols('x', positive=True)
f=log(x)/(x^2-1)
print(integrate(f,(x, 0, 1)))
print(float(integrate(f,(x, 0, 1))))
# AttributeError: 'Not' object has no attribute '_eval_power'









share|improve this question















Why does integral_0^1 log(x)/(x^2 - 1) dx not work in SymPy?




AttributeError: 'Not' object has no attribute '_eval_power'




http://www.ms.u-tokyo.ac.jp/kyoumu/a20170524.pdf#page=4



(OK)
Wolfram|Alpha Examples:



https://www.wolframalpha.com/input/?i=∫%5B0,1%5D+log(x)%2F(x%5E2-1)+dx



integral_0^1 log(x)/(x^2 - 1) dx = π^2/8?



1.2337



(??)
sympy



from sympy import *
# var("x")
x = symbols('x', positive=True)
f=log(x)/(x^2-1)
print(integrate(f,(x, 0, 1)))
print(float(integrate(f,(x, 0, 1))))
# AttributeError: 'Not' object has no attribute '_eval_power'






python sympy






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 12 at 12:47







user6655984

















asked Nov 12 at 12:01









mrrclb48z

376




376











  • ^ is not the power operator in Python. Have you tried x**2?
    – user8408080
    Nov 12 at 12:52
















  • ^ is not the power operator in Python. Have you tried x**2?
    – user8408080
    Nov 12 at 12:52















^ is not the power operator in Python. Have you tried x**2?
– user8408080
Nov 12 at 12:52




^ is not the power operator in Python. Have you tried x**2?
– user8408080
Nov 12 at 12:52












2 Answers
2






active

oldest

votes


















1














Write f = log(x)/(x**2-1) because in Python, powers are denoted by ** (and ^ is XOR). This is why the error is thrown. However, SymPy is still unable to integrate that function: the integral returns unevaluated. These polylog-type nonelementary integrals give a lot of trouble to SymPy.



If you are okay with a floating point answer, then use numerical integration:



print(Integral(f,(x, 0, 1)).evalf())


which returns 1.23370055013617...



A thing worth trying with such integrals is nsimplify, which finds a symbolic answer than matches the outcome of numeric integration.



>>> nsimplify(Integral(f, (x, 0, 1)), [pi, E])
pi**2/8


Here the list [pi, E] includes the two most famous math constants, which are likely to appear in integrals. (Another constant that shows up often is EulerGamma).






share|improve this answer






























    1














    In python, the power symbol is not ^ but **.



    Use this:



    from sympy import *
    # var("x")
    x = symbols('x', positive=True)
    f=log(x)/(x**2-1)
    print(integrate(f,(x, 0, 1)))


    Results:



    Integral(log(x)/((x - 1)*(x + 1)), (x, 0, 1))





    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%2f53261761%2fintegration-in-sympy-raises-no-attribute-eval-power-error%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









      1














      Write f = log(x)/(x**2-1) because in Python, powers are denoted by ** (and ^ is XOR). This is why the error is thrown. However, SymPy is still unable to integrate that function: the integral returns unevaluated. These polylog-type nonelementary integrals give a lot of trouble to SymPy.



      If you are okay with a floating point answer, then use numerical integration:



      print(Integral(f,(x, 0, 1)).evalf())


      which returns 1.23370055013617...



      A thing worth trying with such integrals is nsimplify, which finds a symbolic answer than matches the outcome of numeric integration.



      >>> nsimplify(Integral(f, (x, 0, 1)), [pi, E])
      pi**2/8


      Here the list [pi, E] includes the two most famous math constants, which are likely to appear in integrals. (Another constant that shows up often is EulerGamma).






      share|improve this answer



























        1














        Write f = log(x)/(x**2-1) because in Python, powers are denoted by ** (and ^ is XOR). This is why the error is thrown. However, SymPy is still unable to integrate that function: the integral returns unevaluated. These polylog-type nonelementary integrals give a lot of trouble to SymPy.



        If you are okay with a floating point answer, then use numerical integration:



        print(Integral(f,(x, 0, 1)).evalf())


        which returns 1.23370055013617...



        A thing worth trying with such integrals is nsimplify, which finds a symbolic answer than matches the outcome of numeric integration.



        >>> nsimplify(Integral(f, (x, 0, 1)), [pi, E])
        pi**2/8


        Here the list [pi, E] includes the two most famous math constants, which are likely to appear in integrals. (Another constant that shows up often is EulerGamma).






        share|improve this answer

























          1












          1








          1






          Write f = log(x)/(x**2-1) because in Python, powers are denoted by ** (and ^ is XOR). This is why the error is thrown. However, SymPy is still unable to integrate that function: the integral returns unevaluated. These polylog-type nonelementary integrals give a lot of trouble to SymPy.



          If you are okay with a floating point answer, then use numerical integration:



          print(Integral(f,(x, 0, 1)).evalf())


          which returns 1.23370055013617...



          A thing worth trying with such integrals is nsimplify, which finds a symbolic answer than matches the outcome of numeric integration.



          >>> nsimplify(Integral(f, (x, 0, 1)), [pi, E])
          pi**2/8


          Here the list [pi, E] includes the two most famous math constants, which are likely to appear in integrals. (Another constant that shows up often is EulerGamma).






          share|improve this answer














          Write f = log(x)/(x**2-1) because in Python, powers are denoted by ** (and ^ is XOR). This is why the error is thrown. However, SymPy is still unable to integrate that function: the integral returns unevaluated. These polylog-type nonelementary integrals give a lot of trouble to SymPy.



          If you are okay with a floating point answer, then use numerical integration:



          print(Integral(f,(x, 0, 1)).evalf())


          which returns 1.23370055013617...



          A thing worth trying with such integrals is nsimplify, which finds a symbolic answer than matches the outcome of numeric integration.



          >>> nsimplify(Integral(f, (x, 0, 1)), [pi, E])
          pi**2/8


          Here the list [pi, E] includes the two most famous math constants, which are likely to appear in integrals. (Another constant that shows up often is EulerGamma).







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 13 at 3:31

























          answered Nov 12 at 12:54







          user6655984






























              1














              In python, the power symbol is not ^ but **.



              Use this:



              from sympy import *
              # var("x")
              x = symbols('x', positive=True)
              f=log(x)/(x**2-1)
              print(integrate(f,(x, 0, 1)))


              Results:



              Integral(log(x)/((x - 1)*(x + 1)), (x, 0, 1))





              share|improve this answer

























                1














                In python, the power symbol is not ^ but **.



                Use this:



                from sympy import *
                # var("x")
                x = symbols('x', positive=True)
                f=log(x)/(x**2-1)
                print(integrate(f,(x, 0, 1)))


                Results:



                Integral(log(x)/((x - 1)*(x + 1)), (x, 0, 1))





                share|improve this answer























                  1












                  1








                  1






                  In python, the power symbol is not ^ but **.



                  Use this:



                  from sympy import *
                  # var("x")
                  x = symbols('x', positive=True)
                  f=log(x)/(x**2-1)
                  print(integrate(f,(x, 0, 1)))


                  Results:



                  Integral(log(x)/((x - 1)*(x + 1)), (x, 0, 1))





                  share|improve this answer












                  In python, the power symbol is not ^ but **.



                  Use this:



                  from sympy import *
                  # var("x")
                  x = symbols('x', positive=True)
                  f=log(x)/(x**2-1)
                  print(integrate(f,(x, 0, 1)))


                  Results:



                  Integral(log(x)/((x - 1)*(x + 1)), (x, 0, 1))






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 12 at 12:53









                  seralouk

                  5,62522338




                  5,62522338



























                      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.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • 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%2f53261761%2fintegration-in-sympy-raises-no-attribute-eval-power-error%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







                      這個網誌中的熱門文章

                      Barbados

                      How to read a connectionString WITH PROVIDER in .NET Core?

                      Node.js Script on GitHub Pages or Amazon S3