import java.util.Scanner;
/**
* @author Janus
* @creator 2020-03-09-10:59
*/
public class Thomas {
private double[] a;
private double[] b;
private double[] c;
private double[] beta;
private double[] x;
private double[] y;
private double[] f;
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
Thomas obj=new Thomas(scanner.nextInt());
obj.beta[0]=obj.c[0]/obj.b[0];
for(int i=1;i< obj.beta.length;++i){
obj.beta[i]=obj.c[i]/(obj.b[i]-obj.a[i]*obj.beta[i-1]);
}
Output(obj.beta,"beta");
obj.y[0]=obj.f[0]/obj.b[0];
for(int i=1;i<obj.y.length;++i){
obj.y[i]=(obj.f[i]-obj.a[i]*obj.y[i-1])/(obj.b[i]-obj.a[i]*obj.beta[i-1]);
}
Output(obj.y,"y");
obj.x[obj.x.length-1]=obj.y[obj.y.length-1];
for(int i=obj.x.length-2;i>=0;--i){
obj.x[i]=obj.y[i]-obj.beta[i]*obj.x[i+1];
}
Output(obj.x,"x");
}
public Thomas(int n){
a=new double[n];
b=new double[n];
c=new double[n-1];
beta=new double[n-1];
x=new double[n];
y=new double[n];
f=new double[n];
Input(a);
Input(b);
Input(c);
Input(f);
}
private static void Output(double[] arr,String var){
System.out.printf("%s=\n",var);
for(double temp:arr){
System.out.printf("%+.6f\t",temp);
}
System.out.print('\n');
}
private static void Input(double[] arr){
Scanner scanner=new Scanner(System.in);
for(int i=0;i<arr.length;++i){
arr[i]=scanner.nextDouble();
}
}
}
工程计算-三对角矩阵的Thomas追赶法
最新推荐文章于 2022-05-28 22:31:20 发布