Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.77 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace ConsoleApplication
  5. {
  6. public class Gauss_method
  7. {
  8. public double[] method(double[,] sole, int dimension, out double[] result, out double[,] triangularMatrix)
  9. {
  10. int xCount, yCount, Count = 0;
  11. int maxIndexY = 0;
  12. double Coeff;
  13. double maxValue = 0;
  14. double sum = 0;
  15. double[] result_el = new double[2];
  16.  
  17.  
  18. while (Count < dimension - 1)
  19. {
  20. glav_el(sole, dimension, Count); //Вычисление главного элемента
  21. maxValue = GlavElement.maxValue; //Значение максимального элемента
  22. maxIndexY = GlavElement.maxIndexY;//Значение индекса максимального элемента
  23. sole = ChangeLines(sole,Count,maxIndexY,dimension); //Меняем строки местами
  24. sole = Zeroing(sole,Count,dimension); //Обнуление
  25. Count++;
  26. }
  27.  
  28. triangularMatrix = TriangularMatrix(dimension, sole);//Треугольная матрица
  29. result = back_stroke(dimension, sole);// Обратный проход
  30.  
  31. return result;
  32. }
  33.  
  34. public void glav_el(double[,] sole, int dimension, int Count) //Нахождение главного элемента и его индекса
  35. {
  36. int yCount;
  37. double maxValue = 0;
  38. int maxIndexY = Count;
  39. double[] max = new double[2];
  40. maxValue = sole[Count,Count];
  41.  
  42. for (yCount = Count+1; yCount <= dimension - 1; yCount++)
  43. {
  44. if (maxValue < sole[yCount,Count])
  45. {
  46. maxValue = sole[yCount,Count];
  47. maxIndexY = yCount;
  48. }
  49. }
  50.  
  51. GlavElement.maxIndexY = maxIndexY;
  52. GlavElement.maxValue = maxValue;
  53.  
  54. }
  55.  
  56. double[] back_stroke(int dimension, double[,] sole) //Обратных ход
  57. {
  58. double[] result = new double[dimension];
  59. int yCount, xCount;
  60. double sum;
  61. result[dimension - 1] = sole[dimension - 1,dimension] / sole[dimension - 1,dimension - 1]; //находим значение последнего неизвестного
  62. for (yCount = dimension - 2; yCount >= 0; yCount--)
  63. {
  64. sum = 0;
  65. for (xCount = dimension - 1; xCount >= yCount; xCount--)
  66. {
  67. sum += sole[yCount,xCount] * result[xCount];
  68. }
  69. result[yCount] = (sole[yCount,dimension] - sum) / sole[yCount,yCount];
  70. }
  71.  
  72. return result;
  73.  
  74. }
  75.  
  76. double[,] ChangeLines(double[,] sole, int Count, int maxIndexY, int dimension) //Меняем строки местами
  77. {
  78. double tmp;
  79. int xCount;
  80. if (Count != maxIndexY)
  81. {
  82. for (xCount = Count; xCount <= dimension; xCount++)
  83. {
  84. tmp = sole[Count,xCount];
  85. sole[Count,xCount] = sole[maxIndexY,xCount];
  86. sole[maxIndexY,xCount] = tmp;
  87. }
  88. }
  89.  
  90. return sole;
  91. }
  92.  
  93. double[,] Zeroing(double[,] sole, int Count, int dimension)//Обнуление
  94. {
  95. int yCount;
  96. double Coeff;
  97. for (yCount = Count + 1; yCount <= dimension - 1; yCount++)
  98. {
  99. Coeff = -(sole[yCount,Count] / sole[Count,Count]);
  100. for (int k =Count ; k <= dimension; k++)
  101. {
  102. sole[yCount, k] += sole[Count, k] * Coeff;
  103. }
  104. }
  105. return sole;
  106. }
  107.  
  108. double[,] TriangularMatrix(int dimension,double[,]sole) //треугольная матрица
  109. {
  110. double[,] triangularMatrix = new double[dimension,dimension+1];
  111. int yCount, xCount;
  112. for (yCount = 0; yCount <= dimension - 1; yCount++)
  113. {
  114. for (xCount = 0; xCount <= dimension; xCount++)
  115. triangularMatrix[yCount,xCount] = sole[yCount,xCount];
  116. }
  117.  
  118. return triangularMatrix;
  119. }
  120.  
  121. }
  122.  
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement