Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions electronics/potential_energy_two_charges.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""Reference: https://en.wikipedia.org/wiki/Electric_potential_energy"""

from __future__ import annotations

k_e = 8.99 * (10**9) # N·m²/C², Coulomb's constant


def potential_energy_2_charges(
charge_1: float,
charge_2: float,
distance: float,
) -> float:
"""
Calculate the potential energy due to two charges.

Parameters:
- charge_1 (float): The charge in Coulombs.
- charge_2 (float): The charge in Coulombs.
- distance (float): The distance between the charges in meters.

Returns:
- float: The potential energy.

Raises:
- ValueError: If distance is less than zero.

Examples:
>>> potential_energy_2_charges(1e-6, 1e-6, 0.01)
0.899
>>> potential_energy_2_charges(2e-6, 3e-6, 0.05)
1.0788
>>> potential_energy_2_charges(0, 3e-6, 0.05)
0
>>> potential_energy_2_charges(2e-6, 3e-6, 0)
inf
>>> potential_energy_2_charges(2e-6, 3e-6, -0.05)
Traceback (most recent call last):
...
ValueError: Distance must be greater than zero.
"""
if charge_1 == 0 or charge_2 == 0:
return 0
if distance <= 0:
if distance == 0:
return float("inf")
raise ValueError("Distance must be greater than zero.")

potential_energy = k_e * charge_1 * charge_2 / distance
return round(potential_energy, 6) # Round for precision


if __name__ == "__main__":
import doctest

doctest.testmod()