武汉理工大学数值分析实验报告
武汉理工大学数值分析实验报告
————软件工程试点班, 桂江亨
实验一:用牛顿法求解函数的根
1. 实验分析与设计
用计算机编程实现牛顿迭代法求解函数的根。
2. 实验基本原理与设计
牛顿迭代法公式:
{ 0=C(C为固定的 值) +1= – ( ) '( )牛顿迭代法是收敛的,而且收敛比较快。
由上面的公式可知,只要给出的精度e,就可以作为递归终止的条件。
3. 主要仪器及耗材
Visual Studio 2010,电脑一台。
4. 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 由于采用递归方法,程序显得清晰简洁。起初我输入X的值为1.0,结果输出一个无效的值,后来才发现原来函数在1.0处的导数刚好等于零。之后分别输入了几组不同的初始值X和控制精度e,结果分别如下:
X = 1.1, e = 0.0001, result = 1.53209
X = 1.2, e = 0.0001, result = 1.53209
X = 1.3, e = 0.0001, result = 1.53209
X = 1.532, e = 0.0001, result = 1.53209
X = 1.1 e = 0.000001, result = 1.53209
X = 1.2 e = 0.000001, result = 1.53209
X = 1.2 e = 0.000001, result = 1.53209
下面是源代码: #include<iostream>
using namespace std;
double fn( double x )
{ return x * x * x - 3 * x + 1; }
double derivedFn( double x )
{ return 3 * x * x - 3; }
double recursionFn( double x )
{ return x - fn( x ) / derivedFn( x ); }
int main()
{
double x, x1, e;
武汉理工大学数值分析实验报告
} cout<<"请输入初始值:x,控制精度:e"<<endl; cin>>x>>e; x1 = recursionFn( x ); while( fabs( x - x1 ) > e ) { x = x1; x1 = recursionFn( x ); } cout<<"方程的近似解为"<<x1<<endl; getchar(); getchar(); return 0;
5. 实验结果及分析
本次试验比较简单,编码的时候并没有产生错误。牛顿法求解函数的根确实具有很好的收敛性,在几组不同的初值和控制精度下都得到了比较精确的计算结果。
6. 实验小结、建议及体会
本次试验用计算机编程实现了牛顿法求解函数的根,得到了比较好的结果。
实验二:二分法求函数的近似根
1. 实验内容描述(问题描述)
通过计算机编程实现二分法求解函数的根,加深对二分法的理解。
2. 实验基本原理与设计
给定一个区间[a, b],在该区间内函数存在唯一一个根,通过取[a, b]的中点,来不断缩小根的求解范围,直到到达合理的精度。
要通过二分将连续的区间分成很小的片段需要多次分割,因此二分法求解收敛较慢,一般用于求根的粗略解(范围)。
3. 主要仪器及耗材
Visual Studio 2010,电脑一台。
4. 调试过程
二分法的思维比较简单,编程过程中还是犯了一个比较小的错误。终止条件没有选好,忘记取绝对值,导致程序一直运行没有终止。
下面是源代码:
#include<iostream>
using namespace std;
double fn( double x )
{ return x * x * x - 3 * x + 1; }
int main()
{
double a, b, e, x, t;
武汉理工大学数值分析实验报告
cout<<"请输入求根区间[a, b],控制精度e"<<endl;
cin>>a>>b>>e;
x = ( a + b ) / 2;
t = fn( x );
while( fabs( t ) > e )
{
if( t > 0 )
b = x;
else
a = x;
x = ( a + b ) / 2;
t = fn( x );
}
cout<<"牛顿迭代法求得的近似解为:"<<x<<endl;
getchar(); getchar();
return 0;
}
5. 实验结果及分析
通过输入一组数据来检验该算法的正确性,下面是输入的数据:
1.0 2.0 0.0001 1.5321
二分法能够很好的求得函数的近似解,而且思路简单,便于实现,但收敛速度慢(这一点可以从上一个实验的结果看出,牛顿迭代法比二分法得到的解的精度更高)。
实验三:自适应积分
1. 实验内容描述(问题域描述)
在很多情况下需要对某个函数求积分,但其原函数过于复杂很难甚至根本无法直接求得,则只能通过计算机来分段近似积分了。
这次试验将通过计算机编程来实现自适应积分球函数的积分。
2. 实验原理与设计(包括实验方案设计,实验手段的确定,实验步骤等,用硬件逻辑或算法描述)
自适应积分是通过将一个区间等分成两段,分别用三次的辛普森公式近似求得积分。如果某一段积分误差足够小则停止积分,否则的话,将该段区间等分成两段再次积分,直到误差满足精度为止。
在这个递归的过程中,误差是很重要的量。有时候函数在某一区间很平稳而在另一区间变化幅度很大。变化平稳的区间只要几次分段积分就可以满足精度要求,而变化幅度很大的区间需要逐次分段积分知道满足精度要求。
3. 主要耗材及仪器
Visual Studio 2010, 电脑一台
4. 调试过程
本次试验编码过程中并没有遇到什么困单,调试时也没有发现什么问题,一次性成功。
武汉理工大学数值分析实验报告…… 此处隐藏:3468字,全部文档内容请下载后查看。喜欢就下载吧 ……