为什么我的python代码解决了二次方程式呢?

时间:2015-03-29 13:52:05

标签: python math

所以我是编码python的新手,所以我决定尝试制作二次方程求解器。输入所有用户输入的变量后,我收到此错误:

Traceback (most recent call last):
  File "C:/Users/insertnamehere/Desktop/quadratic formula solver.py", line 6, in <module>
    root=math.sqrt((b**2)-4*a*c)
ValueError: math domain error

我的代码是:

import math

a=float(input("A?: "))
b=float(input("B?: "))
c=float(input("C?: "))
root=math.sqrt((b**2)-4*a*c)
x=(-b+root)/2*a
x2=(-b-root)/2*a
print(x)
print(x2)

任何帮助都会受到很多赞赏。

编辑: 忘了添加我输入的实际值。

A?: 6
B?: 1
C?: 2

2 个答案:

答案 0 :(得分:3)

Python可以处理复数,但math模块不会执行负数的平方根,因为您需要使用cmath

演示:

#!/usr/bin/env python

import cmath

a = 1.0
b = 1.0
c = 1.0

root = cmath.sqrt(b * b - 4.0 * a * c)
x1 = (-b + root) / (2.0 * a)
x2 = (-b - root) / (2.0 * a)
print x1
print x2

<强>输出

(-0.5+0.866025403784j)
(-0.5-0.866025403784j)

尽管i通常被数学家用作负数平方根的符号,但Python使用j;这种惯例在电子工程师中很常见,因为他们使用i来表示当前。

所以上面的输出等于(-1±sqrt(-3))/ 2

答案 1 :(得分:1)

这是一个基本的第9个毕业数学问题:

二次方程并不总是具有实值解,因为你不能取负数的平方根。您输入的二次方程的值很难在实数内求解。

编辑:你发布了你的价值观:

那么,(1 2 - 2 * 6 * 2)的平方根?你无法在实际数字中找到该问题的解决方案,也不能用python,这就是为什么它会给你一个数学域错误。

这样看:6x²+ x + 2 = 0真的没有真正的解决方案。提示:查看graph