Параллельное вычисление СЛАУ методом Гаусса - C#
Формулировка задачи:
Помогите ,пожалуйста, распараллелить как нибудь,ну или у кого есть готовое решение,буду очень благодарен
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
Листинг программы
Parallel.For(i, ColumCount, (k) => Matrix[j][k] -= Matrix[i][k] * MultElement);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д