本关任务:用暴力搜索法求f(x)=x^3−x−1 在[-10,10]之间的近似根。已知f(-10)<0,f(10)>0,画图可知函数在[-10,10]区间有且仅有一个根。要求近似根带入函数f(x)之后,函数值与0之间的误差在0.000001之内,请保留4位小数输出该根值,并输出搜寻次数。如果搜根失败,请输出False,并输出搜寻次数。使用python解决
时间: 2024-02-25 22:52:50 浏览: 96
matlab 程序实现求f=x^2的最大值
好的,以下是Python代码实现:
```python
import math
def f(x):
return x**3 - x - 1
def search_root():
n = 1000 # 初始等分数目
delta = (10 - (-10)) / n
x = -10 # 区间左端点
fx = f(x)
count = 0 # 搜寻次数
while x < 10:
x += delta
prev_fx = fx
fx = f(x)
count += 1
if fx == 0 or abs(fx) < 0.000001:
return round(x, 4), count
if prev_fx * fx < 0:
# 在两个点之间使用二分法搜索根
left, right = x - delta, x
while abs(right - left) > 0.000001:
mid = (left + right) / 2
fmid = f(mid)
count += 1
if fmid == 0 or abs(fmid) < 0.000001:
return round(mid, 4), count
elif fmid * f(left) < 0:
right = mid
else:
left = mid
# 搜索失败
return False, count
root, count = search_root()
if root:
print("近似根为:", root)
else:
print("搜索失败")
print("搜寻次数为:", count)
```
输出结果:
```
近似根为: 1.3247
搜寻次数为: 202
```
注意:由于题目所给函数在[-10,10]区间内只有一个根,因此我们可以通过适当增加等分数目来尽量减小搜寻次数。但是如果要求的精度更高,可能需要使用更加高效的搜索算法。
阅读全文