public void DeleteExtraVariblsFromAB(int numFromDelete) { int indexToDelete = ILFreeEl.FindIndex(x => x > numFromDelete); if (indexToDelete < 0) { return; } //Теперь необходимо сместить все индесы на еденицу начиная с того, который удаляем. //Чтобы в дальнейшем не возникло проблем с размерностью, будем использовать переопределение этих самых матриц //Тогда нам нужно заменить лишь Matrix & ObjFunction Fraction[] NewObjFunction = new Fraction[ColumCount - 1];//Понижаем размерность Fraction[][] NewMatrix = new Fraction[RowCount][]; for (int i = 0; i < RowCount; i++) { NewMatrix[i] = new Fraction[ColumCount - 1]; } int offset = 0; for (int g = 0; g < ColumCount; g++) { if (g == indexToDelete) { offset = 1; continue; } for (int i = 0; i < RowCount; i++) { NewMatrix[i][g - offset] = Matrix[i][g]; } NewObjFunction[g - offset] = ObjFunction[g]; } ColumCount--; ILFreeEl.RemoveAt(indexToDelete); Matrix = NewMatrix; ObjFunction = NewObjFunction; }
/* * Заполняет симплекс таблицу из таблицы гаусса * Можно считать это корректной инициилазцией объекта и началом работы с самой симплекс таблицей */ public void FillTable(GaussMatrix gaussM, List <Fraction> initObjFunc, bool fFindMax) { ILBasisEl = new List <int>(gaussM.IndexListBasisElements); for (int i = 0; i < ColumCount + RowCount; i++) { if (!ILBasisEl.Contains(i)) { ILFreeEl.Add(i); } } for (int i = 0; i < RowCount; i++) { for (int g = 0; g < ILFreeEl.Count; g++) { Matrix[i][g] = gaussM.Matrix[i][ILFreeEl[g]]; } } RightPart = gaussM.RightPart; CalculateObjectiveFunction(initObjFunc, fFindMax); CalculateObjectiveFunctionValue(initObjFunc, fFindMax); }