| | |
| | | .idea/ |
| | | __pycache__/ |
| | | .coverage |
| | | htmlcov/ |
| | | |
| | |
| | | class Polynomial: |
| | | def __init__(self, *argv: float): |
| | | if len(argv) < 1: |
| | | raise ValueError("A Polynomial has at least one coefficient.") |
| | | if argv[-1] == 0: |
| | | raise ValueError("The coefficient at the highest degree must not be zero.") |
| | | self.__coefficients = tuple(argv) |
| | | |
| | | self.__order = len(argv) |
| | | |
| | | def evaluate(self, x: float) -> tuple[float, list[float]]: |
| | | p = self.__coefficients[-1] |
| | |
| | | c.insert(0, p) |
| | | return c[0], c[1:] |
| | | |
| | | def order(self): |
| | | return self.__order |
| | | |
| | | def __add__(self, other: "Polynomial") -> "Polynomial": |
| | | if not isinstance(other, Polynomial): |
| | | raise ValueError("Operator + is only applicable for Polynomial.") |
| | | coefficients = [] |
| | | if self.__order > other.__order: |
| | | low_order = other.__order |
| | | heigh_order = self.__order |
| | | higher_coefficients = self.__coefficients |
| | | else: |
| | | low_order = self.__order |
| | | heigh_order = other.__order |
| | | higher_coefficients = other.__coefficients |
| | | |
| | | for i in range(0, low_order): |
| | | coefficients.append(self.__coefficients[i] + other.__coefficients[i]) |
| | | for j in range(i+1, heigh_order): |
| | | coefficients.append(higher_coefficients[j]) |
| | | return Polynomial(*coefficients) |
| | | |
| | | def __getitem__(self, key): |
| | | return self.__coefficients[key] |
| | | |
| | | |
| | | def __repr__(self) -> str: |
| | | coe = [] |
| | | for c in self.__coefficients: |
| | | coe.append(f'{c}') |
| | | return ' '.join(coe) |
| | | |
| | | |
| | |
| | | s = str(c) |
| | | print(r, s, c) |
| | | |
| | | |
| | | def test_evaluate(): |
| | | l = Polynomial(-12.5, 3.6) |
| | | x = 0.0 |
| | | (y, rest) = l.evaluate(x) |
| | | assert abs(y + 12.5) < EPSILON |
| | | |
| | | |
| | | def test_evaluate_2(): |
| | | l = Polynomial(11, 7, -5, -4, 2) |
| | | x = 2 |
| | |
| | | assert abs(y - y_expected) < EPSILON |
| | | for (i, r) in enumerate( q_expected ): |
| | | assert abs(r - q[i]) < EPSILON |
| | | print(Polynomial(*q)) |
| | | |
| | | |
| | | def test_polynomial_add(): |
| | | p = Polynomial(-3, 4.5, 6) # ~$p(x) = -3 + 4.5x + 6x^2$~ |
| | | q = Polynomial( 1, 0, 3, -4) # ~$q(x) = 1 + 3x^2 - 4x^3$~ |
| | | s = p + q # ~$s(x) = -2 + 4.5x + 9x^2 - 4x^3$~ |
| | | expected = [-2, 4.5, 9, -4] |
| | | for (i, ec) in enumerate( expected ): |
| | | pc = s[i] |
| | | assert abs(pc - ec) < EPSILON |
| | | |
| | | def test_polynomial_add_2(): |
| | | p = Polynomial(1, 0, 3, -4) # ~$q(x) = 1 + 3x^2 - 4x^3$~ |
| | | q = Polynomial(-3, 4.5, 6) # ~$p(x) = -3 + 4.5x + 6x^2$~ |
| | | s = p + q # ~$s(x) = -2 + 4.5x + 9x^2 - 4x^3$~ |
| | | expected = [-2, 4.5, 9, -4] |
| | | for (i, ec) in enumerate( expected ): |
| | | pc = s[i] |
| | | assert abs(pc - ec) < EPSILON |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | #test_evaluate_2() |
| | | test_polynomial_representation() |
| | | test_polynomial_add() |