计算方法实验(c语言_六项试验)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算方法实验报告

实验一 舍入误差与数值稳定性

目的与要求: 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 5

x 1

1

y

ln6- ln5 ≈ 0.182 322 算法 2 利用递推公式

5

15n 1y 1n -=

-y

n

n = 20,19,…,1

注意到

1051dx 51dx 5x dx 6112611

20

1

020

1

020x x x =≤+≤=⎰⎰⎰ 取

730 008.0)126

11051(201y

20

≈+≈

算法一:

#include #include #include #include"stdlib.h" void main(void) {

float y_0=log(6.0)-log(5.0),y_1; int n=1;

system("cls");/*清屏*/ 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();/*保持用户屏幕*/ }

算法二:

#include #include #include #include"stdlib.h"

main()

{

float y_0=(1/105.0+1/126.0)/2,y_1;

int n=20;

system("cls");/*清屏*/

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是稳定的。

计算方法实验报告

实验二 拉格朗日插值与牛顿插值

一、目的与要求:

熟悉拉格朗日插值多项式和牛顿插值多项式,注意其不同特点; 二、 实验内容:

通过拉格朗日插值和牛顿插值多项式的两个实例的计算,了解两种求解方法,分析他们的优缺点。 三、 程序与实例 算法

1.输入x i ,y i (i=0,1,2,⋯,n),令L(x n )=0; 2. 对=0,1,2,⋯,n 计算 l

l i (x)=

∏≠=--n

i

j i j

i

j

x x

x x 0

L n ← L n +l i (x)y i

程序与实例

例1 已知函数表

用三次拉格朗日多项式求x=0.5635的函数近似值。 拉格朗日插值: #include #include #include #include"stdlib.h"

float Lagrange(float *x,float *y,float xx,int n) {

int i,j;

float *a,yy=0.0;

a=(float *) malloc(n*sizeof(float));

for (i=0;i<=n-1;i++)

{

a[i]=y[i];

for (j=0;j<=n-1;j++)

if (j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);

yy+=a[i];

}

free(a);

return yy;

}

void main()

{

float x[4]={0.56160,0.56280,0.56401,0.56521}; float y[4]={0.82741,0.82659,0.82577,0.82495}; float xx=0.5635,yy;

float Lagrange(float *,float *,float,int);

yy=Lagrange(x,y,xx,4);

system("cls");/*清屏*/

printf("x=%f, y=%f\n",xx,yy);

getch();

}

运行结果:

X=0.563500,y=0.826116

牛顿插值多项式

算法

1.输入n,x

i ,y

i

(i=0,1,2⋯,n);

2.对k=1,2,3⋯,n, i=1,2, ⋯,k计算各阶差商f(x

0,x

1

⋯,x

k

);

3.计算函数值

N

n (x)=f(x

)+f[x

, x

1

](x- x

)+⋯+f[x

, x

1

,⋯,x

n

](x- x

)(x- x

1

)⋯(x-x

1-

n

)

程序与实例

例2已知函数表

相关文档
最新文档