数值计算方法实验5

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

运行结果:

相关文档
最新文档