mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Added the algorithm to compute the terminal velocity of an object fal… (#10237)
* added the algorithm to compute the terminal velocity of an object falling in a fluid * fixed spelling mistake * fixed issues in topic description * imported the value of g from scipy and changed the doctests accordingly * fixed formatting * Apply suggestions from code review --------- Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com>
This commit is contained in:
parent
68faebe711
commit
abc390967d
60
physics/terminal_velocity.py
Normal file
60
physics/terminal_velocity.py
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
"""
|
||||||
|
Title : Computing the terminal velocity of an object falling
|
||||||
|
through a fluid.
|
||||||
|
|
||||||
|
Terminal velocity is defined as the highest velocity attained by an
|
||||||
|
object falling through a fluid. It is observed when the sum of drag force
|
||||||
|
and buoyancy is equal to the downward gravity force acting on the
|
||||||
|
object. The acceleration of the object is zero as the net force acting on
|
||||||
|
the object is zero.
|
||||||
|
|
||||||
|
Vt = ((2 * m * g)/(ρ * A * Cd))^0.5
|
||||||
|
|
||||||
|
where :
|
||||||
|
Vt = Terminal velocity (in m/s)
|
||||||
|
m = Mass of the falling object (in Kg)
|
||||||
|
g = Acceleration due to gravity (value taken : imported from scipy)
|
||||||
|
ρ = Density of the fluid through which the object is falling (in Kg/m^3)
|
||||||
|
A = Projected area of the object (in m^2)
|
||||||
|
Cd = Drag coefficient (dimensionless)
|
||||||
|
|
||||||
|
Reference : https://byjus.com/physics/derivation-of-terminal-velocity/
|
||||||
|
"""
|
||||||
|
|
||||||
|
from scipy.constants import g
|
||||||
|
|
||||||
|
|
||||||
|
def terminal_velocity(
|
||||||
|
mass: float, density: float, area: float, drag_coefficient: float
|
||||||
|
) -> float:
|
||||||
|
"""
|
||||||
|
>>> terminal_velocity(1, 25, 0.6, 0.77)
|
||||||
|
1.3031197996044768
|
||||||
|
>>> terminal_velocity(2, 100, 0.45, 0.23)
|
||||||
|
1.9467947148674276
|
||||||
|
>>> terminal_velocity(5, 50, 0.2, 0.5)
|
||||||
|
4.428690551393267
|
||||||
|
>>> terminal_velocity(-5, 50, -0.2, -2)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: mass, density, area and the drag coefficient all need to be positive
|
||||||
|
>>> terminal_velocity(3, -20, -1, 2)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: mass, density, area and the drag coefficient all need to be positive
|
||||||
|
>>> terminal_velocity(-2, -1, -0.44, -1)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: mass, density, area and the drag coefficient all need to be positive
|
||||||
|
"""
|
||||||
|
if mass <= 0 or density <= 0 or area <= 0 or drag_coefficient <= 0:
|
||||||
|
raise ValueError(
|
||||||
|
"mass, density, area and the drag coefficient all need to be positive"
|
||||||
|
)
|
||||||
|
return ((2 * mass * g) / (density * area * drag_coefficient)) ** 0.5
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user