Работа с матрицами - C# (180161)
Формулировка задачи:
Ребята, уже в который раз пытаюсь довести до ума проект и всё никак не могу понять в чем проблема. Помогите кто чем может.
Получаю матрицу от пользователя, делаю с ней некие преобразования. Вывожу её на экран все нормально. Но при последующем её использовании такое ощущение, что она как бы затирается из памяти и выводится пустая матрица.
Буду благодарна за любую помощь.
public double[,] changes_in_inventories_of_raw_materials(double[] b, double[,] A, string[] signs, double[] result, double[] Y) { int m = A.GetLength(0); int n = A.GetLength(1); double[,] table = new double[m, n + m]; double[,] table_new = new double[m, m]; double[,] table_test = new double[m, m]; for (int i = 0; i < m; i++) { for (int j = 0; j < n + m; j++) { if (j < n) table[i, j] = A[i, j]; else table[i, j] = 0; } //выставляем коэффициент 1 перед базисной переменной в строке if (i != m) { if (signs[i] == "<=") { if ((n + i) < table.GetLength(1)) { table[i, n + i] = 1; } } else if (signs[i] == ">=") { if ((n + i) < table.GetLength(1)) { table[i, n + i] = -1; } } } } table_test = table; double[] X = new double[table.GetLength(0)]; int delete = 0; int k = 0; for (int i = 0; i < table.GetLength(1); i++) { if (result[i] == 0) { table_test = delByIndex(table_test, i, delete); delete++; } else { X[k] = result[i]; k++; } } // ПОСЛЕ ЭТОГО ДЕЙСТВИЯ МАТРИЦУ table_test ПРОГРАММА ВОЗРАЩАЕТ ПУСТОЙ table_new = table_test; // находим обратную матрицу к матрице А (теперь table) D = new double[table_new.GetLength(0), table_new.GetLength(1)]; D = ObrMatr(table_new, table_new.GetLength(0)); double[,] dop = new double[D.GetLength(0),D.GetLength(1)]; double[] del_b_minus = new double[D.GetLength(0)]; double[] del_b_plus = new double[D.GetLength(0)]; for (int i = 0; i < D.GetLength(0); i++) { for (int j = 0; j < D.GetLength(1); j++) { if (D[j, i] > 0) { dop[i, j] = X[j] / D[j, i]; } else dop[i, j] = 0; } } IEnumerable<double> colNumbs; double min; for (int i = 0; i < dop.GetLength(0); i++) { colNumbs = dop.Cast<double>(); min = colNumbs.Max(); for (int j = 0; j < dop.GetLength(1); j++) { if (dop[i, j] != 0 && dop[i, j] < min) min = dop[i, j]; } del_b_minus[i] = min; } for (int i = 0; i < D.GetLength(0); i++) { for (int j = 0; j < D.GetLength(1); j++) { if (D[j, i] < 0) { dop[i, j] = X[j] / D[j, i]; } else dop[i, j] = 0; } } for (int i = 0; i < dop.GetLength(0); i++) { colNumbs = dop.Cast<double>(); min = colNumbs.Min(); for (int j = 0; j < dop.GetLength(1); j++) { if (dop[i, j] != 0 && dop[i, j] > min) min = dop[i, j]; } del_b_plus[i] = Math.Abs(min); } double[,] del = new double[dop.GetLength(0), 4]; for (int i = 0; i < dop.GetLength(0); i++) { if (Y[i] == 0) //if (del_b_minus == del_b_plus) { del[i, 0] = b[i] - del_b_minus[i]; del[i, 1] = b[i]; del[i, 2] = del_b_minus[i]; del[i, 3] = del_b_plus[i]; } else { del[i, 0] = b[i] - del_b_minus[i]; del[i, 1] = b[i] + del_b_plus[i]; del[i, 2] = del_b_minus[i]; del[i, 3] = del_b_plus[i]; } } return table_new; }
Решение задачи: «Работа с матрицами»
textual
Листинг программы
double[,] table = new double[m, n + m]; double[,] table_test = new double[m, m]; //... table_test = table //...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д