4. feladat

Függvények - II.

Írj egy függvényt, ami a $$ ax^2+bx+c=0 $$ másodfokú egyenlet (valós és komplex) gyökeit határozza meg. Csak akkor kapjunk eredményként komplex számot, ha a diszkrimináns negatív!

Példaként add meg a következő négy egyenlet megoldását:

  1. $x^2=100$
  2. $3x^2-25x=10$
  3. $-4x^2+4x=1$
  4. $25x^2+16x=-100$

Megoldás

Mivel a pylab csomag több funkcióját is használni fogjuk, először ezt töltjük be:

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

A masodfoku függvényben először a diszkriminánst számítjuk ki, és attól függően megyünk tovább, hogy ez pozitív, vagy negatív-e. Ha a diszkrimináns negatív, akkor $x_1$ és $x_2$ értékét egyszerűen a másodfokú egyenlet megoldóképletével kiszámítjuk. Ha viszont negatív, akkor a megoldás komplex, így komplex típusú változót kell létrehozni.

In [2]:
def masodfoku(a,b,c):
    D = b**2 - 4*a*c                          # A diszkrimináns kiszámítása
    if D >= 0:                                # Ha D pozitív, a megoldóképletet alkalmazzuk
        x1 = (-b + sqrt(D))/(2*a)
        x2 = (-b - sqrt(D))/(2*a)
    else:                                     # Ha D negatív, akkor a gyökvonás eredménye képzetes lesz, így eszerint kell létrehozni egy komplex számot
        x1 = (complex(-b,sqrt(-D)))/(2*a)
        x2 = (complex(-b,-sqrt(-D)))/(2*a)
    return x1, x2

Végül nézzük a példafeladatokat:

In [3]:
masodfoku(1,0,-100) # 1. feladat
Out[3]:
(10.0, -10.0)
In [4]:
masodfoku(3,-25,-10) # 2. feladat
Out[4]:
(8.7157813546520604, -0.38244802131872707)
In [5]:
masodfoku(-4,4,-1) # 3. feladat
Out[5]:
(0.5, 0.5)
In [6]:
masodfoku(25,16,100)
Out[6]:
((-0.32+1.9742340286804907j), (-0.32-1.9742340286804907j))