5. Feladat

öröklés

A második feladatban definiált polinomosztályból származtassunk egy alosztályt, mely rendelkezik egy új metódussal.

Az új metódus

  • egy bemenő x_0 változóval rendelkezzen, mely egy valós szám,
  • a metódus ellenőrizze le, hogy x_0 gyöke-e a polinomnak,
  • a metódus térjen vissza True értékkel, ha x_0 gyöke a polinomnak,
  • ha x_0 nem gyök, akkor a metódus térjen vissza False értékkel, és írja ki a polinom értékét az x_0 helyen.
  • azt, hogy x_0 gyök vagy nem, azt egy tol tolerancia osztályváltozó alapján döntsük el, ami egy kicsi pozitív szám, azaz ha f(x_0)<tol, akkor fogadjuk el x_0-t gyöknek.

Megoldás

Mivel ebben a feladatban a pylab több funkcióját használni fogjuk, először ezt töltsük be!

In [1]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

Ezután bemásoljuk a 2_feladatban elkészített polinom osztályt:

In [2]:
class polinom:
    '''Ez egy polinom osztály'''
    
    def __init__(self, *args):               # Inicializációkor értéket ad a változóknak
        self.egyutthato = array(args)
        self.fok_szam = len(args)
        
    def kiszamol(self, *args):
        '''A paraméterül kapott tömb elemeihez hozzárendel értékeket'''
        eredmeny = zeros(len(args))          # A később visszaadandó eredmény-tömböt létrehozzuk
        for i in range(0, self.fok_szam):    # Majd az együtthatókon végigmenve, kiszámoljuk a függvényértékeket
            eredmeny += self.egyutthato[i]*(array(args)**i)
        return eredmeny                      # És végül a függvény visszaadja az eredményt
    
    def mutasd_meg(self):
        '''A [-1, 1] intervallumon ábrázolja a polinomot'''
        x = linspace(-1, 1, 100)
        plot(x, self.kiszamol(*x), 'r-', lw=3)

Majd megírjuk a kívánt alosztályt, ami már tartalmazza az új metódust is:

In [3]:
class alpolinom(polinom):
    '''Ez a polinom osztály alosztálya'''
    tol = 0.01                                    # A tolerancia osztályváltozó
    
    def ujmetodus(self, x_0):
        if abs(self.kiszamol(x_0)) < self.tol:    # Ha a polinom értéke megfelelő, a visszatérési érték True
            return True
        else:                                     # Ha nem, akkor kiírjuk, és a visszatérési érték False
            print(self.kiszamol(x_0)[0])
            return False

És végül, egy egy teszt polinommal kipróbáljuk a helyes működést:

In [4]:
teszt = alpolinom(1,2,2,2)
In [5]:
teszt.ujmetodus(-0.643)
Out[5]:
True
In [6]:
teszt.ujmetodus(5.0)
311.0
Out[6]:
False