编写子函数用求根公式求解一元二次方程 ax^2+bx+c=0(设b^2-4ac≥0)。主程序调用子函数求解方程x^2+3x-2=0与x^2-10^20·x+10^20=0. 观察计算结果的精度,若误差较大,则分析原因、改进算法。
时间: 2024-12-23 08:23:04 浏览: 7
编写子函数用求根公式解决一元二次方程的过程通常涉及以下步骤:
1. **定义子函数**:首先,你可以创建一个名为`solve_quadratic_equation`的子函数,它接受三个参数a, b, 和c,分别代表二次方程的一般形式ax^2 + bx + c = 0。
```python
def solve_quadratic_equation(a, b, c):
# 计算判别式delta
delta = (b ** 2) - (4 * a * c)
if delta >= 0:
# 根据求根公式计算两个实数根
x1 = (-b + math.sqrt(delta)) / (2 * a)
x2 = (-b - math.sqrt(delta)) / (2 * a)
return x1, x2
else:
# 如果判别式小于0,说明有两个复数根
real_part = -b / (2 * a)
imaginary_part = math.sqrt(-delta) / (2 * a)
return complex(real_part, imaginary_part), complex(real_part, -imaginary_part)
```
2. **主程序调用**:接着,在主程序中,你需要提供两个具体的方程实例,如x^2 + 3x - 2 = 0 和 x^2 - 10^20 * x + 10^20 = 0,然后分别调用子函数。
```python
# 方程1
a1, b1, c1 = 1, 3, -2
solution1 = solve_quadratic_equation(a1, b1, c1)
# 方程2
a2, b2, c2 = 1, -10**20, 10**20
solution2 = solve_quadratic_equation(a2, b2, c2)
# 输出结果,并检查精度
print(f"方程 {a1}x^2 + {b1}x + {c1} 的解是 {solution1}")
print(f"方程 {a2}x^2 + {b2}x + {c2} 的解是 {solution2}")
```
3. **精度检查**:为了确认计算结果的精度,可以比较实际解与近似解,例如,如果使用浮点数运算,可能会有舍入误差。对于高精度大数值,可以使用`decimal`模块代替`math`,因为它提供了更高精度的数学运算。如果发现误差较大,可能是由于浮点数运算的特性导致,此时可以考虑使用更精确的库或调整算法。
阅读全文