Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.ejml.simple.SimpleMatrix;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- Scanner in = new Scanner(System.in);
- int n = in.nextInt();
- float[][] matrix = new float[3][n];
- SimpleMatrix A = new SimpleMatrix(4,4);
- for (int i=0; i<n; i++){
- for (int j=0; j<n; j++) {
- A.set(i, j, 0);
- }
- }
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < n; j++) {
- matrix[i][j] = in.nextInt();
- if (i == 0 && j<3){
- A.set(j,j+1,matrix[i][j]);
- }
- if (i == 1){
- A.set(j,j,matrix[i][j]);
- }
- if (i == 2 && j<3){
- A.set(j+1,j,matrix[i][j]);
- }
- }
- }
- for (int i = 0; i < n; i++) {
- if (i>0) {
- if (Math.abs(matrix[1][i]) < Math.abs(matrix[2][i - 1] + matrix[0][i])) {
- System.out.println("Can't resolve this matrix");
- return;
- }
- }
- if ((Math.abs(matrix[0][i] / matrix[1][i]) > 1)) {
- System.out.println("Can't resolve this matrix");
- return;
- }
- if (i < n-1 && i > 0){
- if ((Math.abs(matrix[2][i - 1] / matrix[0][i]) > 1)) {
- System.out.println("Can't resolve this matrix");
- return;
- }
- }
- }
- float[] verD = new float[n];
- for (int i = 0; i < n; i++) {
- verD[i] = in.nextInt();
- }
- float[] alpha = new float[n];
- float[] betta = new float[n];
- alpha[0] = (-matrix[0][0] / matrix[1][0]);
- betta[0] = verD[0] / matrix[1][0];
- for (int i = 1; i < n; i++) {
- alpha[i] = (-matrix[0][i]) / (alpha[i - 1] * matrix[2][i - 1] + matrix[1][i]);
- betta[i] = (verD[i] - matrix[2][i - 1] * betta[i - 1]) / (matrix[2][i - 1] * alpha[i - 1] + matrix[1][i]);
- }
- float[] result = new float[n];
- result[n - 1] = betta[n - 1];
- for (int i = n - 2; i >= 0; i--) {
- result[i] = alpha[i] * result[i + 1] + betta[i];
- }
- System.out.println();
- for (int i = 0; i < n; i++) {
- String formattedFloat = String.format("%.15f", result[i]);
- System.out.print(formattedFloat + " ");
- }
- System.out.println();
- SimpleMatrix d = new SimpleMatrix(4,1);
- SimpleMatrix x1 = new SimpleMatrix(4,1);
- for (int i=0; i<n;i++){
- d.set(i,0,verD[i]);
- x1.set(i,0,result[i]);
- }
- SimpleMatrix d1 = A.mult(x1);
- SimpleMatrix r = d.minus(d1);
- SimpleMatrix e = A.invert().mult(r);
- double max = 0.0;
- for (int i=0 ; i<n; i++){
- if (Math.abs(e.get(i)) > max){
- max = Math.abs(e.get(i));
- }
- }
- System.out.println(max);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement