SHOW:
|
|
- or go back to the newest paste.
| 1 | import math | |
| 2 | def input_coef(): #ввод данных | |
| 3 | print("Введите коэффициенты:")
| |
| 4 | a=float(input("a="))
| |
| 5 | b=float(input("b="))
| |
| 6 | c=float(input("c="))
| |
| 7 | d=float(input("d="))
| |
| 8 | return a,b,c,d | |
| 9 | ||
| 10 | def check(coef): #проверка, что уравнение кубическое | |
| 11 | a=float(coef[0]) | |
| 12 | b=float(coef[1]) | |
| 13 | c=float(coef[2]) | |
| 14 | d=float(coef[3]) | |
| 15 | print ("Заданы коэффициенты:", a, b, c, d)
| |
| 16 | if abs(a) > 1e-6: | |
| 17 | return a, b, c, d | |
| 18 | else: | |
| 19 | return False | |
| 20 | ||
| 21 | def Cardano(a, b, c, d): #решение уравнения | |
| 22 | #if a == 0: | |
| 23 | # return 0 | |
| 24 | res = [] | |
| 25 | p = (3 * a * c - b * b) / 3 * a ** 2 | |
| 26 | q = (2 * math.pow(b, 3) - 9 * a * b * c + 27 * a * a * d) / 27 * math.pow(a, 3) | |
| 27 | D = (q / 2) ** 2 + (p / 3) ** 3 | |
| 28 | ||
| 29 | if D < 0: | |
| 30 | if q < 0: | |
| 31 | fi = math.arctg(math.sqrt(-D)) | |
| 32 | elif q > 0: | |
| 33 | fi = math.arctg(math.sqrt(-D)) + math.pi | |
| 34 | else: | |
| 35 | fi = math.pi / 2 | |
| 36 | y1 = 2 * math.sqrt(-p / 3) * math.cos(fi / 3) | |
| 37 | y2 = 2 * math.sqrt(-p / 3) * math.cos(fi / 3 + 2 * math.pi / 3) | |
| 38 | y3 = 2 * math.sqrt(-p / 3) * math.cos(fi / 3 + 4 * math.pi / 3) | |
| 39 | res.append(y1 - b / 3 * a) | |
| 40 | res.append(y2 - b / 3 * a) | |
| 41 | res.append(y3 - b / 3 * a) | |
| 42 | ||
| 43 | return res | |
| 44 | ||
| 45 | ||
| 46 | - | coef = input_coef() |
| 46 | + | k1,k2,k3,k4 = input_coef() |
| 47 | check = check(coef) | |
| 48 | if check != False: | |
| 49 | - | roots = Cardano(input_coef) |
| 49 | + | roots = Cardano(k1,k2,k3,k4) |
| 50 | print("решение уравнения:", res)
| |
| 51 | else: | |
| 52 | print("Уравнение не кубическое")
| |
| 53 |