mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +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>
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
# source - The ARRL Handbook for Radio Communications
|
|
# https://en.wikipedia.org/wiki/RC_time_constant
|
|
|
|
"""
|
|
Description
|
|
-----------
|
|
When a capacitor is connected with a potential source (AC or DC). It starts to charge
|
|
at a general speed but when a resistor is connected in the circuit with in series to
|
|
a capacitor then the capacitor charges slowly means it will take more time than usual.
|
|
while the capacitor is being charged, the voltage is in exponential function with time.
|
|
|
|
'resistance(ohms) * capacitance(farads)' is called RC-timeconstant which may also be
|
|
represented as τ (tau). By using this RC-timeconstant we can find the voltage at any
|
|
time 't' from the initiation of charging a capacitor with the help of the exponential
|
|
function containing RC. Both at charging and discharging of a capacitor.
|
|
"""
|
|
|
|
from math import exp # value of exp = 2.718281828459…
|
|
|
|
|
|
def charging_capacitor(
|
|
source_voltage: float, # voltage in volts.
|
|
resistance: float, # resistance in ohms.
|
|
capacitance: float, # capacitance in farads.
|
|
time_sec: float, # time in seconds after charging initiation of capacitor.
|
|
) -> float:
|
|
"""
|
|
Find capacitor voltage at any nth second after initiating its charging.
|
|
|
|
Examples
|
|
--------
|
|
>>> charging_capacitor(source_voltage=.2,resistance=.9,capacitance=8.4,time_sec=.5)
|
|
0.013
|
|
|
|
>>> charging_capacitor(source_voltage=2.2,resistance=3.5,capacitance=2.4,time_sec=9)
|
|
1.446
|
|
|
|
>>> charging_capacitor(source_voltage=15,resistance=200,capacitance=20,time_sec=2)
|
|
0.007
|
|
|
|
>>> charging_capacitor(20, 2000, 30*pow(10,-5), 4)
|
|
19.975
|
|
|
|
>>> charging_capacitor(source_voltage=0,resistance=10.0,capacitance=.30,time_sec=3)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Source voltage must be positive.
|
|
|
|
>>> charging_capacitor(source_voltage=20,resistance=-2000,capacitance=30,time_sec=4)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Resistance must be positive.
|
|
|
|
>>> charging_capacitor(source_voltage=30,resistance=1500,capacitance=0,time_sec=4)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Capacitance must be positive.
|
|
"""
|
|
|
|
if source_voltage <= 0:
|
|
raise ValueError("Source voltage must be positive.")
|
|
if resistance <= 0:
|
|
raise ValueError("Resistance must be positive.")
|
|
if capacitance <= 0:
|
|
raise ValueError("Capacitance must be positive.")
|
|
return round(source_voltage * (1 - exp(-time_sec / (resistance * capacitance))), 3)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import doctest
|
|
|
|
doctest.testmod()
|