计算方法实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1、实验目的 (2)
2、实验要求 (2)
3、实验环境 (2)
4、实验一 (3)
5、实验二 (5)
6、实验三 (6)
7、实验四 (7)
8、实验考核 (9)
实验目的
计算方法上机实习与理论讲授平行,主要是为了让学生在学习各种算法后,能及时将所学的方法在计算机上编程练习,更进一步理解算法的特点。计算方法是一门理论和实践很强的课程。学生学习这门课程一方面需要掌握各种数值算法原理,还要根据实际需要编出更好的程序。这包括两方面的涵义:第一,提高程序本身内在质量,即在算法稳定性好、收敛速度快、误差控制好的前提下,尽量节省内存,减少计算步骤,节约机时。第二,尽量使程序简单,使用方便,适用性强,可读性好。
实验要求
每次上机实验后需提交实验报告一份,主要内容为:
(1)实验名称(2)实验目的(3)算法描述(4)源程序(5)输出结果(6)对算法的理解和改进
实验环境
编程环境:在Tubo C2.0下实现
实验学时数
20学时
实验一
舍入误差与数值稳定性(2学时)
目的与要求:
1、通过上机编程,复习巩固以前所学程序设计语言;
2、通过上机计算,了解舍入误差所引起的数值不稳定性。
3、通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。
实验内容:
●通过正反两个实例的计算,了解利用计算机进行数
值计算中舍入误差所引起的数值不稳定性,深入理解
初始小的舍入误差可能造成误差积累从而对计算结果
的巨大影响。
●通过实际编程,了解运算次序对计算结果的影响,
了解实数运算符合的结合律和分配律在计算机里不一
定成立。
概要
舍入误差在计算方法中是一个很重要的概念。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取稳定的算法,在实际计算中是十分重要的。
程序与实例
例 1 对n = 0,1,2,…,20 计算定积分
y
n
= dx 5x 1
n
x
⎰+
算法 1 利用递推公式
y
n = n
1
- 5y
1n - n = 1,2,…,20
取 =+=⎰dx 5x 1
1
0y ln6- ln5 ≈ 0.182 322 算法 2 利用递推公式 5
1
5n 1y
1
n -=
-y
n
n = 20,19,…,1
注意到
1051dx 51dx 5x dx 6112611
020
1
20
1
020x x x =≤+≤=⎰⎰⎰ 取
730 008.0)126
11051(201y
20
≈+≈
算法1的程序和输出结果如下: /*数值不稳定算法*/
#include
float y_0=log(6.0)-log(5.0),y_1; int n=1;
clrscr(); /*清屏*/ printf(“y[0]=%-20f ”,y_0);
while(1)
{
y_1=1.0/n-5*y_0;
printf(“y[%d]=%-20f”,n,y_1);/*输出*/
if(n>=20)break;
y_0=y_1;
n++;
if(n%3==0)printf(“\n”);
}
getch();/*保持用户屏幕*/
}
算法2的程序和输出结果如下:
/*稳定算法*/
#include
#include
#include
main()
{
float y_0=(1/105.0+1/126.0)/2,y_1;
int n=20;
clrscr();
printf(“y[20]=%-20f”,y_0);
while(1)
{
y_1=1/(5.0*n)-y_0/5.0;
printf(“y[%d]=%-20f”,n-1,y_1);
if(n<=1)break;
y_0=y_1;
n--;
if(n%3==0)printf(“\n”);
}
getch();
}
说明:从计算结果可以看出,算法1是不稳定的,而算法2是稳定的。
实验二
方程求根(2学时)
目的与要求:
1、通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;
2、比较二者的计算速度和计算精度。
2.1二分法
算法
给定区间[a,b],并设与符号相反,取为根的容许误差。
(1)令c=(a+b)/2
(2)如果f(c)=0,则输出,结束;否则执行(3),
(3)如果,则令;否则则令,重复(1),(2),(3)。
程序与实例
#include
#include
#include
#define EPS 5e-6
#define DELTA 1e-6