In de wiskunde is een veelterm of polynoom in één variabele $$x$$ een uitdrukking van de vorm: \[a_0+a_1 x+ a_2x^2+\dots+a_n x^n\] waarbij $$n$$ een natuurlijk getal is en de getallen $$a_k$$ ($$k=0,\dots,n$$) de coëfficienten van de veelterm genoemd worden. Veeltermen vormen een belangrijke klasse van functies met veel toepassingen. Zij worden onder meer gebruikt als benadering voor meer ingewikkelde functies.

Opgave

Om een aantal zaken te vereenvoudigen, zullen we ons beperken tot veeltermen met enkel gehele coëfficienten. De opdracht bestaat erin een klasse Veelterm aan te maken. De klasse bevat volgende methoden:

  1. De initialisatiemethode __init__. De coëfficienten in de veelterm worden doorgegeven aan de constructor als een lijst. Index $$i$$ in de lijst representeert dan de coëfficient van de $$x^i$$ term in de veelterm. Eventuele nul-coëfficienten op het einde van de lijst moeten weggelaten worden en worden dus niet meeopgeslagen in het attribuut van de klasse.

  2. De methode __str__. Zorg dat je veelterm uitgeschreven wordt in de vorm zoals aangegeven in de voorbeelden hieronder. Dat is: termen met een nul als coëfficient worden weggelaten, coëfficienten die één zijn worden weggelaten, etc. Indien alle coëfficienten nul zijn, wordt 0 als veelterm uitgeschreven.

  3. De methode __repr__. Deze methode geeft een string-expressie terug die een object zou aanmaken met dezelfde waarde wanneer ze geëvalueerd zou worden.

  4. De methode __neg__ die de negatie van een veelterm implementeert.

    >>> p = Veelterm([1, -1])
    >>> print(-p) 
    - 1 + x

  5. De methode __add__ die toelaat twee veeltermen op te tellen.

  6. De methode __sub__ die toelaat twee veeltermen van elkaar af te trekken.

  7. De methode __mul__ die twee veeltermen vermenigvuldigt. Als \[p(x)=\sum_{i=0}^m c_ix^i\] en \[q(x)=\sum_{j=0}^n d_jx^j\] twee veeltermen zijn, dan is hun product \[\left(\sum_{i=0}^m c_ix^i\right)\left(\sum_{j=0}^n d_jx^j\right)=\sum_{i=0}^m\sum_{j=0}^nc_id_jx^{i+j}.\]

  8. De methode afgeleide die een nieuwe veelterm als resultaat teruggeeft, namelijk de afgeleide van de oorspronkelijke veelterm. De afgeleide van een veelterm \[\sum_{i=0}^n c_ix^i\] wordt gegeven door \[\sum_{i=1}^nic_ix^{i-1}.\]

Voorbeeld

>>> p = Veelterm([1, -1])
>>> print(p)
1 - x
>>> p
Veelterm([1, -1])
>>> q = Veelterm([0, 1, 0, 0, -6, -1])
>>> print(q)
x - 6 * x^4 - x^5
>>> q
Veelterm([0, 1, 0, 0, -6, -1])
>>> print(p + q)
1 - 6 * x^4 - x^5
>>> print(-p)
- 1 + x
>>> print(p - q)
1 - 2 * x + 6 * x^4 + x^5
>>> print(p * q)
x - x^2 - 6 * x^4 + 5 * x^5 + x^6
>>> print(q.afgeleide())
1 - 24 * x^3 - 5 * x^4
>>> Veelterm([1, -1, 0, 0, 0]) 
Veelterm([1, -1])
>>> w = Veelterm([0, 1, 0, 0, 5, -1])
>>> print(q - w) 
- 11 * x^4