С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/88: Рейтинг темы: голосов - 88, средняя оценка - 4.97
19 / 19 / 1
Регистрация: 16.09.2010
Сообщений: 100

Написать три алгоритма решения СЛАУ: Метод прогонки, метод квадратных корней, метод вращений

01.09.2012, 17:29. Показов 16273. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал писать курсовую. Нужно написать три алгоритма решения СЛАУ: прогонки, квадратных корней, вращений.
С методом прогонки более менее все ясно, хотя все равно столбец иксов не совпадает со столбцом решений по методу гаусса онлайн. Выкладываю то что уже написал. Прошу любой помощи, у меня тут или ошибки в коде или возможно в корне неправильный подход, потому что ответы не совпадают с решениями онлайн. Сами алгоритмы брал из википедии и книжки, но возможно неверно реализовал.
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
//прогонки
                //коэфф
                p[0] = -matrix[0, 1] / matrix[0, 0];
                q[0] = d[0] / matrix[0, 0];
                for (int i = 1; i < columns-1; i++)
                {
                    p[i] = -matrix[i, i + 1] / (matrix[i, i] + matrix[i, i - 1] * p[i - 1]);
                    q[i] = (d[i] - matrix[i, i - 1] * q[i - 1]) / (matrix[i, i] + matrix[i, i - 1] * p[i - 1]);
                }
                p[columns-1] = 0;
                q[columns - 1] = (d[columns - 1] - matrix[columns - 1, columns - 2] * q[columns - 2]) / (matrix[columns - 1, columns - 1] + matrix[columns - 1, columns - 2] * p[columns-2]);
                x[columns - 1] = q[columns-1];
                for (int i = columns-2; i >= 0; i--)
                {
                    x[i] = p[i] * x[i + 1] + q[i];
                }
                //NaN и бесконечность
                for (int i = 0; i < columns; i++)
                {
                    if (x[i] != x[i])
                    {
                        MessageBox.Show("Система не имеет решения! Было получено NaN - Not a Number!");
                        return;
                    }
                    if (x[i] == System.Double.NegativeInfinity || x[i] == System.Double.PositiveInfinity)
                    {
                        MessageBox.Show("Система не имеет решения! Было получено бесконечное число!");
                        return;
                    }
                }
                //
                //заполняем x в таблицу С
                for (int i = 0; i < columns; i++)
                    dataGridView3[0, i].Value = x[i];
                //невязка для прогонки
                dataGridView4[0, 0].Value = matrix[0, 0] * x[0] + matrix[0, 1] * x[1] - d[0];
                for (int i = 1; i < columns-1; i++)
                {
                    dataGridView4[0,i].Value = matrix[i, i - 1] * x[i - 1] + matrix[i, i] * x[i] + matrix[i, i + 1] * x[i + 1] - d[i];
                }
                dataGridView4[0, columns - 1].Value = matrix[columns - 1, columns - 2] * x[columns - 2] + matrix[columns - 1, columns - 1] * x[columns - 1] - d[columns-1];
                //
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
//метод квадратных корней
//находим L верхнетреугольную
                L[0, 0] = Math.Sqrt(matrix[0,0]);
                
                for (int i = 0; i < columns; ++i)
                    for (int j = 0; j < columns; ++j)
                    {
                        L[0, j] = matrix[0, j] / L[0, 0];
 
                        //если не отриц число
                        if (i > 0)
                        {
                            double buf_l = 0;
                            for (int l = 0; l < i - 1; ++l)
                                buf_l = L[l, i] * L[l, i];
 
                            if (matrix[i, i] - buf_l >= 0.0d)
                                L[i, i] = Math.Sqrt(matrix[i, i] - buf_l);
                            else
                            {
                                MessageBox.Show("Система не имеет решений, так как матрица не является положительно определенной!");
                                return;
                            }
                        }
 
 
 
                        if (j > i)
                        {
                            double buf_l2 = 0;
                            for (int l = 0; l < i - 1; ++l)
                                buf_l2 = L[l, i] * L[l, j];
                            L[i, j] = (matrix[i, j] - buf_l2) / L[i, i];
                        }
 
                        if (i > j)
                            L[i, j] = 0;
                    }
                //теперь получим транспонированную Lt (нижнетреугольная)
                double[,] Lt = trans(L);
 
                //Lt*y = b
                double[] y = triangle(Lt, d);
                //L*x = y
                double[] res = triangle(L, y);
 
                //
                //заполняем x в таблицу С
                for (int i = 0; i < columns; i++)
                    dataGridView3[0, i].Value = res[i];
                //невязка
 
                for (int i = 0; i < columns; i++)
                {
                    dataGridView4[0, i].Value = 0;
                    for (int j = 0; j < columns; j++)
                        dataGridView4[0, i].Value = double.Parse(dataGridView4[0, i].Value.ToString()) + matrix[i, j] * res[j];
                    dataGridView4[0, i].Value = double.Parse(dataGridView4[0, i].Value.ToString()) - d[i];
 
                }
        double[,] trans(double[,] mat)
        {
            int columns = trackBar1.Value;
            double[,] buf = new double[columns, columns];
            for (int i = 0; i < columns; ++i)
                for (int j = 0; j < columns; ++j)
                    buf[i, j] = mat[j, i];
 
            return buf;
        }
 
        double[] triangle(double[,] mat, double[] d)
        {
            int columns = trackBar1.Value;
            double[] res = new double[columns]; // решение
            double sum;
            int j;
 
            res[columns - 1] = d[columns - 1] / mat[columns - 1, columns - 1];
            sum = 0;
            for (int z = columns - 2; z >= 0; --z)
            {
                sum = 0;
                for (j = z + 1; j < columns; j++)
                {
                    sum = sum + mat[z, j] * res[j];
                    res[z] = (d[z] - sum) / mat[z, z];
                }
            }
            return res;
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2012, 17:29
Ответы с готовыми решениями:

Метод вращений Якоби для решения СЛАУ
Привет! Ребят, помогите пожжжжжжалуйста!!! Написал метод вращений, но X находятся неправильно. :(Помогите найти ошибку!!!! Выкладываю...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод простых итераций и метод Зейделя для решения СЛАУ
1. Методом простых итераций и методом Зейделя решить СЛАУ вида Bx=с B=\begin{pmatrix}21 &amp; 3 &amp; 1 &amp; 1\\ 3 &amp; 21 &amp; 2...

5
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.09.2012, 22:56
Есть код на дельфи, если поможет, могу выложить... (для прогонки, МПИ, вращения...)
0
19 / 19 / 1
Регистрация: 16.09.2010
Сообщений: 100
02.09.2012, 18:00  [ТС]
Psilon, буду благодарен.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.09.2012, 19:18
Вот архив всех программы по ЧМ, которые писали. Якоби = Вращения
Вложения
Тип файла: rar Вычмат.rar (2.63 Мб, 1096 просмотров)
3
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.09.2012, 21:52
В блокнотике (а лучше в notepad++) открываете файлы с расширением .pas, там все есть.
1
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 2
28.06.2016, 12:13
ЦеЗарЬ, здравствуйте, можете помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2016, 12:13
Помогаю со студенческими работами здесь

Метод вращений[СЛАУ]
Собственно, у кого что есть. дайте пожалуйста...)) зарание спасибо)

Метод прогонки для СЛАУ
Народ, я почти умер. Писал метод прогонки, работает неправильно, выдает что-то близкое, но неточно. код: #include...

Метод прогонки для СЛАУ
необходимо реализовать решение слау методом прогонки, в конце сделать оценку погрешности, помогите пожалуйста!!!

Метод квадратных корней
Ребята, помогите пожалуйста решить СЛАУ методом квадратных корней с точностью 0.001 на Turbo Pascal. Вот система из трех уравнений: ...

Схема Холецкого (метод квадратных корней)
Составила программу, но результат выдается неверный. x=0.0299 0.0336 0.0293 -0.0635 A должно быть: x=-0.1119 ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru