Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
1

Реализовать решения СЛАУ методом Гаусса

11.11.2019, 01:16. Просмотров 1668. Ответов 11
Метки нет (Все метки)

В форме надо создать три матрицы с помощью dataGridView, одну 3Х3 другую 1Х3 и третья должна выдавать результат вычислений этих двух по методу Гауса.
ДГВ я сделал только осталось реализовать метод Гаусса при нажатии Button3.
Архив с кодом подаю
0
Вложения
Тип файла: rar WindowsFormsApplication1.rar (204.3 Кб, 3 просмотров)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2019, 01:16
Ответы с готовыми решениями:

Решение СЛАУ методом Гаусса
Доброго времени суток. Вообщем есть такая вот система (см. приложение) и по ней как-то нужно...

Аппроксимация функций. Сглаживание опытных данных методом наименьших квадратов и решение системы линейных уравнений методом Гаусса
Нужна помощь:wall:, пишу программу аппроксимация функций. Сглаживание опытных данных методом...

Код метод Гаусса для СЛАУ адаптировать под технологию Windows Forms
Всем привет! Такая проблема: не могу додуматься как сделать метод гауса для СЛАУ в форме, есть...

Использование alglib для решения СЛАУ: Недопустимые аргументы в функции
В программе необходимо решить слу, решил воспользоваться alglib но не пойму как, вот кусок моего...

Решение СЛАУ методом Крамера
Всем привет, случайно не у кого прога для решения СЛАУ методом Крамера не завалялась? Вы плохо не...

11
nicolas2008
11.11.2019, 02:26
  #2

Не по теме:

Цитата Сообщение от Cyber_Demon Посмотреть сообщение
только осталось реализовать метод Гаусса
Действительно, осталась самая малость :D. Только причем здесь WinForms если с самыми формами у вас проблем не возникло.

0
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
11.11.2019, 02:43  [ТС] 3
По заданию это нужно реализовать в виндовс формах.

Добавлено через 11 минут
Цитата Сообщение от nicolas2008 Посмотреть сообщение

Не по теме:


Действительно, осталась самая малость :D. Только причем здесь WinForms если с самыми формами у вас проблем не возникло.

Цитата Сообщение от nicolas2008 Посмотреть сообщение
Действительно, осталась самая малость :D. Только причем здесь WinForms если с самыми формами у вас проблем не возникло.
А если быть еще более точным, то мне нужно чтобы метод Гаусса который будет находится на кнопке был рабочим относительно программы

Мне не необходимо реализация самого метода, мне нужна реализация относительно этой программы у виндовс форме
0
nicolas2008
452 / 382 / 126
Регистрация: 30.04.2009
Сообщений: 1,363
Завершенные тесты: 1
11.11.2019, 12:57 4
Цитата Сообщение от Cyber_Demon Посмотреть сообщение
Мне не необходимо реализация самого метода, мне нужна реализация относительно этой программы у виндовс форме
Т.е. у тебя уже есть реализация, но безотносительно этой программы у виндовс форме?
Так бы и написал в начале Интегрировать в программу это не проблема, выкладывай код алгоритма.
0
11.11.2019, 12:57
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
11.11.2019, 14:03  [ТС] 5
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Т.е. у тебя уже есть реализация, но безотносительно этой программы у виндовс форме?
Так бы и написал в начале Интегрировать в программу это не проблема, выкладывай код алгоритма.
Под кодом алгоритма, вы говорите о коде самого метода Гаусса"?

Добавлено через 7 минут
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
class GausMethod
        {
            public uint RowCount;
            public uint ColumCount;
            public double[][] Matrix { get; set; }
            public double[] RightPart { get; set; }
            public double[] Answer { get; set; }
 
            public GausMethod(uint Row, uint Colum)
            {
                RightPart = new double[Row];
                Answer = new double[Row];
                Matrix = new double[Row][];
                for (int i = 0; i < Row; i++)
                    Matrix[i] = new double[Colum];
                RowCount = Row;
                ColumCount = Colum;
 
                //обнулим массив
                for (int i = 0; i < Row; i++)
                {
                    Answer[i] = 0;
                    RightPart[i] = 0;
                    for (int j = 0; j < Colum; j++)
                        Matrix[i][j] = 0;
                }
            }
 
            private void SortRows(int SortIndex)
            {
 
                double MaxElement = Matrix[SortIndex][SortIndex];
                int MaxElementIndex = SortIndex;
                for (int i = SortIndex + 1; i < RowCount; i++)
                {
                    if (Matrix[i][SortIndex] > MaxElement)
                    {
                        MaxElement = Matrix[i][SortIndex];
                        MaxElementIndex = i;
                    }
                }
 
                //теперь найден максимальный элемент ставим его на верхнее место
                if (MaxElementIndex > SortIndex)//если это не первый элемент
                {
                    double Temp;
 
                    Temp = RightPart[MaxElementIndex];
                    RightPart[MaxElementIndex] = RightPart[SortIndex];
                    RightPart[SortIndex] = Temp;
 
                    for (int i = 0; i < ColumCount; i++)
                    {
                        Temp = Matrix[MaxElementIndex][i];
                        Matrix[MaxElementIndex][i] = Matrix[SortIndex][i];
                        Matrix[SortIndex][i] = Temp;
                    }
                }
            }
 
            public int SolveMatrix()
            {
                if (RowCount != ColumCount)
                    return 1; //нет решения
 
                for (int i = 0; i < RowCount - 1; i++)
                {
                    SortRows(i);
                    for (int j = i + 1; j < RowCount; j++)
                    {
                        if (Matrix[i][i] != 0) //если главный элемент не 0, то производим вычисления
                        {
                            double MultElement = Matrix[j][i] / Matrix[i][i];
                            for (int k = i; k < ColumCount; k++)
                                Matrix[j][k] -= Matrix[i][k] * MultElement;
                            RightPart[j] -= RightPart[i] * MultElement;
                        }
                        //для нулевого главного элемента просто пропускаем данный шаг
                    }
                }
 
                //ищем решение
                for (int i = (int)(RowCount - 1); i >= 0; i--)
                {
                    Answer[i] = RightPart[i];
 
                    for (int j = (int)(RowCount - 1); j > i; j--)
                        Answer[i] -= Matrix[i][j] * Answer[j];
 
                    if (Matrix[i][i] == 0)
                        if (RightPart[i] == 0)
                            return 2; //множество решений
                        else
                            return 1; //нет решения
 
                    Answer[i] /= Matrix[i][i];
 
                }
                return 0;
            }
            public override String ToString()
            {
                String S = "";
                for (int i = 0; i < RowCount; i++)
                {
                    S += "\r\n";
                    for (int j = 0; j < ColumCount; j++)
                    {
                        S += Matrix[i][j].ToString("F04") + "\t";
                    }
 
                    S += "\t" + Answer[i].ToString("F08");
                    S += "\t" + RightPart[i].ToString("F04");
                }
                return S;
            }
        }
0
nicolas2008
452 / 382 / 126
Регистрация: 30.04.2009
Сообщений: 1,363
Завершенные тесты: 1
11.11.2019, 14:37 6
Лучший ответ Сообщение было отмечено Cyber_Demon как решение

Решение

Цитата Сообщение от Cyber_Demon Посмотреть сообщение
Под кодом алгоритма, вы говорите о коде самого метода Гаусса"?
Да

Интеграция, как и обещал)
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
            if (dataGridView1.Rows.Count != dataGridView2.Rows.Count)
            {
                MessageBox.Show("Размер матриц несоответствующий");
                return;
            }
 
            if (dataGridView2.Columns.Count != 1)
            {
                MessageBox.Show("Размер матрицы B несоответствующий");
                return;
            }
 
            var gaussSolver = new GausMethod((uint)dataGridView1.Rows.Count, (uint)dataGridView1.Columns.Count);
 
            for (int row = 0; row < dataGridView1.Rows.Count; row++)
            {
                for (int column = 0; column < dataGridView1.Columns.Count; column++)
                {
                    gaussSolver.Matrix[row][column] = Convert.ToInt32(dataGridView1.Rows[row].Cells[column].Value);
                }
            }
 
            for(int row = 0; row < dataGridView2.Rows.Count; row++)
            {
                gaussSolver.RightPart[row] = Convert.ToInt32(dataGridView2.Rows[row].Cells[0].Value);
            }
            
            int error = gaussSolver.SolveMatrix();
 
            if (error == 0)
            {
                dataGridView3.Rows.Clear();
                dataGridView3.Columns.Clear();
 
                dataGridView3.Columns.Add("", "");
 
                for (int row = 0; row < gaussSolver.Answer.Length; row++)
                {
                    dataGridView3.Rows.Add();
                    dataGridView3.Rows[row].Cells[0].Value = gaussSolver.Answer[row];
                }
            }
            else if (error == 1)
            {
                MessageBox.Show("Нет решения");
            }
            else if (error == 2)
            {
                MessageBox.Show("Множество решений");
            }
1
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
11.11.2019, 18:19  [ТС] 7
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Интеграция, как и обещал)
То есть она должна выглядеть так:
0
Вложения
Тип файла: rar WindowsFormsApplication1.rar (223.3 Кб, 1 просмотров)
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
11.11.2019, 18:33  [ТС] 8
Цитата Сообщение от Cyber_Demon Посмотреть сообщение
То есть она должна выглядеть так:
Но это для 3 уравнений, еще нужно сделать для 4
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
GausMethod Solution = new GausMethod(4, 4);
 
        //заполняем правую часть
        Solution.RightPart[0] = 0;
        Solution.RightPart[1] = 0;
        Solution.RightPart[2] = 0;
        Solution.RightPart[3] = 0;
 
        //заполняем матрицу
        for(int i=0;i<4;i++)
          for(int j=0;j<4;j++)
            Solution.Matrix[i][j]=0; 
 
        //решаем матрицу
        Solution.SolveMatrix();
 
        //сохраняем ответ
        ReturnVal[0] = Solution.Answer[0];
        ReturnVal[1] = Solution.Answer[1];
        ReturnVal[2] = Solution.Answer[2];
        ReturnVal[3] = Solution.Answer[3];
Добавлено через 8 минут
Цитата Сообщение от Cyber_Demon Посмотреть сообщение
Но это для 3 уравнений, еще нужно сделать для 4
Код:
И простите что задаю вам еще больше работы, самостоятельно я это сейчас не сделаю
0
nicolas2008
452 / 382 / 126
Регистрация: 30.04.2009
Сообщений: 1,363
Завершенные тесты: 1
11.11.2019, 19:31 9
Лучший ответ Сообщение было отмечено Cyber_Demon как решение

Решение

Cyber_Demon, оно и так будет работать. количество уравнений задается пользователем
1
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
11.11.2019, 19:43  [ТС] 10
Цитата Сообщение от nicolas2008 Посмотреть сообщение
оно и так будет работать. количество уравнений задается пользователем
Да извините я наверное неправильно ввел размерность матрицы)

Я очень вам благодарен если будут вопросы, дам знать)
0
Cyber_Demon
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 7
11.11.2019, 21:41  [ТС] 11
Цитата Сообщение от nicolas2008 Посмотреть сообщение
оно и так будет работать. количество уравнений задается пользователем

У меня вопрос почему я не могу добавить столбцы через конструктор, просто хочу сделать вот это:
0
Миниатюры
Реализовать решения СЛАУ методом Гаусса  
nicolas2008
452 / 382 / 126
Регистрация: 30.04.2009
Сообщений: 1,363
Завершенные тесты: 1
12.11.2019, 00:59 12
Цитата Сообщение от Cyber_Demon Посмотреть сообщение
У меня вопрос почему я не могу добавить столбцы через конструктор, просто хочу сделать вот это
Количество столбцов динамическое поэтому они создаются програмно, все что в конструкторе, естественно, очищается.
Смотрите где вызывается метод dataGridView.Columns.Add("", ""); и вместо пустых строк указывайте названия столбцов
0
12.11.2019, 00:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2019, 00:59

Решение СЛАУ методом Холецкого
Поготите написать программу Решение СЛАУ методом Холецкого.Порядок системы N&lt;=10.Коэффициенты...

Как реализовать фильтр гаусса
Привет всем! Делаю фильтр гаусса, чет непонятно как реализовать и в гугле не могу найти кроме ...

Решение системы методом Гаусса
Здравствуйте. Задали написать решение системы методом гаусса. Имеется расширенная матрица и...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.