我正在尝试创建一个二次求解器,它会告诉我x的值。它完美地工作,直到其中一个答案是虚数。如何使程序不会每次都崩溃,并根据I给出正确的答案?
import math
print()
a = input("Coefficient of a: ")
a = float(a)
b = input("Coefficient of b: ")
b = float(b)
c = input("Coefficient of c: ")
c = float(c)
x_1 = (-b + math.sqrt(b ** 2 - (4 * a * c))) / 2 * a
x_2 = (-b - math.sqrt(b ** 2 - (4 * a * c))) / 2 * a
print()
print(f" X = {x_1} or {x_2}")
print()
您可以使用complex()
而不是float()
:
a = input("Coefficient of a: ")
a = complex(a)
b = input("Coefficient of b: ")
b = complex(b)
c = input("Coefficient of c: ")
c = complex(c)
x_1 = (-b + (b ** 2 - (4 * a * c))**0.5) / 2 * a
x_2 = (-b - (b ** 2 - (4 * a * c))**0.5) / 2 * a
print()
print(f" X = {x_1} or {x_2}")
print()
打印(例如(:
Coefficient of a: 3+2j
Coefficient of b: 1
Coefficient of c: -2-1j
X = (3.1748906833227015+8.198076043446118j) or (-6.174890683322701-10.198076043446118j)
检查b ** 2 - (4 * a * c)
的值。如果它是负的,你有想象的解决方案。
所以你的代码变成:
import math
print()
a = input("Coefficient of a: ")
a = float(a)
b = input("Coefficient of b: ")
b = float(b)
c = input("Coefficient of c: ")
c = float(c)
delta = b ** 2 - (4 * a * c)
if delta >= 0:
x_1 = (-b + math.sqrt(b ** 2 - (4 * a * c))) / 2 * a
x_2 = (-b - math.sqrt(b ** 2 - (4 * a * c))) / 2 * a
print()
print(f" X = {x_1} or {x_2}")
print()
else:
print("The 2 solutions are imaginary:")
real = -b
imag = abs(math.sqrt(-delta) / (2 * a))
print(f" X = {real} + i*{imag} or {real} - i*{imag}")
您可以使用sympy this:示例(二阶和三阶方程和…(
import sympy as sp
x = sp.Symbol("x")
print(sp.solve(x ** 4 - 1, x))
输出:
[-1, 1, -I, I]
pip安装症状:https://pypi.org/project/sympy/