[SciPy-Dev] Code review for trapz update

Nathaniel Smith njs at pobox.com
Tue Mar 10 18:09:08 EDT 2015


On Mar 10, 2015 1:22 PM, "fizyxnrd" <fizyxnrd at gmail.com> wrote:
>
> Eric Moore <ewm <at> redtetrahedron.org> writes:
> > This equivalence is false.  For instance both of these results are
> correct.  Would they still be with your changes?
> > In [46]: x = np.exp(1j*np.pi*np.linspace(0,1,100))
> >
> > In [47]: z = 1/x
> >
> > In [48]: np.trapz(z, x)
> > Out[48]: (1.3244509217643717e-18+3.1410654163086975j)
> >
> > In [49]: np.trapz(z[::-1], x[::-1])
> > Out[49]: (-1.3244509217643594e-18-3.1410654163086971j)
>
> These results would still be correct.  In the first case, the user
> simply specifies that they wish to know $Z(x) - Z(0) = \int_0^x z(x')
> dx'$, while in the second case, they specify that they are looking for
> Z(0) - Z(x) = \int_x^0 z(x') dx' = -\int_0^x z(x') dx'$.
> I'm asserting that the two should be completely equivalent, and that the
> user recognize that the endpoints in the first instance are 1 and -1
> ($\theta \elem [0, \pi]$), while in the latter case the endpoints are -1
> and 1 ($\theta \elem [\pi, 0]$).  Thus $\int_0^x z(x)$ is given by
> np.trapz(z, x) and $\int_x^0 z(x)$ is given by -np.trapz(z, x).
>
> This modification treats the area under the curve as independent of
> path, and asks the user to use path endpoints to determine what should
> be done with that quantity.

Look again at the example: here the path is a two-dimensional arc in the
complex plane. Ian Henricksen's message gives an even more refined version
of the same example, where the arc is a circle with the same start and end
points. Nonetheless, it matters whether you traverse the circle clockwise
or anti-clockwise.

These are real cases where your proposed change just cannot be applied,
because the integral really does depend on all the points in the path, not
just the start and end. I understand where you're coming from, but, well,
mathematics has spoken :-).

-n
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20150310/3231a383/attachment.html>


More information about the SciPy-Dev mailing list