f(x)= 2. 815e-006; k=17;
由f(x)知结果满足要求,但迭代次数还是比较多。
3. 用Newton法求解下列方程 a) x0=0.5; 计算结果为
x= 0. 78; f(x)= 2. 313e-016; k=4;
由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快。
b) x0=1;
c) x0=0.45, x0=0.65;
当x0=0.45时,计算结果为
x= 0. 83;
f(x)= -8. 584e-014; k=4;
由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快,实际上该方程确实有真解x=0.5。
当x0=0.65时,计算结果为
x= 0. 00;
f(x)=0; k=9;
由f(x)知结果满足要求,实际上该方程确实有真解x=0.5,但迭代次数增多,实际上当取x0〉0.68时,x≈1,就变成了方程的另一个解,这说明Newton法收敛与初值很有关系,有的时候甚至可能不收敛。
4. 用改进的Newton法求解,有2重根,取 x0=0.55;并与3.中的c)比较结果。
当x0=0.55时,程序死循环,无法计算,也就是说不收敛。改时,
结果收敛为
x=0. 86; f(x)=4. 127e-007; k=16;
显然这个结果不是很好,而且也不是收敛至方程的2重根上。
当x0=0.85时,结果收敛为
x= 1. 89; f(x)= 2. 737e-023; k=4;
这次达到了预期的结果,这说明初值的选取很重要,直接关系到方法的收敛性,实际上直接用Newton法,在给定同样的条件和精度要求下,可得其迭代次数k=15,这说明改进后的Newton法法速度确实比
较快。 结论:
对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,二且总体上来说速度比较慢。Newton法,收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果。改进的Newton法求解重根问题时,如果初值不当,可能会不收敛,这一点非常重要,当然初值合适,相同情况下其速度要比Newton法快得多。
实验报告二
题目: Gauss列主元消去法
摘要:求解线性方程组的方法很多,主要分为直接法和间接法。本实验运用直接法的Guass消去法,并采用选主元的方法对方程组进行求解。
前言:(目的和意义)
1. 学习Gauss消去法的原理。 2. 了解列主元的意义。
3. 确定什么时候系数阵要选主元 数学原理:
由于一般线性方程在使用Gauss消去法求解时,从求解的过程中可以看到,若=0,则必须进行行交换,才能使消去过程进行下去。有的时候即使0,但是其绝对值非常小,由于机器舍入误差的影响,消去过程也会出现不稳定得现象,导致结果不正确。因此有必要进行列主元技术,以最大可能的消除这种现象。这一技术要寻找行r,使得 并将第r行和第k行的元素进行交换,以使得当前的的数值比0要大的多。这种列主元的消去法的主要步骤如下: 1. 消元过程
对k=1,2,…,n-1,进行如下步骤。
1) 选主元,记
若很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对。
2) 交换增广阵A的r,k两行的元素。
(j=k,…,n+1)
3) 计算消元
(i=k+1,…,n; j=k+1,……,n+1)
2. 回代过程
对k= n, n-1,…,1,进行如下计算 至此,完成了整个方程组的求解。 程序设计:
本实验采用Matlab的M文件编写。 Gauss消去法源程序:
clear
a=input('输入系数阵:>>\\n') b=input('输入列阵b:>>\\n') n=length(b); A=[a b] x=zeros(n,1); %%%函数主体