实验四非线性方程求根

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》课程设计实验报告

实验四 非线性方程求根

一、问题提出

设方程3()310f x x x =--=有三个实根**1

21.8793,0.34727,x x ==- *3 1.53209x =-现采用下面六种不同计算格式,求 f(x)=0的根*1x 或*2x 1、 231x x x

+= 2、 313

x x -=

3、 x =

4、 213

x x =-

5、 x =

6、 32131()31

x x x x x --=-- 二、实验步骤

#include "stdio.h"

#include

main()

{

float x0=1.8793;

printf("初值是%f\n",x0);/*输出x0*/

float x1,x2,x3;

x1=x0;

int i;

for(i=1;i<21;i++)

{

x2=(3*x1+1)/(x1*x1);//第一种迭代方式 //x2=(x1*x1*x1-1)/3;//第二种迭代方式

//x2=pow(3*x1+1,1.0/3);//第三种迭代方式

//x2=1/(x1*x1-3);//第四种迭代方式

//x2=sqrt(3+1/x1);//第五种迭代方式

//x2=x1-(1/3.0)*((x1*x1*x1-3*x1-1)/(x1*x1-1));//第六种迭代方式

x3=x2-x1;

printf("第%d 次迭代值为%f,相邻两次迭代值差值为%f\n",i,x2,x3);/*输出x2*/

x1=x2;

if(x3<0)

x3=-x3;

if(x3<0.000001)//误差精度

break;

} } 当迭代格式为231x x x +=时,实验结果为

由相邻两次迭代值差值结果可知,迭代过程处于发散状态。

当迭代格式为313

x x -=,实验结果为

由相邻两次迭代值差值结果可知,迭代过程前8次处于发散状态,第8次之后处于收敛状态,并且经过16次迭代,得到非线性方程的一个根。 当迭代格式为331x x =+,实验结果为

由相邻两次迭代值差值结果可知,迭代过程为收敛的,经过5次迭代后,得到非线性方程的一个根。

当迭代格式为213

x x =-,实验结果为

由相邻两次迭代值差值结果可知,迭代过程前4次处于发散状态,第4次之后处于收敛状态,并且经过11次迭代,得到非线性方程的一个根。

当迭代格式为13x x

=+,实验结果为

由相邻两次迭代值差值结果可知,迭代过程为收敛的,经过3次迭代后,得

到非线性方程的一个根。

当迭代格式为

3

2

131

()

31

x x

x x

x

--

=-

-

,实验结果为

由相邻两次迭代值差值结果可知,迭代过程为收敛的,经过2次迭代后,得到非线性方程的一个根。

三、实验结论

本实验通过不动点迭代法,完成非线性方程根值求解。

对于f(x),如果其迭代式满足不动点存在的两个条件,则在其要求的区间内存在不动点,那么对于其所要求的区间上的所有点此迭代式都收敛。即此时初值的选取对于迭代收敛没有影响。初值的不同对于迭代式的敛散性和收敛阶没有影响,只是对于达到所要求误差的达到次数有一定的影响。

分析迭代收敛和发散的原因如图所示:

收敛情况发散情况

相关文档
最新文档