Source code for symplyphysics.definitions.vector.damping_force_is_proportional_to_velocity
"""
Damping force is proportional to velocity
=========================================
Damping force is an external (relative to an object) force that drains energy from the object,
reducing the motion of the object. It is a model used, for example, to describe the motion
of an oscillator.
**Links:**
#. `Physics LibreTexts, formula 8.3.1 <https://phys.libretexts.org/Courses/University_of_California_Davis/UCD%3A_Physics_9HA__Classical_Mechanics/8%3A_Small_Oscillations/8.3%3A_Damping_and_Resonance>`__.
"""
from symplyphysics import (
units,
Symbol,
Quantity,
Vector,
QuantityVector,
scale_vector,
validate_input,
validate_output,
)
damping_constant = Symbol("b", units.mass / units.time)
"""
Non-negative damping constant.
..
TODO: add to `symbols`
"""
[docs]
def damping_force_definition(velocity_: Vector) -> Vector:
r"""
Vector of *damping force* exerted on the object.
Law:
:code:`F = -1 * b * v`
Latex:
.. math::
\vec F = -b \vec v
:param velocity\_: velocity vector of the object.
Symbol: :code:`v`
Latex: :math:`\vec v`
Dimension: *velocity*
:return: vector of damping :symbols:`force`.
Symbol: :code:`F`
Latex: :math:`\vec F`
Dimension: *force*
"""
return scale_vector(-1 * damping_constant, velocity_)
[docs]
def velocity_law(damping_force_: Vector) -> Vector:
r"""
*Velocity* of the object which the damping force is exerted on.
Law:
:code:`v = -1/b * F`
Latex:
.. math::
\vec v = - \frac{\vec F}{b}
:param damping_force\_: damping :symbols:`force` exerted on the object.
Symbol: :code:`F`
Latex: :math:`\vec F`
Dimension: *force*
:return: velocity vector of the object.
Symbol: :code:`v`
Latex: :math:`\vec v`
Dimension: *velocity*
"""
return scale_vector(-1 / damping_constant, damping_force_)
@validate_input(damping_constant_=damping_constant, velocity_=units.velocity)
@validate_output(units.force)
def calculate_damping_force(damping_constant_: Quantity,
velocity_: QuantityVector) -> QuantityVector:
result_vector = damping_force_definition(velocity_.to_base_vector())
return QuantityVector.from_base_vector(result_vector,
subs={damping_constant: damping_constant_})
@validate_input(damping_constant_=damping_constant, damping_force_=units.force)
@validate_output(units.velocity)
def calculate_velocity(damping_constant_: Quantity,
damping_force_: QuantityVector) -> QuantityVector:
result_vector = velocity_law(damping_force_.to_base_vector())
return QuantityVector.from_base_vector(result_vector,
subs={damping_constant: damping_constant_})