数值计算方法实验5
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
学院(系)名称:
主程序部分列选主元部分
实验结果:
一.列主元消去法
输入各个数据,最终使用列选主元法,得到结果为:x1=x2=x3=1二.高斯-赛德尔迭代法
输入各个数据,输出每一步迭代数据,最终结果为:x1=0.285716,附录(源程序及运行结果)
一.列主元高斯消去法
#include
#include
void print(double a[3][3],int n,double b[3]){
printf("输出矩阵:\n");
for(int i=0;i for(int j=0;j printf("%lf ",a[i][j]); printf("%lf",b[i]); printf("\n"); } } void liezhuyuan(double a[3][3],double b[3],int k,int n){ double d,t; int l=k,i=k+1; d=a[k][k]; while(i!=n){ if(fabs(a[i][k])>fabs(d)){ d=a[i][k]; l=i; } i++; } printf("选出主元:%lf\n",d); if(d==0) printf("矩阵奇异!\n"); else if(l!=k){ for(int j=k;j t=a[l][j]; a[l][j]=a[k][j]; a[k][j]=t; } t=b[l]; b[l]=b[k]; b[k]=t; } } void main(){ double a[3][3]={2,1,1,1,3,2,1,2,2}, b[3]={4,6,5}; int k=0,i,j,n=3; print(a,n,b); while(k!=n-1){ liezhuyuan(a,b,k,n); for(i=k+1;i a[i][k]=a[i][k]/a[k][k]; for(i=k+1;i for(j=k+1;j a[i][j]=a[i][j]-a[i][k]*a[k][j]; b[i]=b[i]-a[i][k]*b[k]; } k++; } b[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i>=0;i--){ for(j=i+1;j b[i]=b[i]-a[i][j]*b[j]; b[i]=b[i]/a[i][i]; } printf("输出结果:"); for(i=0;i printf("x%d=%lf ",i+1,b[i]); printf("\n"); } 运行结果: 二.高斯-塞德尔迭代法 #include #include void main(){ double a[3][3]={4,-2,-4,-2,17,10,4,10,9}, b[3]={10,3,-7},x[3]={0,0,0},t,s,e,e0=0.000005; int n=3,i; do{ e=0; i=0; do{ t=x[i]; s=0; for(int j=0;j if(j!=i) s=s+a[i][j]*x[j]; x[i]=(b[i]-s)/a[i][i]; if(fabs(x[i]-t>e)) e=fabs(x[i]-t); i++; }while(i!=n); for(i=0;i printf("%lf ",x[i]); printf("\n"); }while(e>e0); } 运行结果: