Advertisement
100hahahaha

Untitled

Dec 23rd, 2024
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.30 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. import java.util.Scanner;
  4.  
  5. public class Main {
  6. public static void main(String[] args) {
  7.      double[][] xs = new double[][]{
  8.              new double[]{5.452, 0.401, 0.758, 0.123, -0.886},
  9.              new double[]{0.785, 2.654, 0.687, 0.203, -0.356},
  10.              new double[]{0.402, 0.244, 4.456, 0.552, -0.342},
  11.              new double[]{0.210, 0.514, 0.206, 4.568, -0.452}
  12.              };
  13.      double eps;
  14.      double[][] rs = new double[100][4];
  15.      double[][] deltas = new double[100][4];
  16.      double[] newX = new double[4];
  17.      double max = 0;
  18.      int iteration = 0, max_pos = 0, rd =0;
  19.  
  20.      Scanner sc = new Scanner(System.in);
  21.      eps = sc.nextDouble();
  22.      rd = rounded(eps);
  23.      for (int i = 0; i < 4; i++) {
  24.      double deli = -1 * xs[i][i];
  25.      for (int j = 0; j < 5; j++) {
  26.      BigDecimal rounded = new BigDecimal(xs[i][j] / deli).setScale(rd+1,
  27.              RoundingMode.HALF_UP);
  28.      xs[i][j] = Double.parseDouble(String.valueOf(rounded));
  29.      }
  30.      }
  31.  
  32.      for (int i = 0; i < 100; i++) {
  33.          iteration++;
  34.          if (i == 0) {
  35.              for (int j = 0; j < 4; j++) {
  36.                  rs[i][j] = xs[j][4];
  37.                  double tmp = rs[i][j];
  38.                  if (tmp < 0) {
  39.                   tmp *= -1;
  40.                   }
  41.                  if (tmp > max) {
  42.                      max = tmp;
  43.                      for (int k = 0; k < 4; k++) {
  44.                          if (k == j) {
  45.                              deltas[i][k] = rs[i][j];
  46.                              max_pos = k;
  47.                              } else {
  48.                              deltas[i][k] = 0;
  49.                              }
  50.                           }
  51.                      }
  52.                  }
  53.              } else {
  54.              if (i == 7) {
  55.               System.out.println();
  56.               }
  57.              for (int j = 0; j < 4; j++) {
  58.                  if (j != max_pos) {
  59.                       double tt = rs[i - 1][j] + xs[j][max_pos] * deltas[i - 1][max_pos];
  60.                       BigDecimal rounded = new BigDecimal(tt).setScale(rd+1, RoundingMode.HALF_UP);
  61.                       rs[i][j] = Double.parseDouble(String.valueOf(rounded));
  62.                       }
  63.                   }
  64.               for (int j = 0; j < 4; j++) {
  65.                   double tmp = rs[i][j];
  66.                   if (tmp < 0) {
  67.                    tmp *= -1;
  68.                    }
  69.                   if (tmp > max) {
  70.                       max = tmp;
  71.                       for (int k = 0; k < 4; k++) {
  72.                           if (k == j) {
  73.                               deltas[i][k] = rs[i][j];
  74.                               max_pos = k;
  75.                               } else {
  76.                               deltas[i][k] = 0;
  77.                               }
  78.                           }
  79.                       }
  80.                   }
  81.               }
  82.  
  83.           max = 0;
  84.           int check = 0;
  85.           for (int j = 0; j < 4; j++) {
  86.               double tmp = rs[i][j];
  87.               if (tmp < 0) {
  88.                   tmp *= -1;
  89.                   }
  90.               if (tmp <= eps) {
  91.                   check++;
  92.                   }
  93.               }
  94.           if (check == 4) {
  95.               break;
  96.               }
  97.           }
  98.  
  99.       for (int i = 0; i < 4; i++) {
  100.           for (int j = 0; j < iteration; j++) {
  101.               newX[i] += deltas[j][i];
  102.               }
  103.           }
  104.       System.out.println("Количество итераций: "+ iteration);
  105.       System.out.println("deltaX(1-4) R(1-4)");
  106.       for (int i = 0; i < iteration; i++) {
  107.           for (int j = 0; j < 4; j++) {
  108.               System.out.print(deltas[i][j] + "\t");
  109.               }
  110.           System.out.print("|");
  111.           for (int j = 0; j < 4; j++) {
  112.           System.out.print(rs[i][j] + "\t");
  113.           }
  114.  
  115.           System.out.println();
  116.           }
  117.  
  118.       for (int i = 1; i <= newX.length; i++){
  119.           BigDecimal rounded = new BigDecimal(newX[i-1]).setScale(rd,
  120.                  RoundingMode.CEILING);
  121.  
  122.           System.out.println("x[" + i +"] = "+ rounded);
  123.  
  124.           }
  125.       }
  126.  
  127.       public static int rounded(double a){
  128.       int k = 0;
  129.       while(a > 0 && a < 1){
  130.           a *= 10;
  131.           k++;
  132.           }
  133.       return k;
  134.       }
  135.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement