题目:
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。
高斯赛德尔和雅可比迭代法,笔算很好运用,写程序两者是互通的。
#include<stdio.h>
#include<math.h>
float x[10000];
float f[10000];
float second[10000];
float a[10][10];
float sum,temp1,temp2;
int i,j,k,c;
int n=3;
int main(){
printf("输入矩阵\n");
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
scanf("%f",&a[i][j]);
printf("输入x初值\n");
for(i=1;i<=n;i++){
scanf("%f",&x[i]);
}
c=0;
f[c]=x[1]+x[2]+x[3];
for(k=1;;k++){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i!=j){
sum+=a[i][j]*x[j];
}
}
x[i]=(a[i][n+1]-sum)/a[i][i];
sum=0;
}
c++;
f[c]=x[1]+x[2]+x[3];
if(fabs(f[c]-f[c-1])<0.000005){
for(i=1;i<=n;i++)
printf("%f\n",x[i]);
break;
}
}
return 0;
}
高斯-赛德尔迭代法只需要一组储存单元,它的收敛速度比雅可比迭代法快。
雅可比迭代法和高斯-赛德尔迭代法停止迭代都需要使用范数。范数之差满足精度要求,既可以停止迭代。
矩阵尽可能满足严格对角优势。