☠ 7. feladat

Kulcsszavas függvény változó számú argumentummal

Írjunk egy függvényt, amely egy adott x array-ben tárólt valós értékekre kiértékel egy tetszőleges polinomfüggvényt, vagy ábrázolja azt!

  • A polinom-együtthatókat egy tetszőleges hosszúságú args nevű váltózóban kapjuk.
  • Ha a kwargs kulcsszavas argumentumban a csinal_kepet kulcsszo True akkor ábrázoljuk a polinomot és ne térjünk vissza semmilyen értékkel, ellenkező esetben a függvény térjen vissza egy array változóval amely polinom értékeit tartalmazza az x válltozóban tárolt helyeken.
  • Az ábrázolás stilisztikai paramétereit a függvénynek adott egyéb kulcsszavas argumok segítségével állítsuk be!

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 [3]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

Ezután írjuk meg a függvényt! Amit mindenkképpen meg kell csinálni, hogy az adott x értékekhez kiszámoljuk az y értékeket. Ezt egy for-ciklussal tudjuk megtenni. Úgy vesszük, hogy a paraméterként kapott tömbben az i. érték az i hatvány együtthatója. Ezután a kwargs-t vizsgáljuk meg, hogy benne van-e a kérdéses kulcsszó:

In [41]:
def fuggveny(x,*args,**kwargs):
    "Kiértékelek vagy ábrázolok egy polynom-ot"
    y = zeros(len(x))                                          # Ebbe a tömbbe fogjuk beírni a függvényértékeket
    for i in range(0, len(args)):                              # Végig megyünk a tömb elemein, és kiszámítjuk a hozzájuk tartozó függvényértéket
        y += args[i]*(x**i)
    if "csinal_kepet" in kwargs and kwargs["csinal_kepet"]:    # Ha meg van adva a kérdéses paraméter, ábrázolja
        del kwargs["csinal_kepet"]
        plot(x, y, **kwargs)
    else:                                                      # Ha nincs, csak visszaadjuk eredményként
        return y

Ezután kipróbáljuk néhány próbafüggvénnyel.

In [44]:
fuggveny(arange(0,1,0.05), 1,0,1, csinal_kepet=True, color="green", marker="o")
In [45]:
fuggveny(arange(0,100,2), 1,2,3,4,5)
Out[45]:
array([  1.00000000e+00,   1.29000000e+02,   1.59300000e+03,
         7.46500000e+03,   2.27370000e+04,   5.43210000e+04,
         1.11049000e+05,   2.03673000e+05,   3.44865000e+05,
         5.49217000e+05,   8.33241000e+05,   1.21536900e+06,
         1.71595300e+06,   2.35726500e+06,   3.16349700e+06,
         4.16076100e+06,   5.37708900e+06,   6.84243300e+06,
         8.58866500e+06,   1.06495770e+07,   1.30608810e+07,
         1.58602090e+07,   1.90871130e+07,   2.27830650e+07,
         2.69914570e+07,   3.17576010e+07,   3.71287290e+07,
         4.31539930e+07,   4.98844650e+07,   5.73731370e+07,
         6.56749210e+07,   7.48466490e+07,   8.49470730e+07,
         9.60368650e+07,   1.08178617e+08,   1.21436841e+08,
         1.35877969e+08,   1.51570353e+08,   1.68584265e+08,
         1.86991897e+08,   2.06867361e+08,   2.28286689e+08,
         2.51327833e+08,   2.76070665e+08,   3.02596977e+08,
         3.30990481e+08,   3.61336809e+08,   3.93723513e+08,
         4.28240065e+08,   4.64977857e+08])