#from turtle import Turtle import turtle 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 = [p] for ak in self.__coefficients[-2::-1]: p = ak + (p * x) 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) def plot_polynomial(t:turtle.Turtle, p:Polynomial, width=500, height=500): x_value = [] y_value = [] n = 9 delta = 2 * width / (n-1) x0 = -width for i in range(0, n): y0 = p.evaluate(x0)[0] x_value.append(x0) y_value.append(y0) print(x0, y0) x0 = x0 + delta y_min = min(y_value) y_max = max(y_value) m = height - (2*height)/(y_max - y_min) * y_max w = lambda y : 2*height/(y_max - y_min) * y + m for i in range(0, n): x = x_value[i] y = y_value[i] y = w(y) print(x,y) t.goto(x,y) pass