资源描述
数值分析实验报告(一)
实验名称
用牛顿迭代法求解非线性方程
实验时间
2011年 11 月 19日
姓名
班级
学号
成绩
一、实验目的
1.了解求解非线性方程的解的常见方法。
2.编写牛顿迭代法程序求解非线性方程。
二、实验内容
分别用初值,和求,要求精度为。
三、实验原理
设,则,记f(x)= ,问题便成为了求 -113=0的正根;
用牛顿迭代公式得,即 (其中=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
代入前面求到的最终式中:
Xk+1 = Xk - (Xk2 - n)/2Xk
化简即得到我们最初提到求平方根的迭代公式:
四、实验步骤
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
实验结果分析:
取不同的初值得到同样的结果
用牛顿迭代法求解非线性方程是一种逐次逼近法,迭代过程的实质上是一个逐步显示化的过程。但迭代法的效果并不是总令人满意,有些隐式方程的迭代过程事发散的,一个发散的迭代过程,计算也比较复杂,但它的收敛速度比较快。
4
展开阅读全文