目的要求:用追赶法求解线性方程组Ax=b,式中A为n阶非奇异方阵,x,b为n阶列向量。要求编写实验程序(语言不限),给出实验结果。
题目1 例5.4
package com.code;
public class main {
public static void main(String[] args) {
dao.temo();
}
}
package com.code;
import java.util.Scanner;
public class dao {
public static void temo(){
int n; //矩阵大小
Scanner s = new Scanner(System.in);
System.out.print("请输入矩阵的大小:");
n = s.nextInt();
int[][] A = new int[n][n], L= new int[n][n], U= new int[n][n];
int[] f = new int[n], y = new int[n], x = new int[n];
System.out.println("输入A矩阵的值:");
for (int i = 0; i < n; i++){
for(int j = 0; j < n; j ++){
A[i][j] = s.nextInt();
}
}
System.out.println("输入f矩阵的值:");
for (int i = 0; i < n; i++) {
f[i] = s.nextInt();
}
for (int i = 0; i < n; i++) { //计算U
U[i][i] = 1;
}
U[0][1] = A[0][1] / A[0][0];
for (int i = 1; i < n - 1; i++) {
U[i][i+1] = A[i][i+1] / (A[i][i] - A[i][i-1] * U[i-1][i]);
}
L[0][0] = A[0][0]; //计算L
for (int i = 1; i < n; i++) {
L[i][i] = A[i][i] - A[i][i-1] * U[i-1][i];
L[i][i-1] = A[i][i-1];
}
y[0] = f[0] / A[0][0]; //计算Y
for (int i = 1; i < n; i++) {
y[i] = (f[i] - A[i][i-1] * y[i-1]) / (A[i][i] - A[i][i-1] * U[i-1][i] );
}
x[n-1] = y[n-1]; //计算X
for (int i = n-2; i >= 0; i--) {
x[i] = y[i] - U[i][i+1] * x[i+1];
}
displayTwo(U,n,'U');
displayTwo(L,n,'L');
displayOne(y,n,'y');
displayOne(x,n,'x');
}
public static void displayTwo(int arr[][], int n, char c){
System.out.println("-------------------");
System.out.println("矩阵" + c + ":");
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
System.out.println();
}
public static void displayOne(int arr[], int n, char c){
System.out.println("-------------------");
System.out.println("矩阵" + c + ":");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
}