Не могу разобраться с системой - 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
Первую систему решает, а вторую неправильно( В чём дело, подскажите?
class GausMethod { public uint RowCount; public uint ColumCount; public double[][] Matrix { get; set; } public double[] RightPart { get; set; } public double[] Answer { get; set; } public GausMethod(uint Row, uint Colum) { RightPart = new double[Row]; Answer = new double[Row]; Matrix = new double[Row][]; for (int i = 0; i < Row; i++) Matrix[i] = new double[Colum]; RowCount = Row; ColumCount = Colum; //обнулим массив for (int i = 0; i < Row; i++) { Answer[i] = 0; RightPart[i] = 0; for (int j = 0; j < Colum; j++) Matrix[i][j] = 0; } } private void SortRows(int SortIndex) { double MaxElement = Matrix[SortIndex][SortIndex]; int MaxElementIndex = SortIndex; for (int i = SortIndex + 1; i < RowCount; i++) { if (Matrix[i][SortIndex] > MaxElement) { MaxElement = Matrix[i][SortIndex]; MaxElementIndex = i; } } //теперь найден максимальный элемент ставим его на верхнее место if (MaxElementIndex > SortIndex)//если это не первый элемент { double Temp; Temp = RightPart[MaxElementIndex]; RightPart[MaxElementIndex] = RightPart[SortIndex]; RightPart[SortIndex] = Temp; for (int i = 0; i < ColumCount; i++) { Temp = Matrix[MaxElementIndex][i]; Matrix[MaxElementIndex][i] = Matrix[SortIndex][i]; Matrix[SortIndex][i] = Temp; } } } public int SolveMatrix() { if (RowCount != ColumCount) return 1; //нет решения for (int i = 0; i < RowCount - 1; i++) { SortRows(i); for (int j = i + 1; j < RowCount; j++) { if (Matrix[i][i] != 0) //если главный элемент не 0, то производим вычисления { double MultElement = Matrix[j][i] / Matrix[i][i]; for (int k = i; k < ColumCount; k++) Matrix[j][k] -= Matrix[i][k] * MultElement; RightPart[j] -= RightPart[i] * MultElement; } //для нулевого главного элемента просто пропускаем данный шаг } } //ищем решение for (int i = (int)(RowCount - 1); i >= 0; i--) { Answer[i] = RightPart[i]; for (int j = (int)(RowCount - 1); j > i; j--) Answer[i] -= Matrix[i][j] * Answer[j]; if (Matrix[i][i] == 0) if (RightPart[i] == 0) return 2; //множество решений else return 1; //нет решения Answer[i] /= Matrix[i][i]; } return 0; } public override String ToString() { String S = ""; for (int i = 0; i < RowCount; i++) { S += "\r\n"; for (int j = 0; j < ColumCount; j++) { S += Matrix[i][j].ToString("F04") + "\t"; } S += "\t" + Answer[i].ToString("F08"); S += "\t" + RightPart[i].ToString("F04"); } return S; } }
Помогите разобраться (Код взял отсюда Решение СЛАУ(СЛАР) методом Гаусса
Вот такие матрицы(на картинке не решающаяся)
Решение задачи: «Не могу разобраться с системой»
textual
Листинг программы
LinearEquationSolver.Solve(sistema);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д