计算方法实验指导书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 #include #include main() {

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

相关文档
最新文档