Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
silverserfer
-123 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12
#1

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

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

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

Незнаю как решить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2012, 01:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двумерные массивы (СЛАУ). Привести систему к треугольному виду (C++):

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

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

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

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

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

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

22
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
31.12.2012, 13:56 #16
и чем же мой пример плох?
0
silverserfer
-123 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12
31.12.2012, 14:20  [ТС] #17
Цитата Сообщение от sandye51 Посмотреть сообщение
и чем же мой пример плох?
тем что он еще хуже того что нашел до этого)) я думал что хуже исходника нету а оказывается есть, и это ваш!))
0
palva
2655 / 1882 / 275
Регистрация: 08.06.2007
Сообщений: 7,220
Записей в блоге: 4
31.12.2012, 14:29 #18
Цитата Сообщение от sandye51 Посмотреть сообщение
и чем же мой пример плох?
Наверно тем, что код ему не нужен. Он же написал. Ему надо алгоритм. А код по нему он сам хочет написать.
1
nonedark2008
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,828
31.12.2012, 14:30 #19
Цитата Сообщение от sandye51 Посмотреть сообщение
и чем же мой пример плох?
Тем, что там используются не общеизвестные функции. emmintrin.h - я такой в первый раз вижу >_>
__m128d - странный тип, используемый в SIMD 2 - странные инструкции для процессора. Походу это что-то с чем-то для оптимизации кода. Только вопрос, а зачем это обычному студенту, тем более такое никто не приподает. Вот спросит препод - и что ему отвечать? Короче, слишком много надо знать, чтобы такое использовать.
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
31.12.2012, 14:36 #20
Цитата Сообщение от nonedark2008 Посмотреть сообщение
emmintrin.h - я такой в первый раз вижу >_>
ну это не мои проблемы, что ты это впервые видишь. Это никакая не сторонняя библиотека
я пишу код и выкладываю здесь просто так (так сказать потренироваться для себя), а не чтобы его показывал преподу (мне конечно не жалко, если этот код примут)

silverserfer, аргументы просто блеск

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

[удалено]

да потому что там половино всего расписано, чтобы ваш код разбирать себе головную боль создавать. Я лучше сам алгоритм узнаю точный а потом сам напишу.
0
-=ЮрА=-
Заблокирован
Автор FAQ
31.12.2012, 15:09 #22
Для всех дочитавших эту тему,(но не для автора данной темы!) привожу код на С++ для метода Гаусса из поста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
Миниатюры
Двумерные массивы (СЛАУ). Привести систему к треугольному виду  
silverserfer
-123 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12
31.12.2012, 15:35  [ТС] #23
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Для всех дочитавших эту тему,(но не для автора данной темы!) привожу код на С++ для метода Гаусса из поста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
31.12.2012, 15:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2012, 15:35
Привет! Вот еще темы с ответами:

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

Как привести матрицу к верхнему треугольному виду? С++ (Имеется код нахождения нижней треуг. матрицы) - C++
Нахождение нижней треуг. матрицы: for (i=0, k=nn-1; i&lt;nn&amp;&amp;k&gt;=0; i++, k--) for (j=0; j&lt;i;...

Свести матрицу к треугольному виду - C++
for (int i = 1; i &lt; N; ++i) for (int k = i; k &lt; N; ++k) for (int j = N-1; j &gt;= 0; --j) if (mas !=0 &amp;&amp; mas !=0 &amp;&amp; mas != 0)...

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


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

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

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