如何在python中正确求解二次函数中的虚数

  • 本文关键字:二次 函数 python python-3.x
  • 更新时间 :
  • 英文 :


我正在尝试创建一个二次求解器,它会告诉我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/

最新更新