Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import cmath
- def input_coef(): #ввод данных
- print("Введите коэффициенты:")
- a=float(input("a="))
- b=float(input("b="))
- c=float(input("c="))
- d=float(input("d="))
- return a,b,c,d
- def check(coef): #проверка, что уравнение кубическое
- a=float(coef[0])
- b=float(coef[1])
- c=float(coef[2])
- d=float(coef[3])
- print ("Заданы коэффициенты:", a, b, c, d)
- if abs(a) > 1e-6:
- return a, b, c, d
- else:
- return False
- def Vieta(coef): #решение уравнения
- print("Решение кубического уравнения Ax^3 + Bx^2 + Cx + D = 0")
- print("Тригонометрической формулой Виета")
- k_a = a
- k_b = b
- k_c = c
- k_d = d
- a = k_b / k_a
- b = k_c / k_a
- c = k_d / k_a
- q = (a**2 - 3 * b) / 9
- r = (2 * a**3 - 9 * a * b + 27 * c) / 54
- s = q**3 - r**2
- if s > 0:
- from math import acos, cos, sqrt, pi
- f = (1 / 3) * acos(r / sqrt(q**3))
- x1 = -2 * sqrt(q) * cos(f) - (a / 3)
- x2 = -2 * sqrt(q) * cos(f + (2 / 3) * pi) - (a / 3)
- x3 = -2 * sqrt(q) * cos(f - (2 / 3) * pi) - (a / 3)
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- elif s < 0:
- if q > 0:
- from cmath import acosh, cosh, sinh, sqrt
- f = (1 / 3) * acosh((abs(r)) / (sqrt(q**3)))
- if r > 0:
- x1 = -2 * sqrt(q) * cosh(f) - (a / 3)
- x2 = sqrt(q) * cosh(f) - (a / 3) + 1j * sqrt(3) * sqrt(q) * sinh(f)
- x3 = sqrt(q) * cosh(f) + (a / 3) + 1j * sqrt(3) * sqrt(q) * sinh(f)
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- elif r == 0:
- x1 = -a / 3
- x2 = (-a / 3) - 1j * sqrt(3) * sqrt(q) * sinh(f)
- x3 = (-a / 3) + 1j * sqrt(3) * sqrt(q) * sinh(f)
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- else:
- x1 = 2 * sqrt(q) * cosh(f) - a / 3
- x2 = -1 * sqrt(q) * cosh(f) - a / 3 + 1j * sqrt(3) * sqrt(q) * sinh(f)
- x3 = -1 * sqrt(q) * cosh(f) - a / 3 - 1j * sqrt(3) * sqrt(q) * sinh(f)
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- elif q < 0:
- from cmath import asinh, cosh, sinh, sqrt
- f = (1 / 3) * asinh(abs(r) / sqrt(q**3))
- if r > 0:
- x1 = -2 * sqrt(abs(q)) * sinh(f) - a / 3
- x2 = sqrt(abs(q)) * sinh(f) - a / 3 + 1j * sqrt(3) * sqrt(abs(q)) * cosh(f)
- x3 = sqrt(abs(q)) * sinh(f) - a / 3 - 1j * sqrt(3) * sqrt(abs(q)) * cosh(f)
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- elif r == 0:
- x1 = -a / 3
- x2 = -a / 3 + 1j * sqrt(3) * sqrt(abs(q)) * cosh(f)
- x3 = -a / 3 - 1j * sqrt(3) * sqrt(abs(q)) * cosh(f)
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- else:
- x1 = 2 * sqrt(abs(q)) * sinh(f) - a / 3
- x2 = -1 * sqrt(abs(q)) * sinh(f) - a / 3 + 1j * sqrt(3) * cosh(f)
- x3 = -1 * sqrt(abs(q)) * sinh(f) + a / 3 + 1j * sqrt(3) * cosh(f)
- print("Q: = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- else:
- from cmath import sqrt
- x1 = -((c - (a * 3) / 27))**(1 / 3) - a / 3
- x2 = (-a + x1) / 2 + 1j / 2 * sqrt(abs((a - 3 * x1) * (a + x1) - 4 * b))
- x3 = x2 = (-a + x1) / 2 - 1j / 2 * sqrt(abs((a - 3 * x1) * (a + x1) - 4 * b))
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- print("x3 = ", x3)
- else:
- x1 = -2 * (r)**(1 / 3) - a / 3
- x2 = (r)**(1 / 3) - a / 3
- print("Q = ", q)
- print("R = ", r)
- print("S = ", s)
- print("fi = ", f)
- print("x1 = ", x1)
- print("x2 = ", x2)
- return x1, x2, x3
- coef = input_coef()
- check = check(coef)
- if check != False:
- roots = Vieta(coef)
- else:
- print("Уравнение не кубическое")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement