mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-05 02:40:16 +00:00
bc8df6de31
* [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.2.2 → v0.3.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.2...v0.3.2) - [github.com/pre-commit/mirrors-mypy: v1.8.0 → v1.9.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.8.0...v1.9.0) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
# source - The ARRL Handbook for Radio Communications
|
|
# https://en.wikipedia.org/wiki/RL_circuit
|
|
|
|
"""
|
|
Description
|
|
-----------
|
|
Inductor is a passive electronic device which stores energy but unlike capacitor, it
|
|
stores energy in its 'magnetic field' or 'magnetostatic field'.
|
|
|
|
When inductor is connected to 'DC' current source nothing happens it just works like a
|
|
wire because it's real effect cannot be seen while 'DC' is connected, its not even
|
|
going to store energy. Inductor stores energy only when it is working on 'AC' current.
|
|
|
|
Connecting a inductor in series with a resistor(when R = 0) to a 'AC' potential source,
|
|
from zero to a finite value causes a sudden voltage to induced in inductor which
|
|
opposes the current. which results in initially slowly current rise. However it would
|
|
cease if there is no further changes in current. With resistance zero current will never
|
|
stop rising.
|
|
|
|
'Resistance(ohms) / Inductance(henrys)' is known as RL-timeconstant. It also represents
|
|
as τ (tau). While the charging of a inductor with a resistor results in
|
|
a exponential function.
|
|
|
|
when inductor is connected across 'AC' potential source. It starts to store the energy
|
|
in its 'magnetic field'.with the help 'RL-time-constant' we can find current at any time
|
|
in inductor while it is charging.
|
|
"""
|
|
|
|
from math import exp # value of exp = 2.718281828459…
|
|
|
|
|
|
def charging_inductor(
|
|
source_voltage: float, # source_voltage should be in volts.
|
|
resistance: float, # resistance should be in ohms.
|
|
inductance: float, # inductance should be in henrys.
|
|
time: float, # time should in seconds.
|
|
) -> float:
|
|
"""
|
|
Find inductor current at any nth second after initiating its charging.
|
|
|
|
Examples
|
|
--------
|
|
>>> charging_inductor(source_voltage=5.8,resistance=1.5,inductance=2.3,time=2)
|
|
2.817
|
|
|
|
>>> charging_inductor(source_voltage=8,resistance=5,inductance=3,time=2)
|
|
1.543
|
|
|
|
>>> charging_inductor(source_voltage=8,resistance=5*pow(10,2),inductance=3,time=2)
|
|
0.016
|
|
|
|
>>> charging_inductor(source_voltage=-8,resistance=100,inductance=15,time=12)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Source voltage must be positive.
|
|
|
|
>>> charging_inductor(source_voltage=80,resistance=-15,inductance=100,time=5)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Resistance must be positive.
|
|
|
|
>>> charging_inductor(source_voltage=12,resistance=200,inductance=-20,time=5)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Inductance must be positive.
|
|
|
|
>>> charging_inductor(source_voltage=0,resistance=200,inductance=20,time=5)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Source voltage must be positive.
|
|
|
|
>>> charging_inductor(source_voltage=10,resistance=0,inductance=20,time=5)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Resistance must be positive.
|
|
|
|
>>> charging_inductor(source_voltage=15, resistance=25, inductance=0, time=5)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Inductance must be positive.
|
|
"""
|
|
|
|
if source_voltage <= 0:
|
|
raise ValueError("Source voltage must be positive.")
|
|
if resistance <= 0:
|
|
raise ValueError("Resistance must be positive.")
|
|
if inductance <= 0:
|
|
raise ValueError("Inductance must be positive.")
|
|
return round(
|
|
source_voltage / resistance * (1 - exp((-time * resistance) / inductance)), 3
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import doctest
|
|
|
|
doctest.testmod()
|