Не могу разобраться с системой - C#

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

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

Есть код, решающий СЛАУ методом Гаусса. У меня есть две системы: 1) 13.25 y0 - 12 y1 = 0 80 yi-1 -205 yi + 120 yi+1 = 0 9.25 y10 - 8 y9 = 2e 2) y0 = 1 80 yi-1 - 205 yi +120 yi+1 = 0 y10 = e-5 где i = 1, ... , 9 Первую систему решает, а вторую неправильно( В чём дело, подскажите?
Листинг программы
  1. class GausMethod
  2. {
  3. public uint RowCount;
  4. public uint ColumCount;
  5. public double[][] Matrix { get; set; }
  6. public double[] RightPart { get; set; }
  7. public double[] Answer { get; set; }
  8. public GausMethod(uint Row, uint Colum)
  9. {
  10. RightPart = new double[Row];
  11. Answer = new double[Row];
  12. Matrix = new double[Row][];
  13. for (int i = 0; i < Row; i++)
  14. Matrix[i] = new double[Colum];
  15. RowCount = Row;
  16. ColumCount = Colum;
  17. //обнулим массив
  18. for (int i = 0; i < Row; i++)
  19. {
  20. Answer[i] = 0;
  21. RightPart[i] = 0;
  22. for (int j = 0; j < Colum; j++)
  23. Matrix[i][j] = 0;
  24. }
  25. }
  26. private void SortRows(int SortIndex)
  27. {
  28. double MaxElement = Matrix[SortIndex][SortIndex];
  29. int MaxElementIndex = SortIndex;
  30. for (int i = SortIndex + 1; i < RowCount; i++)
  31. {
  32. if (Matrix[i][SortIndex] > MaxElement)
  33. {
  34. MaxElement = Matrix[i][SortIndex];
  35. MaxElementIndex = i;
  36. }
  37. }
  38. //теперь найден максимальный элемент ставим его на верхнее место
  39. if (MaxElementIndex > SortIndex)//если это не первый элемент
  40. {
  41. double Temp;
  42. Temp = RightPart[MaxElementIndex];
  43. RightPart[MaxElementIndex] = RightPart[SortIndex];
  44. RightPart[SortIndex] = Temp;
  45. for (int i = 0; i < ColumCount; i++)
  46. {
  47. Temp = Matrix[MaxElementIndex][i];
  48. Matrix[MaxElementIndex][i] = Matrix[SortIndex][i];
  49. Matrix[SortIndex][i] = Temp;
  50. }
  51. }
  52. }
  53. public int SolveMatrix()
  54. {
  55. if (RowCount != ColumCount)
  56. return 1; //нет решения
  57. for (int i = 0; i < RowCount - 1; i++)
  58. {
  59. SortRows(i);
  60. for (int j = i + 1; j < RowCount; j++)
  61. {
  62. if (Matrix[i][i] != 0) //если главный элемент не 0, то производим вычисления
  63. {
  64. double MultElement = Matrix[j][i] / Matrix[i][i];
  65. for (int k = i; k < ColumCount; k++)
  66. Matrix[j][k] -= Matrix[i][k] * MultElement;
  67. RightPart[j] -= RightPart[i] * MultElement;
  68. }
  69. //для нулевого главного элемента просто пропускаем данный шаг
  70. }
  71. }
  72. //ищем решение
  73. for (int i = (int)(RowCount - 1); i >= 0; i--)
  74. {
  75. Answer[i] = RightPart[i];
  76. for (int j = (int)(RowCount - 1); j > i; j--)
  77. Answer[i] -= Matrix[i][j] * Answer[j];
  78. if (Matrix[i][i] == 0)
  79. if (RightPart[i] == 0)
  80. return 2; //множество решений
  81. else
  82. return 1; //нет решения
  83. Answer[i] /= Matrix[i][i];
  84. }
  85. return 0;
  86. }
  87.  
  88. public override String ToString()
  89. {
  90. String S = "";
  91. for (int i = 0; i < RowCount; i++)
  92. {
  93. S += "\r\n";
  94. for (int j = 0; j < ColumCount; j++)
  95. {
  96. S += Matrix[i][j].ToString("F04") + "\t";
  97. }
  98. S += "\t" + Answer[i].ToString("F08");
  99. S += "\t" + RightPart[i].ToString("F04");
  100. }
  101. return S;
  102. }
  103. }
Помогите разобраться (Код взял отсюда Решение СЛАУ(СЛАР) методом Гаусса Вот такие матрицы(на картинке не решающаяся)

Решение задачи: «Не могу разобраться с системой»

textual
Листинг программы
  1. LinearEquationSolver.Solve(sistema);

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


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

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

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

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

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

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