1.实验目的
正确理解方程求根划界法和开放法,能够编程实现其中指定的方法,并且通过比较,分析出两类方法的优缺点。
2.实验任务

3.相关知识
二分法理论:
首先应确定方程在[a,b]区间存在至少一个实数根。由高等数学知识可知,设 f(x)为区间[a,b]上的单值连续,如果 f(a)·f(b)<0,则[a,b]中至少有一个实根。如果f(x)在[a,b]上还是单调地递增或递减,则仅有一个实根.设方程 f(x)=0 在区间[a,b]内有根,二分法就是逐步收缩有根区间,最后得出所求的根。具体过程如下:
①取有根区间[a,b]的中点,将它分为两半,即 x0=(a+b)/2,这样就可以将有根区间缩小。
②对压缩了的有根区间[a1,b1]施行同样的手法,即取中点 x1=(a1+b1)/2,将区间[a1,b1]再次分成两半,然后再确定有根区间[a2,b2],其长度是[a1,b1]的二分之一。
牛顿法理论:
具体过程:

4.实验流程图
二分法:

牛顿迭代法:

5.实验源代码
二分法:
def func(x):
return x*x*x-2*x-5
a = 2 #下限
b = 3 #上限
fa = func(a)
fb = func(b)
eps = 10e-7
num = 0
while a <= b:
num += 1
x0 = (a+b)/2
fx0 = func(x0)
if abs(fx0) < eps:
print(x0, '是用二分法求解方程的根')
print('迭代次数为', num)
break
if fa * fx0 < 0:
b = x0
fb = fx0
elif fb * fx0 < 0:
a = x0
fa = fx0
牛顿迭代法:
def f(x):
return x**3-2*x-5
def df(x):
return 3*x*x-2
def phi(x):
return x-f(x)/df(x)
eps = 10e-7
N = 5000 #迭代上限
x1 = 2 #下限
x2 = 3 #上限
x0 = (x1 + x2) / 2 # 取初值
i = 0 #迭代次数
while abs((f(x0)-0)) > eps and i < N:
i += 1
x1 = phi(x0)
x0 = x1
if i == N:
print('迭代次数超出了上限')
break
print(x1, i)
6.实验结果
二分法:

牛顿迭代法:
![]()
7.总结
二分法是通过不断缩小解存在的范围从而求得最优解,通过二分计算在电脑上的演示更一部了解了二分法的特点:用对分区间的办法根据分点处函数 f(x)值的符号逐步将有根区间缩小,使在足够小的区间内,方程有且仅有一个根。二分法收敛速度较慢,在编程过程中,要注意对条件的判断做出准确分析、准确把握中断条件。
牛顿迭代法是著名的方程求根方法,即利用函数的一阶和二阶导数的信息以迭代的方式求解方程的根,适用于函数的一阶和二阶导数均存在的情况下。牛顿法形式相较简单且具有较快的收敛速度,比二分法所用迭代次数少,非常适合解非线性问题。

183

被折叠的 条评论
为什么被折叠?



