计算实习报告如何写?( 七 )


2015.1.4
学号:13020130016
姓名: 刘

习题一:
1舍入误差及稳定性
一、实验目的
(1)通过上机编程 , 复习巩固以前所学程序设计语言及上机操作指令; (2)通过上机计算 , 了解舍入误差所引起的数值不稳定性
二、实验内容
?
21、用两种不同的顺序计算?n , 分析其误差的变化
n?110000
2、已知连分数f?b0?a1 , 利用下面的算法计算f:
b1?a2/?b2?a3/(...?an/bn)?ai?
1(i?n?1,n?2,..., 0f?d0 di?1写一程序 , 读入n,b0,b1,...,bn,a1,...,an,计算并打印f dn?bn,di?bi?
3、给出一个有效的算法和一个无效的算法计算积分
xnyn??dx
(n?0,1,..., 104x?1N11?311?
4、设SN??2 , 已知其精确值为????
2?2NN?1?j?2j?1(1)编制按从大到小的顺序计算SN的程序 1(2)编制按从小到大的顺序计算SN的程序
(3)按两种顺序分别计算S1000,S10000,S30000,并指出有效位数
三、实验步骤、程序设计、实验结果及分析
?
21、用两种不同的顺序计算?n , 分析其误差的变化
n?110000(1)实验步骤:
分别从1~10000和从10000~1两种顺序进行计算 , 应包含的头文件有stdio.h和math.h (2)程序设计: a.顺序计算
#include #include void main() {double sum=0;int n=1;while(1){
sum=sum+(1/pow(n,2));
if(n%1000==0) printf("sun[%d]=%-30f",n,sum);
if(n>=10000) break;
n++;}printf("sum[%d]=%f\\\\n",n,sum); } b.逆序计算
#include #include void main() {double sum=0;int n=10000;
while(n!=0){
sum=sum+(1/pow(n,2));
if(n%200==0)
printf("sum[%d]=%-10f",n,sum);
if(nn--;}printf("sum[%d]=%f\\\\n",n,sum); }
(3)实验结果及分析: 程序运行结果: a.顺序计算
b.逆序计算
结果分析:两种不同顺序计算结果是一样的 , 顺序计算误差从一开始就很小 , 而逆序计算误差最开始十分大 , 后来结果正确 。
2、已知连分数f?b0?(1)实验步骤: 利用 dn?bn,di?bi?a1 , 计算f:
b1?a2/?b2?a3/(...?an/bn)?ai?1,0
(i?n?1,n?2,... , f?d0 , 计算f
di?1(2)程序设计 #include #include void main() {int i=0,n;float a[100],b[100],c[100];printf("please input n=");scanf("%d",&n);
printf("\\\\nplease input a[0] to a[n-1]:\\\\n");for(i=1;iprintf("a[%d]=",i);
scanf("%f",&a[i]);}
printf("\\\\nplease input b[0] to b[n-1]:\\\\n");for(i=0;iprintf("b[%d]=",i);
scanf("%f",&b[i]);}
d[n]=b[n];for(i=n-1;i>=0;i--)
c[i]=b[i]+a[i+1]/c[i+1];printf("\\\\nf=%f\\\\n",c[0]); } (3)实验结果 程序运行结果:
3、给出一个有效的算法和一个无效的算法计算积分
【计算实习报告如何写?】