Работа с матрицами - 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 //...