Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
1

Работа с матрицами

01.09.2016, 15:53. Показов 888. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята, уже в который раз пытаюсь довести до ума проект и всё никак не могу понять в чем проблема. Помогите кто чем может.
Получаю матрицу от пользователя, делаю с ней некие преобразования. Вывожу её на экран все нормально. Но при последующем её использовании такое ощущение, что она как бы затирается из памяти и выводится пустая матрица.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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;
        }

Буду благодарна за любую помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2016, 15:53
Ответы с готовыми решениями:

Работа с матрицами
Написал программу которая создают матрицу размером NxM и выводит на экран. К этому всему в...

Работа с матрицами
Работую пару дней с #, а задание просят сдать, помогите пожалуйста сделать эту программу на с#:...

Работа с матрицами
Здравствуйте. Помогите пожалуйста с заданием Есть матрица, например: 1 5 2 4 4 2 5 1...

Работа с матрицами.
Дана матрица размера 5 x 10. Вывести номер ее первой|последней строки|столбца, содержащего только...

6
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
01.09.2016, 17:51 2
А с чего ты решила что именно в 58 строке кода ошибка?
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
01.09.2016, 18:57  [ТС] 3
Потому что если убрать эту строку и подать на выдачу table_test, то она будет не пустая и выдаст желаемый результат...
Если есть другие предположения я не против и выслушаю
0
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
01.09.2016, 21:31 4
C#
1
2
3
4
5
double[,] table = new double[m, n + m];
double[,] table_test = new double[m, m];
//...
table_test = table
//...
При n>0 массив table будет больше table_test. Как именно планируете копировать? Какую часть большого массива table вы планируете поместить в table_test?
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
02.09.2016, 15:00 5
Судя по коду Вы достаточно уверенно всё делали - что мешает поставить брейкпоинт и посмотреть отладку в Debugger'е?
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
02.09.2016, 16:46  [ТС] 6
Спасибо всем за помощь. Уже разобралась. Дело было в размерности матрицы (как говорили), но и не только в этом. Проблема была в неработающей (или неправильно работающей) функции поиска обратной матрице.
0
0 / 0 / 0
Регистрация: 12.02.2017
Сообщений: 1
12.02.2017, 19:19 7
Lenchik_19, доброго времени суток.
А можно выложить рабочий код в студию?
Заранее благодарю.
0
12.02.2017, 19:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2017, 19:19
Помогаю со студенческими работами здесь

Работа с матрицами
Помогите пожалуйста. Условие задачи: Размер матрицы — 64x127 Диапазон генерации случайных чисел...

Работа с матрицами
Добрый вечер! Скажите пожалуйста, как: 1) Получить размерность матрицы (не обязательно в виде...

Работа с матрицами
Добрый вечер, подскажите пожалуйста в программе нужно найти количество строк матрицы А, сумма...

Работа с матрицами
Работа с матрицами


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru