Gauss-Seidel迭代法求解线性方程组Word下载.docx
《Gauss-Seidel迭代法求解线性方程组Word下载.docx》由会员分享,可在线阅读,更多相关《Gauss-Seidel迭代法求解线性方程组Word下载.docx(6页珍藏版)》请在冰豆网上搜索。
其迭代格式为
(初始向量),
或者
三.程序框图
开始
读入数据,初始向量,增广矩阵
k=N?
输出迭代失败标志
结束
输出
四.结果显示
TestBench
利用Gauss-Seidel迭代法求解下列方程组
,其中取。
运行程序
依次输入:
1.方阵维数
2.增广矩阵系数
3.初始向量
得到:
迭代12次后算出
x[1]=-4.0
x[2]=3.0
x[3]=2.0
五.程序
#include <
stdio.h>
stdlib.h>
conio.h>
math.h>
#define MAX_n 100
#definePRECISION 0.0000001
#defineMAX_Number 1000
voidVectorInput(floatx[],intn)//输入初始向量
{
inti;
for(i=1;
i<
=n;
++i)
{
printf("
x[%d]="
i);
scanf("
%f"
&
x[i]);
}
}
voidMatrixInput(floatA[][MAX_n],intm,intn)//输入增广矩阵
inti,j;
printf("
\n输入系数矩阵:
\n"
);
=m;
增广矩阵行数%d:
"
for(j=1;
j<
++j)
scanf("
A[i][j]);
voidVectorOutput(floatx[],intn)//输出向量
\nx[%d]=%f"
i,x[i]);
intIsSatisfyPricision(floatx1[],floatx2[],intn)//判断是否在规定精度内
if(fabs(x1[i]-x2[i])>
PRECISION)return1;
return0;
intJacobi_(floatA[][MAX_n],floatx[],intn)//具体计算
floatx_former[MAX_n];
inti,j,k;
\n初始向量x0:
VectorInput(x,n);
k=0;
do{
for(i=1;
{
printf("
x_former[i]=x[i];
}
x[i]=A[i][n+1];
for(j=1;
if(j!
=i)x[i]-=A[i][j]*x[j];
if(fabs(A[i][i])>
PRECISION)
x[i]/=A[i][i];
else
return1;
++k;
}while(IsSatisfyPricision(x,x_former,n)&
&
k<
MAX_Number);
if(k>
=MAX_Number)
return1;
else
\nGauss-Seidel迭代次数为%d次"
k);
return0;
intmain()//主函数
intn;
floatA[MAX_n][MAX_n],x[MAX_n];
\n方阵维数n="
scanf("
%d"
n);
if(n>
=MAX_n-1)
\n\007nmust<
%d!
"
MAX_n);
exit(0);
MatrixInput(A,n,n+1);
if(Jacobi_(A,x,n))
\nGauss-Seidel迭代失败!
\n结果:
VectorOutput(x,n);
\n\n\007Pressanykeytoquit!
getch();