雅克比迭代法求解线性方程组

#include<bits/stdc++.h>
using namespace std;
const int maxn=110;
double a[110][110],b[110];
double x[110],tmpx[110];
const double eps=1e-6;
int main(){
	double epsilon,sum;
	int k=0;
	int n;scanf("%d",&n);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			scanf("%lf",&a[i][j]);
	for(int i=0;i<n;i++) 
		scanf("%lf",&b[i])
	while(1){
		epsilon=0;
		k++;
		for(int i=0;i<n;i++){
			sum=0;
			for(int j=0;j<n;j++){
				if(i==j) continue;
				sum+=a[i][j]*x[j];
			}
			tmpx[i]=(b[i]-sum)/a[i][i];
			epsilon=max(epsilon,fabs(tmpx[i]-x[i]));
		}
		for(int i=0;i<n;i++) x[i]=tmpx[i];
		if(epsilon<eps){
			printf("迭代次数为%d\n",k);
			printf("方程组的解为:\n");
			for(int i=0;i<n;i++)
				printf("x%d=%.6f\n",i,x[i]); 
			return 0;
		}
		if(k>=100){
			puts("-1");
			return 0;
		}
	}
	
	return 0;
}
/*
4
4 0.24 -0.08 
0.09 3 -0.15
0.04 -0.08 4
8 9 20
*/
posted @ 2020-10-05 16:59  OvO1  阅读(164)  评论(0编辑  收藏  举报