mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01: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