Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 1 / 2
Регистрация: 07.12.2016
Сообщений: 35
1

Алгоритм Гаусса: что означает ноль в столбце ?

03.07.2017, 21:10. Показов 431. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте !
Есть вот такая реализация алгоритма Гаусса решения n уравнений с n неизвестными:
C++ (Qt)
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
/*
Решение системы N линейных уравнений с N неизвестными методом Гаусса с выбором главного элемента.
n - кол-во уравнений и неизвестных;
Matrix - полная матрица системы, размерность N строк на N+1 столбцов (последний столбец - свободных членов).
    В ходе решения массив будет изменён !
X - одномерный массив решений (вектор X{x1,,xn}).
Возврашает 1 при неудаче, 0 - решение получено.
*/
int Simq(int n, double **Matrix, double *X)
{
    const double eps = 1e-38;
    double * tmp;
    double max,v,u;
    int i,j,l,k1;
 
    if (n < 1) return 1;
    //ПРЯМОЙ ХОД
    for (i = 0; i < n; i++)//идём по диагонали (i - текущий индекс и строки и столбца)
        {
         //если в текущем столбце есть элемент больше, чем он в текущей строке, то запоминаем номер строки (k1)
        max = fabs(Matrix[i][i]); k1 = i;
        for (l = i+1; l < n; l++)
            if (fabs(Matrix[l][i]) > max) {max = fabs(Matrix[l][i]); k1 = l;}
         //если максимальный элемент не в текущей  строке, то меняем местами строки
        if (k1 != i) //(путём обмена указателей на строки)
            {
            tmp = Matrix[k1];
            Matrix[k1] = Matrix[i];
            Matrix[i] = tmp;
            }
        if (max < eps) return 1; //Что означает ?
        u = Matrix[i][i];
        //первый(идём по диагонали !) элемент в текущей строке теперь максимальный (среди эл. тек. столбца)
        //и после следующей операции должен стать равен 1
         //делим все элементы текущей строки на первый(текущий) элемент.
        for (j = i+1 ; j <= n; j++) 
            Matrix[i][j] /= u;
        for (l = i+1; l < n; l++)//Из следующей строки вычитаем текущую, умноженную на
            {
            v=Matrix[l][i]; //элемент в текущем столбце следующей строки.
            for (j = i+1; j <= n; j++) 
                Matrix[l][j] -= Matrix[i][j]*v;
            }
        }
    //получили верхнюю треугольную матрицу и решение xn
    //прим.: в матрице значения по и ниже главной диагонали не рассчитываются, для уменьшения кол-ва операций,
    //ибо их значения (0 и 1) и так известны.
    //ОБРАТНЫЙ ХОД
    X[n-1] = Matrix[n-1][n];
    for (signed int i = n-2; i >= 0; i--)
        { 
        X[i] = Matrix[i][n];//запоминаем свободный член
        //вычитаем из него уже определённые x домноженные на соответствующий коэфф. в матрице.
        for (j = i+1; j < n; j++) X[i] -= Matrix[i][j]*X[j];
        };
    return 0;
};
Собственно, не могу понять: если в текущем столбце не найдено ненулевых элементов, то что это означает ?
1. Система несовместна или просто не решается так (недостаток алгоритма) ?
2. С математической точки зрения достаточно ли этой проверки ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2017, 21:10
Ответы с готовыми решениями:

Разработать алгоритм вычисления выражения,заданного в первом столбце,введя функцию пользователя, описанную во втором столбце
Подпрограммы простейших функций Разработать алгоритм вычисления выражения,заданного в первом...

Ноль в каждой строке и каждом столбце
Если в каждой строке и в каждом столбце можно выбрать по одному нулевому элементу, то вернуть true,...

Метод Гаусса, косяк с делением на ноль на этапе приведения к треугольному виду
Собственно проблема описана в заголовке. Программа загружает текстовый файл, в котором задана...

СЛАУ методом Гаусса с выбором главного элемента в столбце
СЛАУ методом Гаусса с выбором главного элемента по столбцу.Помогите пожалуйста с кодом...

0
03.07.2017, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2017, 21:10
Помогаю со студенческими работами здесь

Как посчитать значения в столбце при условии того что в другом столбце напротив пустые ячейки
Всем привет, как посчитать значения в столбце при условии того что в другом столбце напротив пустые...

Решить систему методом Гаусса с выбором главного элемента в столбце
Помогите пожалуйста решить систему методом Гаусса с выбором главного элемента в столбце....

Массив: В каждом столбце матрицы найти второй отрицательный элемент, если таких нет, вывести ноль...
Сформировать квадратную матрицу. В каждом столбце найти второй отрицательный элемент.есди таких...

Что означает появление письменности (языка), и что означает реформа письменности (языка)?
Не секрет, что духовность всегда сокрыта в письменности (языке), так высшая стадия развития...


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

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