Решение системы уравнений методом Гаусса, исправить код - C#

Узнай цену своей работы

Формулировка задачи:

Здравсвуйте! Пишу код, который решает системы уравнений методом Гаусса, но на последнем этапе произошла загвостка.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication5
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. int stolb = 4;
  12. int stroka = 3;
  13. double[,] matrix = new double[stroka, stolb]; // заданная матрица
  14. double[,] matrix2 = new double[stroka, stolb]; // промежуточная
  15. double[,] matrixBuf = new double[stroka, stolb]; // конечная матрица
  16. matrix[0, 0] = 2;
  17. matrix[0, 1] = 1;
  18. matrix[0, 2] = 4;
  19. matrix[0, 3] = 16;
  20.  
  21. matrix[1, 0] = 3;
  22. matrix[1, 1] = 2;
  23. matrix[1, 2] = 1;
  24. matrix[1, 3] = 10;
  25.  
  26. matrix[2, 0] = 1;
  27. matrix[2, 1] = 3;
  28. matrix[2, 2] = 3;
  29. matrix[2, 3] = 16;
  30. for (int i = 0; i < stroka; i++)
  31. {
  32. for (int q = 0; q < stolb; q++)
  33. {
  34. matrix2[i,q] = matrix[i, q];
  35. }
  36. }
  37.  
  38. for (int i = 0; i < stroka; i++)
  39. {
  40. for (int q = 0; q < stolb; q++)
  41. {
  42. Console.Write(matrix[i, q] + "\t");
  43. }
  44. Console.WriteLine();
  45. }
  46. Console.WriteLine(" ");
  47. Console.ReadLine();
  48.  
  49. int count = 0;
  50. int countElem = 0;
  51. int countElem2 = 0;
  52. for (int i = 0; i < stroka; i++)
  53. {
  54. count++;
  55. double[] matrixStroka = new double[stolb - count];
  56. for (int q = 0; q < stolb - count; q++)
  57. {
  58. if (count == 1)
  59. {
  60. countElem++;
  61. matrixStroka[q] = -(matrix2[i, q + count] / matrix2[i, i]);
  62. if (countElem == stolb - count)
  63. {
  64. matrixStroka[q] = -(matrixStroka[q]);
  65. }
  66. }
  67. else
  68. {
  69. countElem2++;
  70. if (countElem2 != stolb - count)
  71. matrixStroka[q] = -(matrix2[i, q + count] / matrix2[i, i]);
  72. else
  73. matrixStroka[q] = (matrix2[i, q + count] / matrix2[i, i]);
  74. }
  75. }
  76.  
  77. for (int q = 0; q < stolb - count; q++)
  78. {
  79. matrixBuf[count - 1, q] = matrixStroka[q];
  80. }
  81. if (count == stroka)
  82. {
  83. matrixBuf[count - 1, 0] = -(matrixBuf[count - 1, 0]);
  84. break;
  85. }
  86. for (int q = 0; q < stolb - count; q++)
  87. {
  88. Console.WriteLine("dfd[{0}] = {1}", q, matrixStroka[q]);
  89. }
  90. Console.ReadLine();
  91. double[,] matrixProiz = new double[stroka - count, stolb - count];
  92. for (int t = 0; t < stroka-count; t++)
  93. {
  94. for (int q = 0; q < stolb - count; q++)
  95. {
  96. matrixProiz[t, q] = matrixStroka[q] * matrix2[t+count, count-1];
  97. Console.Write(matrixProiz[t, q] + "\t");
  98. }
  99. Console.WriteLine();
  100. }
  101. Console.ReadLine();
  102. int countSt = 0;
  103. for (int t = 0; t < stroka - count; t++)
  104. {
  105. for (int q = 0; q < stolb - count; q++)
  106. {
  107. countSt++;
  108. if (countSt != stolb - count)
  109. matrix2[t + count, q + count] = matrixProiz[t, q] + matrix2[t + count, q + count];
  110. else
  111. {
  112. matrix2[t + count, q + count] = -(matrixProiz[t, q]) + matrix2[t + count, q + count];
  113. countSt = 0;
  114. }
  115. }
  116. }
  117. for (int u = 0; u < stroka; u++)
  118. {
  119. for (int q = 0; q < stolb; q++)
  120. {
  121. Console.Write(matrix2[u, q] + "\t");
  122. }
  123. Console.WriteLine();
  124. }
  125. Console.WriteLine(" ");
  126. Console.ReadLine();
  127. }
  128. //Console.ReadLine();
  129. for (int u = 0; u < stroka; u++)
  130. {
  131. for (int q = 0; q < stolb; q++)
  132. {
  133. Console.Write(matrixBuf[u, q] + "\t");
  134. }
  135. Console.WriteLine();
  136. }
  137. Console.WriteLine(" ");
  138. Console.ReadLine();
  139. double[] result = new double[stroka];
  140. double resultat = matrixBuf[stroka - 1, 0];
  141. result[stroka-1] = matrixBuf[stroka - 1, 0];
  142. int a = stroka - 2;
  143. int countRez = 0;
  144. int countEl = 0;
  145. for (int u = a; u < a; --u) // перемножение и сложение элементов
  146. {
  147. for (int q = 0; q < stolb; q++)
  148. {
  149. countEl++;
  150. if (countEl == 1)
  151. resultat = resultat * matrixBuf[u, 0]; //перемножение эл-ов
  152. else
  153. {
  154. resultat = resultat + matrixBuf[u, q]; // сложение эл-ов
  155. }
  156. }
  157. }
  158.  
  159. for (int r = 0; r < result.Length; r++)
  160. {
  161. Console.WriteLine("Result[{0}] = {1}", r, result[r]);
  162. }
  163. Console.ReadLine();
  164.  
  165. }
  166. }
  167. }
В последнем кусочке кода долно происходить следующее (цифры взяты другие): x3 =5/8 x2 = -6 + 10 * 5/ 8 = 1/4 x1 = -1 + 2*1/4 + 2*5/ 8 = 3/4 Но в массиве, куда записываются конечные результаты, выводятся нули. Помогите пожалуйста найти ошибку и исправить код.

Решение задачи: «Решение системы уравнений методом Гаусса, исправить код»

textual
Листинг программы
  1. int countEl = 0;
  2.             int countStr = 0;
  3.             int countS = 0;
  4.             result[0] = matrixBuf[stroka - 1, 0];
  5.             double[] buffer = new double[stroka];
  6.             double a = 0;
  7.             for (int u = 0; u < stroka - 1; u++)  // перемножение и сложение элементов
  8.             {
  9.                 countStr++;
  10.                 for (int q = 0; q < 2; q++)
  11.                 {
  12.                     countEl++;
  13.                     if (countEl == 1)
  14.                     {
  15.                         for (int t = 0; t < stroka; t++)
  16.                         {
  17.                             buffer[t] = result[t] * matrixBuf[stroka - u - 2, t];
  18.                         }
  19.                     }
  20.                     else
  21.                     {
  22.                         for (int t = 0; t < buffer.Length; t++)
  23.                         {
  24.                             countS++;
  25.                             a = a + buffer[t];
  26.                             if(countS == stroka)
  27.                             {
  28.                                 result[u + 1] = a;
  29.                                 countStr = 0;
  30.                             }
  31.                         }
  32.                     }
  33.                 }
  34.                 if (countEl == 2)
  35.                 {
  36.                     countEl = 0;
  37.                 }
  38.                
  39.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы