On Thursday 27 November 2008 22:03:57 Ondrej Certik wrote: > This looks good to me. Could you please also create more tests for the > line_integrate? You can add them as additional patches. > > Ondrej > > On Thu, Nov 27, 2008 at 9:57 PM, Ondrej Certik <[EMAIL PROTECTED]> wrote: > > From: Priit Laes <[EMAIL PROTECTED]> > > > > --- > > sympy/integrals/__init__.py | 2 +- > > sympy/integrals/integrals.py | 45 > > +++++++++++++++++++++++++++ sympy/integrals/tests/test_lineintegrals.py | > > 9 +++++ > > 3 files changed, 55 insertions(+), 1 deletions(-) > > create mode 100644 sympy/integrals/tests/test_lineintegrals.py > > > > diff --git a/sympy/integrals/__init__.py b/sympy/integrals/__init__.py > > index 6027264..7abce35 100644 > > --- a/sympy/integrals/__init__.py > > +++ b/sympy/integrals/__init__.py > > @@ -5,4 +5,4 @@ Out[3]: log(x) > > In [4]: integrate(sin(x),x) > > Out[4]: -cos(x) > > """ > > -from integrals import integrate, Integral > > +from integrals import integrate, Integral, line_integrate > > diff --git a/sympy/integrals/integrals.py b/sympy/integrals/integrals.py > > index 8094919..d541569 100644 > > --- a/sympy/integrals/integrals.py > > +++ b/sympy/integrals/integrals.py > > @@ -10,6 +10,7 @@ from sympy.series import limit > > from sympy.polys import Poly > > from sympy.solvers import solve > > from sympy.functions import DiracDelta, Heaviside, Piecewise > > +from sympy.geometry import Curve > > > > class Integral(Basic): > > """Represents unevaluated integral.""" > > @@ -377,3 +378,47 @@ def integrate(*args, **kwargs): > > return integral.doit() > > else: > > return integral > > + > > + > > [EMAIL PROTECTED](use_add=False) > > +def line_integrate(field, curve, vars): ^^^ > > + """line_integrate(field, Curve, variables) > > + > > + Compute the line integral. > > + > > + Examples > > + -------- > > + >>> from sympy import * > > + >>> x, y, t = symbols('xyt') > > + >>> C = Curve([E**t + 1, E**t - 1], (t, 0, ln(2))) > > + >>> line_integrate(x + y, C, [x, y]) > > + 3*sqrt(2) > > + > > + """ > > + F = sympify(field) > > + if not F: > > + raise ValueError("Expecting function specifying field as first > > argument.") + if not isinstance(curve, Curve): > > + raise ValueError("Expecting Curve entity as second argument.") > > + if not isinstance(vars, (list, tuple)): > > + raise ValueError("Expecting list/tuple for variables.") > > + if len(curve.functions) != len(vars): > > + raise ValueError("Field variable size does not match curve > > dimension.") + > > + if curve.parameter in vars: > > + raise ValueError("Curve parameter clashes with field > > parameters.") + > > + # Calculate derivatives for line parameter functions > > + # F(r) -> F(r(t)) and finally F(r(t)*r'(t)) > > + Ft = F > > + dldt = 0 > > + for i, var in enumerate(vars): > > + _f = curve.functions[i] > > + _dn = diff(_f, curve.parameter) > > + # ...arc length > > + dldt = dldt + (_dn * _dn) > > + Ft = Ft.subs(var, _f) > > + Ft = Ft * dldt**(S(1)/2) > > + > > + integral = Integral(Ft, curve.limits).doit() > > + return integral > > diff --git a/sympy/integrals/tests/test_lineintegrals.py > > b/sympy/integrals/tests/test_lineintegrals.py new file mode 100644 > > index 0000000..1cb8a8c > > --- /dev/null > > +++ b/sympy/integrals/tests/test_lineintegrals.py > > @@ -0,0 +1,9 @@ > > +from sympy import (symbols, integrate, Integral, diff, sin, cos, pi, E, > > ln, + sympify, Curve, line_integrate, sqrt) > > + > > +s, t, x, y, z = symbols('stxyz') > > + > > +def test_lineintegral(): > > + c = Curve([E**t + 1, E**t - 1], (t, 0, ln(2))) > > + assert line_integrate(x + y, c, [x, y]) == 3*sqrt(2) > > + > > -- > > 1.6.0.4
Nice patch! Just a comment: vars is a python keyword, I think is better to change it to something better. Sorry for the late review! Cheers, Riccardo --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sympy-patches" group. To post to this group, send email to sympy-patches@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sympy-patches?hl=en -~----------~----~----~----~------~----~------~--~---