Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.17 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.text.NumberFormat;
  4. import java.util.Arrays;
  5.  
  6. public class Main {
  7. public static double[][] matrixAT(double [][] a,int n,int m){
  8. double[][] b=new double[n][m];
  9. for (int i = 0;i < n; i++) {
  10. for (int j = 0; j < n; j++) {
  11. b[i][j]=a[j][i];
  12. }
  13. }
  14. return b;
  15. }
  16. public static void printMatrix(double [][] matrix)
  17. {
  18. for (int i = 0; i < matrix.length; i++)
  19. {
  20. for (int j = 0; j < matrix[0].length; j++)
  21. {
  22.  
  23. System.out.printf("%.4f",matrix[i][j]);
  24. System.out.print(" ");
  25.  
  26. }
  27. System.out.println();
  28. }
  29. System.out.println("-----------");
  30. }
  31. public static void print(double[][] a,int n,int m){
  32. NumberFormat formatter = NumberFormat.getNumberInstance();
  33. formatter.setMaximumFractionDigits(4);
  34. for (int i = 0;i < n; i++) {
  35. for (int j = 0; j < m; j++) {
  36. System.out.print(formatter.format(a[i][j])+"\t\t");
  37. }
  38. System.out.println();
  39. }
  40. System.out.println();
  41. }
  42.  
  43. public static void printArray(double[] a,int n){
  44. NumberFormat formatter = NumberFormat.getNumberInstance();
  45. formatter.setMaximumFractionDigits(4);
  46. System.out.println();
  47. for (int i=0;i<n;i++){
  48. System.out.print(formatter.format(a[i])+" ");
  49. }
  50. System.out.println();
  51. }
  52.  
  53. public static void printArrayexp(double[] a,int n){
  54. System.out.println();
  55. for (int i=0;i<n;i++){
  56. System.out.printf("%e",a[i]);
  57. System.out.print(" ");
  58. }
  59. System.out.println();
  60. }
  61.  
  62. public static void main(String[] args) {
  63. int n = 5;
  64. double epc=0.00001;
  65. double[][] A=
  66. {
  67. {0.8918, 0.0000, -0.2330, 0.1638, 0.2730, 1.7545},
  68. {-0.0546, 0.5824, 0.0000, -0.1110, 0.0364, 2.3278},
  69. {0.0182, -0.1638, 1.0556, 0.0200, 0.0637, -3.2742},
  70. {0.0546, 0.0000, -0.1329, 1.0556, 0.0000, -9.0472},
  71. {0.0364, -0.0546, 0.2639, -0.0218, 0.7644, 3.9239},
  72. };
  73. double[][] A1 = {{1,2,3,4},{2,1,-1,-2},{3,-1,5,1}};
  74. double[][] B = new double[n][n + 1];
  75. double[][] H = new double[n][n];
  76. double[][] F = new double[n][n];
  77. double[] prewx=new double[n];
  78. double[] newx=new double[n];
  79. double[][] AT;
  80. AT=matrixAT(A,n,n);
  81. for (int i = 0; i<n; i++) {//AT*A
  82. for (int j = 0; j<n; j++) {
  83. for (int k = 0; k<n; k++)
  84. B[i][j] += AT[i][k] * A[k][j];
  85. }
  86. }
  87. double[][] ATA=new double[n][n];
  88. for (int i = 0; i<n; i++) {//B=E-AT*A
  89. for (int j = 0; j < n; j++) {
  90. ATA[i][j] = B[i][j];
  91. }
  92. }
  93. for (int i = 0; i<n; i++) {//B=E-AT*A
  94. for (int j = 0; j<n; j++) {
  95. if (i == j){
  96. B[i][j]=1-B[i][j];
  97. }
  98. else {
  99. B[i][j]=-B[i][j];
  100. }
  101. }
  102. }
  103. double[] g=new double[n];
  104. for (int i = 0; i < n; i++) {//g=AT*b
  105. for (int j = 0; j < n ; j++) {
  106. g[i]+=AT[i][j]*A[j][n];
  107. B[i][n]+=AT[i][j]*A[j][n];
  108. }
  109. }
  110. System.out.println("Расширенная матрица B|g:");
  111. print(B,n,n+1);
  112. for (int i = 0; i < n; i++) {//g=AT*b
  113. for (int j = 0; j < n; j++) {
  114. if (i > j) {
  115. H[i][j] = B[i][j];
  116. }
  117. else {
  118. F[i][j]=B[i][j];
  119. }
  120. }
  121. }
  122. double sum=0,max=0;
  123. for (int i = 0; i < n; i++) {
  124. sum=0;
  125. for (int j = 0; j < n; j++) {
  126. sum += B[i][j];
  127. }
  128. if (sum>max){
  129. max=sum;
  130. }
  131. }
  132. if (Math.abs(max)<1){
  133. System.out.println("Проверка сходимости: сходится");
  134. System.out.println();
  135. }
  136. for (int i=0;i<n;i++){
  137. prewx[i]=g[i];
  138. }
  139. double norm;
  140. int count=0;
  141. do{
  142. count++;
  143. double sum1=0;
  144. for (int i = 0; i < n; i++) {
  145. sum1=0;
  146. for (int j=0;j<i;j++) {
  147. sum1 += H[i][j] * newx[j];
  148. }
  149. for (int j = i; j < n ; j++) {
  150. sum1+=F[i][j]*prewx[j];
  151. }
  152. newx[i]=sum1+g[i];
  153. }
  154. System.out.println(Arrays.toString(newx));
  155. norm=Math.abs(newx[0]-prewx[0]);
  156. for (int i=0;i<n;i++){
  157. if (Math.abs(newx[i]-prewx[i])>norm){
  158. norm=Math.abs(newx[i]-prewx[i]);
  159. }
  160. prewx[i]=newx[i];
  161. }
  162. System.out.print("норма: "+norm+'\n');
  163. }
  164. while (norm>=epc);
  165. System.out.print("Решение системы:\n");
  166. System.out.println(Arrays.toString(newx));
  167. System.out.println();
  168. System.out.println("Количество итераций: "+count);
  169. double[] r1=new double[n];
  170. double[] r2=new double[n];
  171. double sum1=0;
  172. printMatrix(B);
  173. for (int i = 0; i < n; i++) {
  174. sum1=0;
  175. for (int j = 0; j < n ; j++) {
  176. sum1+=ATA[i][j]*newx[j];
  177. }
  178. r1[i]=sum1-B[i][n];
  179. }
  180. for (int i = 0; i < n; i++) {
  181. sum1=0;
  182. for (int j = 0; j < n ; j++) {
  183. sum1+=A[i][j]*newx[j];
  184. }
  185. r2[i]=sum1-A[i][n];
  186. }
  187. System.out.println();
  188. System.out.print("r=AX-b");
  189. System.out.println('\n'+Arrays.toString(r1));
  190. System.out.print("r=AT*AX-AT*b");
  191. System.out.println('\n'+Arrays.toString(r2));
  192. }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement