1、 实验题目 1. Jacobi迭代法 用Jacobi迭代法求解线性方程组,保留四位有效数字(err=1e-4),其中A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]。 2.Gauss-Seidel迭代法 用Gauss-Seidel迭代法求解线性方程组,保留四位有效数字(err=1e-4),其中A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]。 3.分别用Jacobi迭代法和Gauss-Seidel迭代法求解方程组 要求精度,初始,最大迭代次数N=25,试比较这几种迭代法的迭代次数和收敛速度。 1.程序: #incl
2、ude 3、j++)
if(j!=i)
a[i][j]=a[i][j]/a[i][i];
a[i][i]=0;
}
printf("精度1e-4时,解x'[%d]=\n",n);
for(k=0;dx_max>1e-8;k++){
dx_max=0;
for(i=0;i 4、 ",x[k+1][i]);
dx[i]=x[k+1][i]-x[k][i];
dx_max+=pow(dx[i],2);
}
printf(" %d",k+1);
printf("\n");
} printf("\n");
}
程序结果:
精度1e-4时,解x'[3]=
0.1250 0.4000 -0.6000 1
0.2500 0.3150 -0.4950 2
0.2262 0.3005 -0.4870 3
0.2234 0.3061 -0.4947 5、 4
0.2251 0.3058 -0.4941 5
0.2250 0.3056 -0.4938 6
0.2249 0.3056 -0.4939 7
0.2249 0.3056 -0.4939 8
2.程序:
#include 6、]=0;
float a[3][3]={8,-1,1,2,10,-1,1,1,-5};
float b[3]={1,4,3};
for(i=0;i 7、
for(i=0;i 8、 x[k+1][i]=b[i]-t;
}
printf("%0.4f ",x[k+1][i]);
dx[i]=x[k+1][i]-x[k][i];
dx_max+=pow(dx[i],2);
}
printf("\n");
} printf("\n");
}
程序结果:
精度1e-4时,解x'[3]=
0.1250 0.3750 -0.5000
0.2344 0.3031 -0.4925
0.2245 0.3059 -0.4939
0.2250 0.305 9、6 -0.4939
0.2249 0.3056 -0.4939
3. Jacobi迭代法程序:
#include 10、 0 ,-1 ,0 ,-1, 4 ,-1,0 ,0 ,-1, 0, -1 ,4};
float b[6]={0 ,5 ,0 ,6 ,-2, 6};
for(i=0;i 11、{
dx_max=0;
for(i=0;i 12、rintf("\n");
}
程序结果:
a的对角变0处理后的(a[6][6],b[6])=
0.0000 -0.2500 0.0000 -0.2500 0.0000 0.0000 0.0000
-0.2500 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.2500
0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000
-0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 1.5000
0.0000 -0.2 13、500 0.0000 -0.2500 0.0000 -0.2500 -0.5000
0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.5000
精度1e-005时,解x'[6]=
0.0000 1.2500 0.0000 1.5000 -0.5000 1.5000 1
0.6875 1.1250 0.6875 1.3750 0.5625 1.3750 2
0.6250 1.7344 0.6250 1.8125 0.4688 1.8125 3
0.8867 14、 1.6797 0.8867 1.7734 0.8398 1.7734 4
0.8633 1.9033 0.8633 1.9316 0.8066 1.9316 5
0.9587 1.8833 0.9587 1.9175 0.9417 1.9175 6
0.9502 1.9648 0.9502 1.9751 0.9296 1.9751 7
0.9850 1.9575 0.9850 1.9699 0.9787 1.9699 8
0.9819 1.9872 0.9819 1.9909 15、0.9743 1.9909 9
0.9945 1.9845 0.9945 1.9890 0.9923 1.9890 10
0.9934 1.9953 0.9934 1.9967 0.9907 1.9967 11
0.9980 1.9944 0.9980 1.9960 0.9972 1.9960 12
0.9976 1.9983 0.9976 1.9988 0.9966 1.9988 13
0.9993 1.9979 0.9993 1.9985 0.9990 1.9985 1 16、4
0.9991 1.9994 0.9991 1.9996 0.9988 1.9996 15
0.9997 1.9993 0.9997 1.9995 0.9996 1.9995 16
0.9997 1.9998 0.9997 1.9998 0.9995 1.9998 17
0.9999 1.9997 0.9999 1.9998 0.9999 1.9998 18
0.9999 1.9999 0.9999 1.9999 0.9998 1.9999 19
1.0000 1.9999 1 17、0000 1.9999 1.0000 1.9999 20
1.0000 2.0000 1.0000 2.0000 0.9999 2.0000 21
1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 22
1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 23
1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 24
1.0000 2.0000 1.0000 2.0000 1.000 18、0 2.0000 25
Gauss-Seidel迭代法程序:
#include 19、1,0 ,0 ,-1, 0, -1 ,4};
float b[6]={0 ,5 ,0 ,6 ,-2, 6};
for(i=0;i 20、ax=0;
for(i=0;i 21、 x[k+1][i]=b[i]-t;
}
printf("%0.4f ",x[k+1][i]);
dx[i]=x[k+1][i]-x[k][i];
dx_max+=pow(dx[i],2);
}
printf(" %d\n",k+1);
} printf("\n");
}
程序结果:
a对角0化处理后的(a[6][6],b[6][1])=
0.0000 -0.2500 0.0000 -0.2500 0.0000 0.0000 0.0000
-0.2500 0 22、0000 -0.2500 0.0000 -0.2500 0.0000 1.2500
0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000
-0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 1.5000
0.0000 -0.2500 0.0000 -0.2500 0.0000 -0.2500 -0.5000
0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.5000
精度1e-005时,解x'[6]=
0.0000 1.2500 0.3125 23、 1.5000 0.1875 1.6250 1
0.6875 1.5469 0.7930 1.7188 0.7227 1.8789 2
0.8164 1.8330 0.9280 1.8848 0.8992 1.9568 3
0.9294 1.9391 0.9740 1.9572 0.9633 1.9843 4
0.9741 1.9778 0.9905 1.9843 0.9866 1.9943 5
0.9905 1.9919 0.9966 1.9943 0.9951 1.9979 24、 6
0.9966 1.9971 0.9987 1.9979 0.9982 1.9992 7
0.9987 1.9989 0.9995 1.9992 0.9994 1.9997 8
0.9995 1.9996 0.9998 1.9997 0.9998 1.9999 9
0.9998 1.9999 0.9999 1.9999 0.9999 2.0000 10
0.9999 1.9999 1.0000 2.0000 1.0000 2.0000 11
1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 12
1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 13
1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 14






