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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5