# --------------- D > 0 ------------------------------------------------# if D > 0: # Liczę pierwiastki sześcienne z danych liczb. # Uwaga: Nie używać cmath ani m**(1/3) do liczenie pierwiastków 3-go stopnia, # bo dla liczb ujemnych wynikiem pierwiastek główny zespolony, # a nie pierwiastek sześcienny dla liczb rzeczywistych! u = np.cbrt(-q / 2 + D**0.5) # cbrt - poprawnie liczy pierwiastek sześcienny v = np.cbrt(-q / 2 - D**0.5) # z liczb ujemnych

y0 = u + v y1 = -(u + v)/2 + (u-v) * 3**0.5/2 * 1j y2 = -(u + v)/2 - (u-v) * 3**0.5/2 * 1j roots_x = [y0 - s, y1 - s, y2 -s] INFO="Przypadek Delta > 0 - jeden pierwiastek rzeczywisty, dwa zespolone"

# --------------- D = 0 ------------------------------------------------# elif D == 0: u = np.cbrt(q / 2) # pierwiastek sześcienny roots_x = [u - s, u - s, -2*u - s] if q == 0: INFO="Przypadek Delta = 0, q = 0 - pierwiastek potrójny rzeczywisty" else: INFO="Przypadek Delta = 0 - pierwiastki rzeczywiste: podwójny i pojedynczy" # --------------- D < 0 ------------------------------------------------# else: r = (-p/3)**0.5 theta = cmath.acos(3*q / (2*p*r)) y0 = 2*r *cmath.cos(theta/3) y1 = 2*r *cmath.cos((theta + 2*cmath.pi)/3) y2 = 2*r *cmath.cos((theta + 4*cmath.pi)/3) roots_x = [y0 - s, y1 - s, y2 -s] INFO="Przypadek Delta < 0 - trzy różne pierwiastki