用python求解一元二次方程组

本文介绍了一种使用Python实现的二次方程求解方法。通过引入math包进行数学运算,定义了一个Result类来存储和返回两个解。文章详细展示了如何根据判别式的不同情况(小于0、等于0或大于0)计算并返回方程的根。

1 引入math包
2 定义返回的对象
3 判断b*b-4ac的大小
4 计算代码如下

import math
class Result:
    result1 = 0
    result2 = 0

    def __init__(self, r1, r2):
        self.result1 = r1
        self.result2 = r2

    def __return__(self):

        return Result(self.result1, self.result2)

def main(a, b, c):
    num = b*b-4*a*c
    if num < 0:
        return 'no result'
    elif num == 0:
        return Result((-b+math.sqrt(b*b-4*a*c))/2*a, (-b+math.sqrt(b*b-4*a*c))/2*a)
    else:
        return Result((-b+math.sqrt(b*b-4*a*c))/2*a, (-b-math.sqrt(b*b-4*a*c))/2*a)

if __name__ == '__main__':
   result = main(1, 2, 1)
   print result.result1, result.result2
### Python 实现求解一元二次方程的方法 #### 方法概述 一元二次方程的标准形式为 \( ax^2 + bx + c = 0 \),其中 \( a \neq 0 \)。通过判别式 \( D = b^2 - 4ac \) 的值来判断根的情况: - 当 \( D > 0 \),有两个不同的实数根; - 当 \( D = 0 \),有一个重根; - 当 \( D < 0 \),无实数根。 以下是具体的实现代码: ```python import math def solve_quadratic(a, b, c): """ 解一元二次方程 ax^2 + bx + c = 0 :param a: 方程系数a (a != 0) :param b: 方程系数b :param c: 方程常数项c :return: 返回两个根或者提示无解的信息 """ discriminant = b ** 2 - 4 * a * c # 计算判别式 if discriminant > 0: root1 = (-b + math.sqrt(discriminant)) / (2 * a) root2 = (-b - math.sqrt(discriminant)) / (2 * a) return root1, root2 elif discriminant == 0: root = -b / (2 * a) return root, else: return "No real roots" if __name__ == "__main__": a, b, c = 1, 2, 1 # 输入参数 result = solve_quadratic(a, b, c) print(result) ``` 上述代码实现了基本的一元二次方程求解逻辑[^1],并能够处理三种不同情况的结果输出[^2]。 --- #### 使用类封装解决方案 为了提高可读性和扩展性,可以通过定义一个 `Result` 类来存储和返回结果: ```python class QuadraticEquationResult: def __init__(self, root1=None, root2=None, message=""): self.root1 = root1 self.root2 = root2 self.message = message def display(self): if self.message: return self.message elif self.root1 is not None and self.root2 is not None: return f"Roots are {self.root1} and {self.root2}" else: return f"One root exists: {self.root1}" def quadratic_equation_solver(a, b, c): discriminant = b ** 2 - 4 * a * c if discriminant > 0: root1 = (-b + math.sqrt(discriminant)) / (2 * a) root2 = (-b - math.sqrt(discriminant)) / (2 * a) return QuadraticEquationResult(root1=root1, root2=root2) elif discriminant == 0: root = -b / (2 * a) return QuadraticEquationResult(root1=root) else: return QuadraticEquationResult(message="No real roots") if __name__ == "__main__": solver_result = quadratic_equation_solver(1, 2, 1) print(solver_result.display()) ``` 此版本提供了更清晰的结构化数据表示方式。 --- #### 数学库的应用 除了手动编写求解逻辑外,还可以借助第三方科学计算库如 SymPy 来简化过程: ```python from sympy import symbols, Eq, solveset, S x = symbols('x') equation = Eq(x**2 + 2*x + 1, 0) solution_set = solveset(equation, x, domain=S.Reals) print(solution_set) ``` SymPy 提供了强大的符号计算功能,适用于更加复杂的代数问题[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值