编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代区间为 [1, 3]。的实验总结和体会
时间: 2024-02-15 22:03:18 浏览: 99
二分法和牛顿迭代法求解方程
好的,我来回答你的问题。
首先,我们来看二分法的实现。
二分法的思路很简单,就是不断缩小一个区间,直到区间足够小,我们认为找到了一个解。具体实现如下:
```python
import math
def f(x):
return x**3 - 3*x - 1
def bisection(a, b, eps):
"""
a, b: 初始区间
eps: 精度
"""
while (b - a) > eps:
c = (a + b) / 2
if f(c) == 0:
return c
elif f(a) * f(c) < 0:
b = c
else:
a = c
return (a + b) / 2
# 测试
result = bisection(1, 3, 1e-7)
print(f"二分法的近似解为:{result:.7f}")
print(f"理论值为:{2 * math.cos(20 * math.pi / 180):.7f}")
```
输出结果为:
```
二分法的近似解为:1.8793852
理论值为:1.8793852
```
可以看到,二分法得到的近似解和理论值非常接近,精度也达到了小数点后七位。
接下来,我们来看牛顿迭代法的实现。
牛顿迭代法的思路是:在当前的近似解x0处,利用函数f的一阶泰勒展开式,得到一个更好的近似解x1。具体实现如下:
```python
def f(x):
return x**3 - 3*x - 1
def df(x):
return 3*x**2 - 3
def newton(x0, eps):
"""
x0: 初始近似解
eps: 精度
"""
while abs(f(x0)) > eps:
x0 = x0 - f(x0)/df(x0)
return x0
# 测试
result = newton(2, 1e-7)
print(f"牛顿迭代法的近似解为:{result:.7f}")
print(f"理论值为:{2 * math.cos(20 * math.pi / 180):.7f}")
```
输出结果为:
```
牛顿迭代法的近似解为:1.8793852
理论值为:1.8793852
```
可以看到,牛顿迭代法得到的近似解和理论值也非常接近,精度达到了小数点后七位。
总结:
二分法和牛顿迭代法都是求解非线性方程的常用方法,二分法的优点是简单易懂,但收敛速度较慢;牛顿迭代法的优点是收敛速度快,但需要求解函数的导数,有时比较困难。在实际应用中,我们需要根据具体情况选择合适的方法。
阅读全文