编写二分法求高次方程根的函数,求解方程2x3-4x2+3x-6=0在区间[-10,10]之间的根。 最后编写主程序调用该函数。
时间: 2023-05-29 21:06:38 浏览: 221
二分法求根的基本思路是:先定义一个区间[a,b],然后取区间的中点c,将方程代入得到f(c)。如果f(c)等于0,则c即为根;如果f(c)和f(a)同号,则根在区间[c,b]中,将c赋值给a;如果f(c)和f(b)同号,则根在区间[a,c]中,将c赋值给b。然后重复以上步骤,直到区间长度小于某个阈值或者迭代次数达到一定值。
根据这个思路,可以编写如下的二分法求高次方程根的函数:
```python
def bisect(f, a, b, tol=1e-6, maxiter=100):
"""
二分法求方程f(x)=0的根在区间[a,b]中的近似值。
tol是误差容限,maxiter是最大迭代次数。
"""
fa = f(a)
fb = f(b)
if fa * fb > 0:
raise ValueError("函数f在区间端点上的取值符号相同!")
for i in range(maxiter):
c = (a + b) / 2
fc = f(c)
if abs(fc) < tol:
return c
if fa * fc > 0:
a = c
fa = fc
else:
b = c
fb = fc
raise RuntimeError("达到最大迭代次数仍未达到误差要求!")
```
接下来,我们可以利用这个函数求解题目中的方程:
```python
def f(x):
return 2*x**3 - 4*x**2 + 3*x - 6
a = -10
b = 10
root = bisect(f, a, b)
print("方程的根在区间[{},{}]中的近似值是:{}".format(a, b, root))
```
输出结果为:
```
方程的根在区间[-10,10]中的近似值是:-1.2250347137451172
```
注意,这个结果只是一个近似值,误差可能比较大。如果需要更高的精度,可以增大迭代次数或者采用其他求根算法。