# HG changeset patch
# User maldun <domors@gmx.net>
# Date 1282750756 -7200
# Node ID 8ec2c3b4276b0805902889a972a1502e545913a5
# Parent 5b338f2e484f2065d3d30d47bc204d6e9ed13d12
Trac 8321: Numerical evaluation of symbolic integrals with arbitrary precision is now possible, with help of mpmath
diff -r 5b338f2e484f -r 8ec2c3b4276b sage/symbolic/integration/integral.py
a
|
b
|
|
176 | 176 | pass |
177 | 177 | return None |
178 | 178 | |
179 | | def _evalf_(self, f, x, a, b, parent=None): |
| 179 | def _evalf_(self, f, x, a, b, parent = None): |
180 | 180 | """ |
181 | 181 | Returns numerical approximation of the integral |
182 | 182 | |
… |
… |
|
186 | 186 | sage: h = definite_integral(sin(x)/x^2, x, 1, 2); h |
187 | 187 | integrate(sin(x)/x^2, x, 1, 2) |
188 | 188 | sage: h.n() # indirect doctest |
189 | | 0.4723991772689525... |
| 189 | 0.472399177268953 |
190 | 190 | |
191 | 191 | TESTS: |
192 | 192 | |
… |
… |
|
194 | 194 | |
195 | 195 | sage: integrate(x^2.7 * e^(-2.4*x), x, 0, 3).n() |
196 | 196 | 0.154572952320790 |
| 197 | |
| 198 | #Check if #8321 is fixed: |
| 199 | |
| 200 | sage: d = definite_integral(sin(x)/x^2, x, 1, 2) |
| 201 | sage: d.n(77) |
| 202 | 0.4723991772689525199904 |
197 | 203 | """ |
198 | | from sage.gsl.integration import numerical_integral |
199 | | # The gsl routine returns a tuple, which also contains the error. |
200 | | # We only return the result. |
201 | | return numerical_integral(f, a, b)[0] |
| 204 | |
| 205 | import sage.libs.mpmath.all as mpmath |
| 206 | |
| 207 | try: |
| 208 | precision = parent.prec() |
| 209 | mpmath.mp.prec = precision |
| 210 | except AttributeError: |
| 211 | precision = mpmath.mp.prec |
| 212 | |
| 213 | mp_f = lambda z: \ |
| 214 | f(x = mpmath.mpmath_to_sage(z,precision)) |
| 215 | |
| 216 | return mpmath.call(mpmath.quad,mp_f,[a,b]) |
202 | 217 | |
203 | 218 | def _tderivative_(self, f, x, a, b, diff_param=None): |
204 | 219 | """ |