package exercise.demo02;
import java.util.Scanner;
public class Jacobi {
final static int MAXN=10;
static double a[][]=new double[MAXN][MAXN];
// static double b[]=new double[MAXN];
static double x1[]=new double[MAXN];//用于保存迭代用的值
static double x2[]=new double[MAXN];//用于保存迭代后的值
static int flag=6;//迭代次数
static int num;
public static void main(String[] args) {
System.out.println("未知数个数:");
Scanner sc=new Scanner(System.in);
num = sc.nextInt();
System.out.println("以矩阵的形式输入方程组");
for(int i=0;i<num;i++){
for(int j=0;j<=num;j++){
a[i][j]=sc.nextDouble();
}
}
System.out.println("输入方程组的初始迭代值");
for(int i=0;i<num;i++){
x1[i]=sc.nextDouble();
x2[i]=0;
}
for(int i=0;i<num;i++){//将方程组写成等价的方程组
for(int j=0;j<=num;j++){
if(j<num&&j!=i){
a[i][j]=-(a[i][j]/a[i][i]);
}else if(j==num){
a[i][j]=(a[i][j]/a[i][i]);
}
}
a[i][i]=0;
}
for(int i=1;i<=flag;i++){//开始迭代
diedai();
System.out.println("迭代"+(i)+"次:");
for(int j=0;j<num;j++){
System.out.println("x"+(j+1)+"="+x2[j]);
x1[j]=x2[j];
x2[j]=0;//归零
}
}
}
static void diedai(){
for(int i=0;i<num;i++){
for(int j=0;j<num;j++){
x2[i]+=x1[j]*a[i][j];
}
x2[i]+=a[i][num];
}
}
}
//10 -1 -2 7.2
// -1 10 -2 8.3
// -1 -1 5 4.2