mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Adding avg and mps speed formulae for ideal gases (#10229)
* avg and mps speed formulae added * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * avg and mps speed formulae added * fixed_spacing * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * spacing * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * ws * added amicable numbers * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * added amicable numbers * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * spacing * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * removed * changed name of file and added code improvements * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * issues fixed due to pi * requested changes added --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
9fb0cd271e
commit
0b2c9fb6f1
111
physics/speeds_of_gas_molecules.py
Normal file
111
physics/speeds_of_gas_molecules.py
Normal file
|
@ -0,0 +1,111 @@
|
|||
"""
|
||||
The root-mean-square, average and most probable speeds of gas molecules are
|
||||
derived from the Maxwell-Boltzmann distribution. The Maxwell-Boltzmann
|
||||
distribution is a probability distribution that describes the distribution of
|
||||
speeds of particles in an ideal gas.
|
||||
|
||||
The distribution is given by the following equation:
|
||||
|
||||
-------------------------------------------------
|
||||
| f(v) = (M/2πRT)^(3/2) * 4πv^2 * e^(-Mv^2/2RT) |
|
||||
-------------------------------------------------
|
||||
|
||||
where:
|
||||
f(v) is the fraction of molecules with a speed v
|
||||
M is the molar mass of the gas in kg/mol
|
||||
R is the gas constant
|
||||
T is the absolute temperature
|
||||
|
||||
More information about the Maxwell-Boltzmann distribution can be found here:
|
||||
https://en.wikipedia.org/wiki/Maxwell%E2%80%93Boltzmann_distribution
|
||||
|
||||
The average speed can be calculated by integrating the Maxwell-Boltzmann distribution
|
||||
from 0 to infinity and dividing by the total number of molecules. The result is:
|
||||
|
||||
---------------------
|
||||
| vavg = √(8RT/πM) |
|
||||
---------------------
|
||||
|
||||
The most probable speed is the speed at which the Maxwell-Boltzmann distribution
|
||||
is at its maximum. This can be found by differentiating the Maxwell-Boltzmann
|
||||
distribution with respect to v and setting the result equal to zero. The result is:
|
||||
|
||||
---------------------
|
||||
| vmp = √(2RT/M) |
|
||||
---------------------
|
||||
|
||||
The root-mean-square speed is another measure of the average speed
|
||||
of the molecules in a gas. It is calculated by taking the square root
|
||||
of the average of the squares of the speeds of the molecules. The result is:
|
||||
|
||||
---------------------
|
||||
| vrms = √(3RT/M) |
|
||||
---------------------
|
||||
|
||||
Here we have defined functions to calculate the average and
|
||||
most probable speeds of molecules in a gas given the
|
||||
temperature and molar mass of the gas.
|
||||
"""
|
||||
|
||||
# import the constants R and pi from the scipy.constants library
|
||||
from scipy.constants import R, pi
|
||||
|
||||
|
||||
def avg_speed_of_molecule(temperature: float, molar_mass: float) -> float:
|
||||
"""
|
||||
Takes the temperature (in K) and molar mass (in kg/mol) of a gas
|
||||
and returns the average speed of a molecule in the gas (in m/s).
|
||||
|
||||
Examples:
|
||||
>>> avg_speed_of_molecule(273, 0.028) # nitrogen at 273 K
|
||||
454.3488755020387
|
||||
>>> avg_speed_of_molecule(300, 0.032) # oxygen at 300 K
|
||||
445.52572733919885
|
||||
>>> avg_speed_of_molecule(-273, 0.028) # invalid temperature
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
Exception: Absolute temperature cannot be less than 0 K
|
||||
>>> avg_speed_of_molecule(273, 0) # invalid molar mass
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
Exception: Molar mass should be greater than 0 kg/mol
|
||||
"""
|
||||
|
||||
if temperature < 0:
|
||||
raise Exception("Absolute temperature cannot be less than 0 K")
|
||||
if molar_mass <= 0:
|
||||
raise Exception("Molar mass should be greater than 0 kg/mol")
|
||||
return (8 * R * temperature / (pi * molar_mass)) ** 0.5
|
||||
|
||||
|
||||
def mps_speed_of_molecule(temperature: float, molar_mass: float) -> float:
|
||||
"""
|
||||
Takes the temperature (in K) and molar mass (in kg/mol) of a gas
|
||||
and returns the most probable speed of a molecule in the gas (in m/s).
|
||||
|
||||
Examples:
|
||||
>>> mps_speed_of_molecule(273, 0.028) # nitrogen at 273 K
|
||||
402.65620701908966
|
||||
>>> mps_speed_of_molecule(300, 0.032) # oxygen at 300 K
|
||||
394.836895549922
|
||||
>>> mps_speed_of_molecule(-273, 0.028) # invalid temperature
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
Exception: Absolute temperature cannot be less than 0 K
|
||||
>>> mps_speed_of_molecule(273, 0) # invalid molar mass
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
Exception: Molar mass should be greater than 0 kg/mol
|
||||
"""
|
||||
|
||||
if temperature < 0:
|
||||
raise Exception("Absolute temperature cannot be less than 0 K")
|
||||
if molar_mass <= 0:
|
||||
raise Exception("Molar mass should be greater than 0 kg/mol")
|
||||
return (2 * R * temperature / molar_mass) ** 0.5
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user