Python:计算二次方程的正根
我正在学习麻省理工学院的Python教程,其中一个练习有问题。演习是, 使用IPython提示符计算: 下列等式的正根:34x2+68x-510=0: 给定ax2+bx+c=0,那么x=(-b+sqrt(b*b-4ac))/(2*a) 我已经进去了 (-68)+(数学sqrt((68**2)-(4*34*510))) 在我的演讲中,我得到了 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 (-68)+(数学sqrt((68**2)-(434510))) ValueError:数学域错误 单独计算时,我发现平方根内的值为负值。我应该添加一些附加函数来启用负根计算,还是我的语句有其他问题 有人能帮我吗 注意:课程页面上的解决方案建议 (b**2-4ac) 在计算根之前为正值。这在数学上不是不准确吗?让Python:计算二次方程的正根,python,python-3.x,Python,Python 3.x,我正在学习麻省理工学院的Python教程,其中一个练习有问题。演习是, 使用IPython提示符计算: 下列等式的正根:34x2+68x-510=0: 给定ax2+bx+c=0,那么x=(-b+sqrt(b*b-4ac))/(2*a) 我已经进去了 (-68)+(数学sqrt((68**2)-(4*34*510))) 在我的演讲中,我得到了 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 (-68)+(数学sqrt((68**2)-(434510))) ValueError:数学域错误 单
f(x)=ax²+bx+c
。如果要在实数域中求解f(x)=0
,则需要注意定义为b²-4ac
的f
的判别式。如果后者是否定的,那么你就没有真正的解决方案了(你需要考虑代码< F>代码)作为一个复杂的多项式,这意味着你想在复数字段中找到<代码> f(x)=0 < /代码>的解决方案。p>
现在,对于你的问题,你似乎有一个符号问题。系数c
等于-510
,而不是510
。因此,68²-4*34*510
应该是68²-4*34*(-510)=68²+4*34*510
,如果f(x)=ax^2+bx+c,那么它的正根将是
(-b+sqrt(b^2-4ac))/2a
根据你的问题f(x)=34x^2+68x-510=0
所以+ve根将是=>(-68+sqrt(68^2-4*34*(-510))/(2*34)=3
在python中,代码如下-
from math import sqrt
print((-68 + sqrt(68**2 - 4*34*(-510)))/(2*34))
但你做错了的是,你把C的系数取为510
相反,它应该是(-510)。我也在上这门课。
这个问题来自“入门”,所以应该不难。
它应该与课程材料相关
因此,以下是我所拥有的:
IDLE 1.2.4
>>> import math
>>> a=34
>>> b=68
>>> c=-510
>>> d = ( -b + math.sqrt ( b*b - 4*a*c))/(2 * a)
>>> print d
3.0
我也在学同样的课程,我这样做了,得到了正确的答案。写出如下等式:
(-68+((68**2)-4*34*(-510))**0.5)/(2*34)
这将给出第一个解,只要将加号改为减号,就得到了第二个解,如下所示:
(-68-((68**2)-4*34*(-510))**0.5)/(2*34)
检查我所附的照片,这是解决方案的截图