Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
#1

Определение матрицы на ортонормированность - C++

02.02.2013, 21:28. Просмотров 789. Ответов 3
Метки нет (Все метки)

Здравствуйте уважаемые форумчане. Подскажите в решении задачки пожалуйста.
Определить, является ли заданная матрица ортонормированной, т.е скалярное произведение каждой пары различных строк (столбцов) нулю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2013, 21:28     Определение матрицы на ортонормированность
Посмотрите здесь:

Для матрицы найти такие k, что k-я строка матрицы совпадает с k-м столбцом C++
C++ Определение максимальных и минимальных значений матрицы" На С++
C++ Определение количества столбцов матрицы, состоящих из положительных элементов
Определение обратной матрицы C++
Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы C++
C++ Определение матрицы смежности графа по заданной матрице инцидентности
Определение ортогональной матрицы (проверить) C++
Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент C++
C++ Представить определение функции, позволяющей переставить местами элементы указанной строки и побочной диагонали квадратной матрицы
Поменять большие элементы в строке матрицы с маленькими элементами этой же матрицы C++
Определение суммы минимальных элементов по всем строкам прямоугольной матрицы C++
C++ Определение номера строки квадратной матрицы, сумма элементов которой максимальна

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Михан
8 / 8 / 1
Регистрация: 05.11.2009
Сообщений: 74
03.02.2013, 00:34     Определение матрицы на ортонормированность #2
Немного конкретики не помешало бы. Например: какую матрицу вы хотите видеть?(размеры). Как вы ее собираетесь заполнять?(Рандомно или в ручную)
Михан
8 / 8 / 1
Регистрация: 05.11.2009
Сообщений: 74
03.02.2013, 00:50     Определение матрицы на ортонормированность #3
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
 
/*
 
* Функция выполняет скалярное перемножение твух строк матрицы
 
* m - колличество столбцов в матрице
 
* i - номер первой перемножаемой строки
 
* j - номер второй перемножаемлй строки
 
* k - интератор столбца
 
* array - проверяемый массив
 
* s - сумма произведений пар элементов
 
* Функция возвращает значение переменной s
 
*/
 
double summa(double array[50][50], int m, int i, int j);
 
/*
 
* Функция выполнят проверку ортонормированности матрицы
 
* n - колличество строк в матрице
 
* i - интератор основной строки
 
* j - интератор второй строки
 
* array - проверяемый массив
 
* s - значение, которое возвращает функция summa,
 
* обозначающее результат перемножения двух строк
 
* Функция возвращает true, если матрица ортонормированна
 
* и false в противоположном случае
 
*/
 
bool proverka (double array[50][50], int n, int m);
 
int main()
 
{
     setlocale(LC_ALL,"Russian");
 
double array[50][50]={0};
 
int n=0,m=0;//максимальное количество строк и столбцов
 
bool otvet=0;//булевская переменная, отображающая результат проверки массива
 
cout << "Введите число строк" << endl;
 
cin >> n;// Вводим колличество строк
 
/*если количество строк больше, чем максимальное количество элементов,
 
выводим сообщение о превышении максимального значения и завершаем работу программы */
 
if (n>50||n<2){
 
cout << "Размер матрицы является несоответствующим" << endl;
 
return 0;}
 
cout << "Введите число столбцов" << endl;
 
cin >> m;// Вводим колличество столбцов
 
/*если количество столбцов больше, чем максимальное количество элементов,
 
выводим сообщение о превышении максимального значения и завершаем работу программы */
 
if (m>50||m<2){
 
cout << "Размер матрицы является несоответствующим" << endl;
 
return 0;}
 
cout << "Введите элементы матрицы" << endl;
 
//Осуществляем ввод элементов массива
 
for(int i=0;i<n;i++)
 
{
 
for(int k=0;k<m;k++)
 
cin >> array[i][k];
 
cout << endl;
 
}
 
otvet=proverka (array, n, m);//Вызывает функцию проверки и возвращаемое значение присваеваем булевской переменной otvet
 
//Выводим сообщение о результате проверки
 
if (otvet==true)
 
cout << "Матрица ортонормирована";//Выводим сообщение об ортонормированности матрицы
 
else cout << "Матрица не ортонормирована";//Выводим сообщение о том, что матрица не ортонормарованна
 
getch();
 
return 0;
 
}
 
bool proverka (double array[50][50], int n, int m)
 
{
 
int i=0, j=0;
 
double s=0;
 
// начало проверяющего цикла где сначала проверяем строки с 0 до n-1
 
for (i=0; i<n; i++){
 
// передаем дополнительной строке значение основной, для проверки скалярного произведения строки саму на себя
 
j=i;
 
s=summa(array, m, i, j);
 
// проверка условия
 
if (s!=1)
 
// если сумма не равна 1 то возвращаем false
 
return false;
 
// перебираем дополнительные строки начиная с i + 1
 
for (j=i+1; j<n; j++){
 
s=summa(array, m, i, j);
 
// проверка условия
 
if (s!=0)
 
// если сумма не равна 0 то возвращаем false
 
return false;}}
 
// после окончания проверки возврашем true
 
return true;
 
}
 
double summa(double array[50][50], int m, int i, int j)
 
{
 
double s=0;
 
for (int k=0; k<m; k++)
 
// суммируем произведение пар элементов
 
s+=array[i][k]*array[j][k];
 
// в конечном итоге возвращаем результат скалярного произведения двух строк
 
return s;
 
}
Миниатюры
Определение матрицы на ортонормированность   Определение матрицы на ортонормированность  
Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
03.02.2013, 09:32  [ТС]     Определение матрицы на ортонормированность #4
Цитата Сообщение от Михан Посмотреть сообщение
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
 
/*
 
* Функция выполняет скалярное перемножение твух строк матрицы
 
* m - колличество столбцов в матрице
 
* i - номер первой перемножаемой строки
 
* j - номер второй перемножаемлй строки
 
* k - интератор столбца
 
* array - проверяемый массив
 
* s - сумма произведений пар элементов
 
* Функция возвращает значение переменной s
 
*/
 
double summa(double array[50][50], int m, int i, int j);
 
/*
 
* Функция выполнят проверку ортонормированности матрицы
 
* n - колличество строк в матрице
 
* i - интератор основной строки
 
* j - интератор второй строки
 
* array - проверяемый массив
 
* s - значение, которое возвращает функция summa,
 
* обозначающее результат перемножения двух строк
 
* Функция возвращает true, если матрица ортонормированна
 
* и false в противоположном случае
 
*/
 
bool proverka (double array[50][50], int n, int m);
 
int main()
 
{
     setlocale(LC_ALL,"Russian");
 
double array[50][50]={0};
 
int n=0,m=0;//максимальное количество строк и столбцов
 
bool otvet=0;//булевская переменная, отображающая результат проверки массива
 
cout << "Введите число строк" << endl;
 
cin >> n;// Вводим колличество строк
 
/*если количество строк больше, чем максимальное количество элементов,
 
выводим сообщение о превышении максимального значения и завершаем работу программы */
 
if (n>50||n<2){
 
cout << "Размер матрицы является несоответствующим" << endl;
 
return 0;}
 
cout << "Введите число столбцов" << endl;
 
cin >> m;// Вводим колличество столбцов
 
/*если количество столбцов больше, чем максимальное количество элементов,
 
выводим сообщение о превышении максимального значения и завершаем работу программы */
 
if (m>50||m<2){
 
cout << "Размер матрицы является несоответствующим" << endl;
 
return 0;}
 
cout << "Введите элементы матрицы" << endl;
 
//Осуществляем ввод элементов массива
 
for(int i=0;i<n;i++)
 
{
 
for(int k=0;k<m;k++)
 
cin >> array[i][k];
 
cout << endl;
 
}
 
otvet=proverka (array, n, m);//Вызывает функцию проверки и возвращаемое значение присваеваем булевской переменной otvet
 
//Выводим сообщение о результате проверки
 
if (otvet==true)
 
cout << "Матрица ортонормирована";//Выводим сообщение об ортонормированности матрицы
 
else cout << "Матрица не ортонормирована";//Выводим сообщение о том, что матрица не ортонормарованна
 
getch();
 
return 0;
 
}
 
bool proverka (double array[50][50], int n, int m)
 
{
 
int i=0, j=0;
 
double s=0;
 
// начало проверяющего цикла где сначала проверяем строки с 0 до n-1
 
for (i=0; i<n; i++){
 
// передаем дополнительной строке значение основной, для проверки скалярного произведения строки саму на себя
 
j=i;
 
s=summa(array, m, i, j);
 
// проверка условия
 
if (s!=1)
 
// если сумма не равна 1 то возвращаем false
 
return false;
 
// перебираем дополнительные строки начиная с i + 1
 
for (j=i+1; j<n; j++){
 
s=summa(array, m, i, j);
 
// проверка условия
 
if (s!=0)
 
// если сумма не равна 0 то возвращаем false
 
return false;}}
 
// после окончания проверки возврашем true
 
return true;
 
}
 
double summa(double array[50][50], int m, int i, int j)
 
{
 
double s=0;
 
for (int k=0; k<m; k++)
 
// суммируем произведение пар элементов
 
s+=array[i][k]*array[j][k];
 
// в конечном итоге возвращаем результат скалярного произведения двух строк
 
return s;
 
}
вы прям Бог. спасибо большое
Yandex
Объявления
03.02.2013, 09:32     Определение матрицы на ортонормированность
Ответ Создать тему
Опции темы

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