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

xnyn??dx
(n?0,1,..., 104x?11(1)实验步骤
利用C语言编写程序 , 分别使用数值稳定的和数值不稳定的计算公式所建立的递推公式进行计算 。
(2)程序设计 #include #include main() {double y_0=(1/4.0)*log(5),y_1;double y_2=(1.0/55.0+1.0/11.0)/2,y_3;int n=1,m=10;printf("有效算法输出结果:\\\\n");printf("y[0]=%-20f",y_0);while(1){
y_1=1.0/(4*n)+y_0/(-4.0);
printf("y[%d]=%-20f",n,y_1);
if(n>=10)break;
y_0=y_1;
n++;
if(n%3==0) printf("\\\\n");}printf("\\\\n无效算法的输出结果:\\\\n");printf("y[10]=%-20f",y_2);while(1){
y_3=1.0/n-4.0*y_2;
printf("y[%d]=%-20f",m-1,y_3);
if(m y_2=y_3;
m--;
if(m%2==0) printf("\\\\n");} } (3)实验结果及分析 程序运行结果:
结果分析:无效算法数值不稳定 , 误差造成的影响特别大
4、设SN?
?j?2N11?311? , 已知其精确值为????
2?2NN?1?j2?1(1)实验步骤
先编程按从大到小的顺序计算SN的程序 , 再编程按从小到大的顺序计算SN的程序 , 然后按两种顺序分别计算S1000,S10000,S30000 。(2)程序设计 #include main() {
int N;double SN[30000];SN[30000]=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0;
for(N=30000;N>=2;N--)
SN[N-1]=SN[N]-1.0/(N*N-1);printf("从大到小顺序计算\\\\nSN[1000]=%f\\\\nSN[10000]=%f\\\\nSN[30000]=%f\\\\n",SN[1000],SN[10000],SN[30000]);
SN[2]=(3.0/2-1.0/2.0-1/3.0)/2.0;for(N=3;NSN[N]=SN[N-1]+1.0/(N*N-1);printf("从小到大顺序计算\\\\nSN[1000]=%f\\\\nSN[10000]=%f\\\\nSN[30000]=%f\\\\n",SN[1000],SN[10000],SN[30000]); } (3)实验结果及分析 程序运行结果:


结果分析:不同顺序计算所得结果是一样的 。
四、总结
通过这次上机 , 学习了解了舍入误差在不同算法时对结果的影响不同 , 稳定的算法才能获得正确的结果 。
习题二:
一、实验目的
(1)通过对二分法与牛顿迭代法做编程练习和上机运算 , 进一步体会二分法和牛顿法的不同 。
(2)编写割线迭代法的程序 , 求非线性方程的解 , 并与牛顿迭代法作比较 。
二、实验内容
1、用牛顿法求下列方程的根 (1)x?e?0
(2)xe?1?0 (3)lgx?x?2?0
2、编写割线法程序求解第一问的方程
三、实验步骤、程序设计、实验结果及分析
1、牛顿法 (1)实验步骤
通过定义牛顿法求方程的子函数 , 用main函数调用子函数求根 (2)程序设计 #include#includetypedef float (*p)(float );
float ff1(float x) {
return x*x-exp(x); } x2xfloat ff2(float x) {
return x*exp(x)-1; } float ff3(float x) {
return log(x)+x-2; } float
answer(float(*p)(float)) {
int k=2;
float m=1,n=-1,x2,a,b,c;