Skip to content Skip to sidebar Skip to footer

How To Set Up Sympy To Perform Standard Differential Geometry Tasks?

I'm an engineering student. Pretty much all math I have to do is something in R2 or R3 and concerns differential geometry. Naturally I really like sympy because it makes my calcula

Solution 1:

There is a differential geometry module within sympy:

http://docs.sympy.org/latest/modules/diffgeom.html

For more examples you can see http://blog.krastanov.org/pages/diff-geometry-in-python.html

To do the suggested in the diffgeom module, just define your expression using the base coordinates of your manifold:

from diffgeom.rn import R2
scalar = (R2.r**2 - R2.x**2 - R2.y**2) # you can mix coordinate systems
gradient = (R2.e_x + R2.e_y).rcall(scalar)

There are various functions for change of coordinates, etc. Probably many things are missing, but it would take usage and bug reports (and help) for all this to get implemented.

You can see some other examples in the test files:

However for doing what is suggested in your question, doing it through differential geometry (while possible) would be an overkill. You can just use the matrices module:

defgradient(expr, vars):
    return Matrix([expr.diff(v) for v invars])

More fancy things like matrix jacobians and more are implemented.

A final remark: using expressions instead of functions and lambdas will probably result in more readable and idiomatic sympy code (often it is more natural to use subs to substitute a symbols instead of some kind of closure, lambda, function call, etc).

Post a Comment for "How To Set Up Sympy To Perform Standard Differential Geometry Tasks?"