Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. import org.ejml.simple.SimpleMatrix;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Main {
  6. public static void main(String[] args) {
  7. Scanner in = new Scanner(System.in);
  8. int n = in.nextInt();
  9. float[][] matrix = new float[3][n];
  10. SimpleMatrix A = new SimpleMatrix(4,4);
  11. for (int i=0; i<n; i++){
  12. for (int j=0; j<n; j++) {
  13. A.set(i, j, 0);
  14. }
  15. }
  16. for (int i = 0; i < 3; i++) {
  17. for (int j = 0; j < n; j++) {
  18. matrix[i][j] = in.nextInt();
  19. if (i == 0 && j<3){
  20. A.set(j,j+1,matrix[i][j]);
  21. }
  22. if (i == 1){
  23. A.set(j,j,matrix[i][j]);
  24. }
  25. if (i == 2 && j<3){
  26. A.set(j+1,j,matrix[i][j]);
  27. }
  28. }
  29. }
  30. for (int i = 0; i < n; i++) {
  31. if (i>0) {
  32. if (Math.abs(matrix[1][i]) < Math.abs(matrix[2][i - 1] + matrix[0][i])) {
  33. System.out.println("Can't resolve this matrix");
  34. return;
  35. }
  36. }
  37. if ((Math.abs(matrix[0][i] / matrix[1][i]) > 1)) {
  38. System.out.println("Can't resolve this matrix");
  39. return;
  40. }
  41. if (i < n-1 && i > 0){
  42. if ((Math.abs(matrix[2][i - 1] / matrix[0][i]) > 1)) {
  43. System.out.println("Can't resolve this matrix");
  44. return;
  45. }
  46. }
  47.  
  48. }
  49. float[] verD = new float[n];
  50. for (int i = 0; i < n; i++) {
  51. verD[i] = in.nextInt();
  52. }
  53. float[] alpha = new float[n];
  54. float[] betta = new float[n];
  55. alpha[0] = (-matrix[0][0] / matrix[1][0]);
  56. betta[0] = verD[0] / matrix[1][0];
  57. for (int i = 1; i < n; i++) {
  58. alpha[i] = (-matrix[0][i]) / (alpha[i - 1] * matrix[2][i - 1] + matrix[1][i]);
  59. betta[i] = (verD[i] - matrix[2][i - 1] * betta[i - 1]) / (matrix[2][i - 1] * alpha[i - 1] + matrix[1][i]);
  60. }
  61. float[] result = new float[n];
  62. result[n - 1] = betta[n - 1];
  63. for (int i = n - 2; i >= 0; i--) {
  64. result[i] = alpha[i] * result[i + 1] + betta[i];
  65. }
  66. System.out.println();
  67. for (int i = 0; i < n; i++) {
  68. String formattedFloat = String.format("%.15f", result[i]);
  69. System.out.print(formattedFloat + " ");
  70. }
  71. System.out.println();
  72.  
  73. SimpleMatrix d = new SimpleMatrix(4,1);
  74. SimpleMatrix x1 = new SimpleMatrix(4,1);
  75.  
  76. for (int i=0; i<n;i++){
  77. d.set(i,0,verD[i]);
  78. x1.set(i,0,result[i]);
  79. }
  80. SimpleMatrix d1 = A.mult(x1);
  81. SimpleMatrix r = d.minus(d1);
  82. SimpleMatrix e = A.invert().mult(r);
  83. double max = 0.0;
  84. for (int i=0 ; i<n; i++){
  85. if (Math.abs(e.get(i)) > max){
  86. max = Math.abs(e.get(i));
  87. }
  88. }
  89. System.out.println(max);
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement