Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
-29 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12

Двумерные массивы (СЛАУ). Привести систему к треугольному виду

30.12.2012, 01:24. Показов 6656. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы.С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше данной величины.

Незнаю как решить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.12.2012, 01:24
Ответы с готовыми решениями:

С помощью допустимых изменений привести систему к треугольному виду...
Надо выполнить вот это задание ": Коефіцієнти системи лінійних рівнянь задані у вигляді прямокутної матриці. З допомогою допустимих...

Привести вектор к треугольному виду
Я решаю систему лин. уравнений одной малоизвестной модификацией метода Гаусса. В чем суть: => есть вектор с таким содержимым: ...

Привести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к...

22
-29 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12
31.12.2012, 14:39  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Тем, что там используются не общеизвестные функции. emmintrin.h - я такой в первый раз вижу >_>
__m128d - странный тип, используемый в SIMD 2 - странные инструкции для процессора. Походу это что-то с чем-то для оптимизации кода. Только вопрос, а зачем это обычному студенту, тем более такое никто не приподает. Вот спросит препод - и что ему отвечать? Короче, слишком много надо знать, чтобы такое использовать.
Вот точно! В точку ! Я не понимаю чего там понаписано, к тому же я как бы сам еще хочу понять алгоритм.

[удалено]

да потому что там половино всего расписано, чтобы ваш код разбирать себе головную боль создавать. Я лучше сам алгоритм узнаю точный а потом сам напишу.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
31.12.2012, 15:09
Для всех дочитавших эту тему,(но не для автора данной темы!) привожу код на С++ для метода Гаусса из поста5, котрый после отработки функции PryamoiHod(n, a, b); привод систему к треугольному виду (как видим изменений от кода поста 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
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
134
135
136
137
138
#include <cmath>
#include <iostream>
using namespace std;
 
void ShowVector(int n, double * vec);
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
    int i,j,n;
    double **a, *b, *x;
    char chInp = 0;
    do
    {
        cout<<"Enter NUM of equations: ";cin>>n;
        //Выделяем память под матрицу А и векторы В и Х
        a = new double *[n];
        b = new double [n];
        x = new double [n];
        for(i = 0; i < n; i++)
        {
            a[i] = new double[n];
            //Ввод a
            for(j = 0; j < n; j++)
            {
                cout<<"a["<<i + 1<<"]["<<j + 1<<"] = ";
                cin>>a[i][j];cin.get();
            }
        }
        //Ввод b
        for(i = 0; i < n; i++)
        {
            cout<<"b["<<i + 1<<"] = ";
            cin>>b[i];cin.get();
        }
        
        cout<<"\tSee input\r\n";
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
        
        cout<<"\tSolving on Gauss method\r\n";
        PryamoiHod(n, a, b);
        cout<<"Forvard Gauss course\r\n";//Прямой ход
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
 
        ObratniHod(n, a, b, x);
        cout<<"Back Gauss course\r\n";//Обратный ход
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
 
        cout<<"Results :\r\n";
        ShowVector(n, x);
 
        cout<<"Enter Y for new input\r\n";
        cin>>chInp;cin.get();
        //Чистим память
        for(i = 0; i < n; i++)
            delete [] a[i];
        delete [] a;
        delete [] b;
        delete [] x;
        
    }
    while(toupper(chInp) == 'Y');
    return 0;
}
 
void ShowVector(int n, double * vec)
{
    for(int i = 0; i < n; i++)
        cout<<vec[i]<<"\t";
    printf("\r\n");
}
 
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                        if(v != 0)
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][j] = a[i][j] - v*a[k][j];
                        }
                }
        }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
Миниатюры
Двумерные массивы (СЛАУ). Привести систему к треугольному виду  
1
-29 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12
31.12.2012, 15:35  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Для всех дочитавших эту тему,(но не для автора данной темы!) привожу код на С++ для метода Гаусса из поста5, котрый после отработки функции PryamoiHod(n, a, b); привод систему к треугольному виду (как видим изменений от кода поста 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
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
134
135
136
137
138
#include <cmath>
#include <iostream>
using namespace std;
 
void ShowVector(int n, double * vec);
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
    int i,j,n;
    double **a, *b, *x;
    char chInp = 0;
    do
    {
        cout<<"Enter NUM of equations: ";cin>>n;
        //Выделяем память под матрицу А и векторы В и Х
        a = new double *[n];
        b = new double [n];
        x = new double [n];
        for(i = 0; i < n; i++)
        {
            a[i] = new double[n];
            //Ввод a
            for(j = 0; j < n; j++)
            {
                cout<<"a["<<i + 1<<"]["<<j + 1<<"] = ";
                cin>>a[i][j];cin.get();
            }
        }
        //Ввод b
        for(i = 0; i < n; i++)
        {
            cout<<"b["<<i + 1<<"] = ";
            cin>>b[i];cin.get();
        }
        
        cout<<"\tSee input\r\n";
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
        
        cout<<"\tSolving on Gauss method\r\n";
        PryamoiHod(n, a, b);
        cout<<"Forvard Gauss course\r\n";//Прямой ход
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
 
        ObratniHod(n, a, b, x);
        cout<<"Back Gauss course\r\n";//Обратный ход
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
 
        cout<<"Results :\r\n";
        ShowVector(n, x);
 
        cout<<"Enter Y for new input\r\n";
        cin>>chInp;cin.get();
        //Чистим память
        for(i = 0; i < n; i++)
            delete [] a[i];
        delete [] a;
        delete [] b;
        delete [] x;
        
    }
    while(toupper(chInp) == 'Y');
    return 0;
}
 
void ShowVector(int n, double * vec)
{
    for(int i = 0; i < n; i++)
        cout<<vec[i]<<"\t";
    printf("\r\n");
}
 
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                        if(v != 0)
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][j] = a[i][j] - v*a[k][j];
                        }
                }
        }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
Спасибо что вы его перекодили на с++, я вам вот за это могу сказать большое спасибо. Но все же у меня есть некоторые вопросы , да я не знаю алгоритм как написать этот , но желание научиться все же у меня есть. Вы не могли бы мне сами действия алгоритма где он приводит матрицу к треугольному виду откомментить, я чуть не могу просто понять что для чего там служит im например и мне кажется там еще другие действия есть которые для моей задачи не нужны видимо , это когда с матрицой b какие то действия идут. Если вот вы мне это объясните я вам вот честное слово , буду благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2012, 15:35

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

Как привести матрицу к треугольному виду
Нужно привести матрицу к треугольному виду, можно написать прогу , а то какие нашел не работают ни черта

Задача: привести матрицу к треугольному виду
Блин, я никак не разберусь, может тут кто знает? Задание: Дана квадратная матрица размера m*n. С помощью допустимых преобразований...

Как привести матрицу к треугольному виду по методу гауса?
Может у кого есть прога? Нужна срочно!

Привести матрицу к треугольному виду Гауссом (не могу найти работающий код)
Нужен код для приведения матрицы к треугольному виду (матрица статическая, целочисленная). Пробовал гуглить, в том числе и тут....


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru