# More examples#

In the following sections we give few examples of what can be done with this module.

## Dimensional analysis#

We will start from Newton’s second law

$m a = F$

where $$m, a$$ and $$F$$ are the mass, the acceleration and the force respectively. Knowing the dimensions of $$m$$ ($$M$$) and $$a$$ ($$L T^{-2}$$), we will determine the dimension of $$F$$; obviously we will find that it is a force: $$M L T^{-2}$$.

From there we will use the expression of the gravitational force between the particle of mass $$m$$ and the body of mass $$M$$, at a distance $$r$$

$F = \frac{G m M}{r^2}$

to determine the dimension of the Newton’s constant $$G$$. The result should be $$L^3 M^{-1} T^{-2}$$.

>>> from sympy import symbols
>>> from sympy.physics.units.systems import SI
>>> from sympy.physics.units import length, mass, acceleration, force
>>> from sympy.physics.units import gravitational_constant as G
>>> from sympy.physics.units.systems.si import dimsys_SI
>>> F = mass*acceleration
>>> F
Dimension(acceleration*mass)
>>> dimsys_SI.get_dimensional_dependencies(F)
{Dimension(length): 1, Dimension(mass, M): 1, Dimension(time): -2}
>>> dimsys_SI.get_dimensional_dependencies(force)
{Dimension(length): 1, Dimension(mass): 1, Dimension(time): -2}


Dimensions cannot compared directly, even if in the SI convention they are the same:

>>> F == force
False


Dimension system objects provide a way to test the equivalence of dimensions:

>>> dimsys_SI.equivalent_dims(F, force)
True

>>> m1, m2, r = symbols("m1 m2 r")
>>> grav_eq = G * m1 * m2 / r**2
>>> F2 = grav_eq.subs({m1: mass, m2: mass, r: length, G: G.dimension})
>>> F2
Dimension(mass*length*time**-2)
>>> F2.get_dimensional_dependencies()
{'length': 1, 'mass': 1, 'time': -2}


Note that one should first solve the equation, and then substitute with the dimensions.

## Equation with quantities#

Using Kepler’s third law

$\frac{T^2}{a^3} = \frac{4 \pi^2}{GM}$

we can find the Venus orbital period using the known values for the other variables (taken from Wikipedia). The result should be 224.701 days.

>>> from sympy import solve, symbols, pi, Eq
>>> from sympy.physics.units import Quantity, length, mass
>>> from sympy.physics.units import day, gravitational_constant as G
>>> from sympy.physics.units import meter, kilogram
>>> T = symbols("T")
>>> a = Quantity("venus_a")


Specify the dimension and scale in SI units:

>>> SI.set_quantity_dimension(a, length)
>>> SI.set_quantity_scale_factor(a, 108208000e3*meter)


Add the solar mass as quantity:

>>> M = Quantity("solar_mass")
>>> SI.set_quantity_dimension(M, mass)
>>> SI.set_quantity_scale_factor(M, 1.9891e30*kilogram)


Now Kepler’s law:

>>> eq = Eq(T**2 / a**3, 4*pi**2 / G / M)
>>> eq
Eq(T**2/venus_a**3, 4*pi**2/(gravitational_constant*solar_mass))
>>> q = solve(eq, T)
>>> q
2*pi*venus_a**(3/2)/(sqrt(gravitational_constant)*sqrt(solar_mass))


To convert to days, use the convert_to function (and possibly approximate the outcoming result):

>>> from sympy.physics.units import convert_to
>>> convert_to(q, day)
71.5112118495813*pi*day
>>> convert_to(q, day).n()
224.659097795948*day


We could also have the solar mass and the day as units coming from the astrophysical system, but we wanted to show how to create a unit that one needs.

We can see in this example that intermediate dimensions can be ill-defined, such as sqrt(G), but one should check that the final result - when all dimensions are combined - is well defined.