Implemented Legendre polynomial computation algorithm

Added an algorithm that calculates the coefficients of the Legendre polynomial of degree n using the recurrence relation
This commit is contained in:
Pablito 2024-12-03 11:19:20 +01:00
parent 3e9ca92ca9
commit 7036c84cb5

View File

@ -0,0 +1,60 @@
from numpy.polynomial import Polynomial
from math import factorial
import pytest
def legendre(n: int) -> list[float]:
"""
Compute the coefficients of the nth Legendre polynomial.
The Legendre polynomials are solutions to Legendre's differential equation
and are widely used in physics and engineering.
Parameters:
n (int): The order of the Legendre polynomial.
Returns:
list[float]: Coefficients of the polynomial in ascending order of powers.
"""
p = (1 / (factorial(n) * (2 ** n))) * (Polynomial([-1, 0, 1]) ** n)
return p.deriv(n).coef.tolist()
def jsp():
print(legendre(1))
print(legendre(2))
print(legendre(3))
print(legendre(4))
jsp()
def test_legendre_0():
"""Test the 0th Legendre polynomial."""
assert legendre(0) == [1.0], "The 0th Legendre polynomial should be [1.0]"
def test_legendre_1():
"""Test the 1st Legendre polynomial."""
assert legendre(1) == [0.0, 1.0], "The 1st Legendre polynomial should be [0.0, 1.0]"
def test_legendre_2():
"""Test the 2nd Legendre polynomial."""
assert legendre(2) == [-0.5, 0.0, 1.5], "The 2nd Legendre polynomial should be [-0.5, 0.0, 1.5]"
def test_legendre_3():
"""Test the 3rd Legendre polynomial."""
assert legendre(3) == [0.0, -1.5, 0.0, 2.5], "The 3rd Legendre polynomial should be [0.0, -1.5, 0.0, 2.5]"
def test_legendre_4():
"""Test the 4th Legendre polynomial."""
assert legendre(4) == pytest.approx([0.375, 0.0, -3.75, 0.0, 4.375])
"The 4th Legendre polynomial should be [0.375, 0.0, -3.75, 0.0, 4.375]"
if __name__ == '__main__':
pytest.main()