【基础入门题】2021.11.21
求一元二次方程ax²+bx+c=0的根,设计二次方程求根函数root(a,b,c)
返回值:[x1]或[x1,x1]或[x1,x2],如是实数范围允许返回[]表示无实数根。
编程语言:包括但不限于Python
题目来源:派森特给站每日刷题频道
方法一:求根公式,有无理数根时计算为近似的浮点数。
def roots(a,b,c): assert(a!=0) delta = b**2-4*a*c if delta<0: return [] elif delta==0: return [-b/(2*a)] else: return [-(b-delta**0.5)/(2*a),-(b+delta**0.5)/(2*a)]
方法二:在复数范围内求根,python自带复数类型
def roots(a,b,c): assert(a!=0) delta = b**2-4*a*c return [-(b-delta**0.5)/(2*a),-(b+delta**0.5)/(2*a)] print( roots(1,-2,2) ) # 输出: [(1+1j), (0.9999999999999999-1j)] # j 为虚数单位 print( roots(1,-2,1) ) # 输出: [1.0, 1.0] # 表示两个相同实数根
方法三: 用sympy库求方程的根,可以保留无理数根,甚至是复数根。
def roots(a,b,c): assert(a!=0) import sympy x = sympy.symbols('x') return sympy.solve(a*x**2+b*x+c,x) >>> roots(1,2,1) [-1] >>> roots(1,2,-3) [-3, 1] >>> roots(1,-2,-1) [1 - sqrt(2), 1 + sqrt(2)] >>> roots(1,-2,2) [1 - I, 1 + I] >>> roots(1,-2,3) [1 - sqrt(2)*I, 1 + sqrt(2)*I] >>> # I 为虚数单位
欢迎加入csdn社区!https://bbs.csdn.net/forums/PythonTogetherhttps://bbs.csdn.net/forums/PythonTogether
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)