用牛顿迭代法求解非线性方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告(一)
实验
名称
用牛顿迭代法求解非线性方程实验时间2011年11 月19日姓名班级学号成绩
一、实验目的
1.了解求解非线性方程的解的常见方法。
2.编写牛顿迭代法程序求解非线性方程。
二、实验内容
分别用初值
0.01
x=,
10
x=和
300
x=求113,要求精度为5
10-。
三、实验原理
设113
x=,则21130
x-=,记f(x)= 2113
x-,问题便成为了求2x -113=0的正根;
用牛顿迭代公式得
2
1
113
2
k k
k
k
x
x x x
+
-
=-,即
1
1113
()
2
k k
k
x x x
+
=+(其中k=0,1,2,3,…,)
简单推导
假设f(x)是关于X的函数:
求出f(x)的一阶导,即斜率:
简化等式得到:
然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值。
如果f函数在闭区间[a,b]内连续,必存在一点x使得f(x) = c,c是函数f在闭区间[a,b]内的一点
我们先猜测一X初始值,然后代入初始值,通过迭代运算不断推进,逐步靠近精确值,直到得到我们主观认为比较满意的值为止。
回到我们最开始的那个”莫名其妙”的公式,我们要求的是N的平方根,令x2 = n,假设一关
于X的函数f(x)为:
f(X) = X2 - n
求f(X)的一阶导为:
f'(X) = 2X
代入前面求到的最终式中:
X k+1 = X
k
- (X
k
2 - n)/2X
k
化简即得到我们最初提到求平方根的迭代公式:
四、实验步骤
1.根据实验题目,给出题目的C程序。
当初值为0.01、10、300时,即x=0.01,10,300
分别应用程序:
#include "stdio.h"
int main()
{ float number;
printf("Please input the number:");
scanf("%f", &number);
float x=1;
int i;
for (i=0;i<1000;i++)
{
x = (x + number/x)/2;
}
printf("The square root of %f is %8.5f\n", number ,x);
}
得出结果
2.上机输入和调试自己所编的程序。
当x=0.01时,结果为:10.63015
x=10时,结果为:10.63015
x=300时,结果也为:10.63015
3.实验结果分析。
当初值取0.01、10、300时取不同的初值得到同样的结果10.63015。
五、程序
#include "stdio.h"
int main()
{float number;
printf("Please input the number:");
scanf("%f", &number);
float x=1;
int i;
for (i=0;i<1000;i++)
{
x = (x + number/x)/2;
}
printf("The square root of %f is %8.5f\n", number ,x);
}
六、实验结果及分析
实验结果:
当x=0.01时,结果为:10.63015
x=10时,结果为:10.63015
x=300时,结果也为:10.63015
实验结果分析:
取不同的初值得到同样的结果
用牛顿迭代法求解非线性方程是一种逐次逼近法,迭代过程的实质上是一个逐步显示化的过程。但迭代法的效果并不是总令人满意,有些隐式方程的迭代过程事发散的,一个发散的迭代过程,计算也比较复杂,但它的收敛速度比较快。