MIT Python教程习题求助:计算二次方程正根遇math域错误
解决IPython中二次方程正根计算的报错问题
嘿,我来帮你搞定这个二次方程计算的问题!你遇到的ValueError: math domain error其实是个很常见的小失误导致的,咱们一步步理清楚:
问题根源
你输入的计算式里,判别式部分写错了符号!原方程是34x² + 68x - 510 = 0,对应二次方程标准形式ax² + bx + c = 0的话,c的值是-510,不是510。
你写的判别式是68**2 - 4*34*510,但正确的应该是68**2 - 4*34*(-510)——少了c前面的负号,导致根号里的结果变成了负数,而math.sqrt()函数不能处理负数,所以直接抛出了域错误。
正确的计算方法
首先确保你已经导入了math模块(IPython里如果没导入的话先执行import math),然后用正确的公式计算:
分步计算(更清晰)
import math # 定义方程系数 a = 34 b = 68 c = -510 # 计算判别式 discriminant = b**2 - 4 * a * c # 代入正根公式计算 positive_root = (-b + math.sqrt(discriminant)) / (2 * a) # 查看结果 positive_root
一行直接计算
import math (-68 + math.sqrt(68**2 - 4*34*(-510))) / (2*34)
运行后你会得到结果3.0,代入原方程验证:34*(3)^2 + 68*3 -510 = 306 + 204 -510 = 0,完全正确!
内容的提问来源于stack exchange,提问作者Shashank Venugopal Koppuravuri
相关产品推荐
相关产品推荐

