{"action":"created","issue":{"url":"https://api.github.com/repos/sympy/sympy/issues/11876","repository_url":"https://api.github.com/repos/sympy/sympy","labels_url":"https://api.github.com/repos/sympy/sympy/issues/11876/labels{/name}","comments_url":"https://api.github.com/repos/sympy/sympy/issues/11876/comments","events_url":"https://api.github.com/repos/sympy/sympy/issues/11876/events","html_url":"https://github.com/sympy/sympy/issues/11876","id":190798297,"number":11876,"title":"sympy can't integrate sqrt(log(1/x)) for x=0..1","user":{"login":"axil","id":170910,"avatar_url":"https://avatars.githubusercontent.com/u/170910?v=3","gravatar_id":"","url":"https://api.github.com/users/axil","html_url":"https://github.com/axil","followers_url":"https://api.github.com/users/axil/followers","following_url":"https://api.github.com/users/axil/following{/other_user}","gists_url":"https://api.github.com/users/axil/gists{/gist_id}","starred_url":"https://api.github.com/users/axil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/axil/subscriptions","organizations_url":"https://api.github.com/users/axil/orgs","repos_url":"https://api.github.com/users/axil/repos","events_url":"https://api.github.com/users/axil/events{/privacy}","received_events_url":"https://api.github.com/users/axil/received_events","type":"User","site_admin":false},"labels":[{"id":84627354,"url":"https://api.github.com/repos/sympy/sympy/labels/integrals","name":"integrals","color":"0000FF","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":6,"created_at":"2016-11-21T18:26:10Z","updated_at":"2016-11-30T14:06:15Z","closed_at":null,"body":"integrate(sqrt(log(1/x)), (x, 0, 1)) should be sqrt(pi)/2 according to reference books and Mathematica. Sympy is unable to calculate this. \r\n\r\nThis is formula 4.215 from Gradshtein Ryzhik:\r\n\r\nintegrate(log(1/x)**(m-1), (x, 0, 1)) == gamma(m) for Re(m)>0"},"comment":{"url":"https://api.github.com/repos/sympy/sympy/issues/comments/263881311","html_url":"https://github.com/sympy/sympy/issues/11876#issuecomment-263881311","issue_url":"https://api.github.com/repos/sympy/sympy/issues/11876","id":263881311,"user":{"login":"jksuom","id":6929119,"avatar_url":"https://avatars.githubusercontent.com/u/6929119?v=3","gravatar_id":"","url":"https://api.github.com/users/jksuom","html_url":"https://github.com/jksuom","followers_url":"https://api.github.com/users/jksuom/followers","following_url":"https://api.github.com/users/jksuom/following{/other_user}","gists_url":"https://api.github.com/users/jksuom/gists{/gist_id}","starred_url":"https://api.github.com/users/jksuom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jksuom/subscriptions","organizations_url":"https://api.github.com/users/jksuom/orgs","repos_url":"https://api.github.com/users/jksuom/repos","events_url":"https://api.github.com/users/jksuom/events{/privacy}","received_events_url":"https://api.github.com/users/jksuom/received_events","type":"User","site_admin":false},"created_at":"2016-11-30T14:06:15Z","updated_at":"2016-11-30T14:06:15Z","body":"We have to keep in mind that finding substitutions and evaluating antiderivatives are two independent phases of the integration process. For the evaluation, it is necessary to write a new function that returns the antiderivative as explained in the docstring of the manualintegrate module. It should not call try_meijerg or any methods belonging to other integrators. (The flow of `integrate` is convoluted as it is, perhaps too much so already. We should not make its different parts any more interdependent.)\r\n\r\nAs to the substitution process, it should also be made simple and straightforward. The use of `solveset` to invert the log expression is definitely too involved. (Besides, `solveset` may waste a long time producing a result that is not useful.)\r\n\r\nI think that the rule in `manual_diff` should not be more complicated than what would follow from rewriting `log(arg).diff(symbol) = 1/arg*arg.diff(symbol)` in the form `exp(-u_var)*arg.diff(symbol)`.\r\n\r\nIn this example we have `arg = 1/x`, and therefore the result will contain `-1/x**2` if `symbol` is `x`, which may not be useful as such. However, it is not necessary to resolve everything in one step. it is possible to make several substitutions like `u = 1/x`, `v = log(u)`. To make that work it seems necessary to modify `possible_subterms` to recursively return `[term.args[0]] + possible_subterms(term.args[0])` instead of the first argument alone.\r\n\r\nOnce an integrand of the form `t**e*exp(-t)` turns up, its integrator rule should return an antiderivative such as `lowergamma`."}}
{"actor":{"display_login":"jksuom"}}