Ортонормированная матрица
Ортонормированная матрица – матрица, столбцы и строки которой образуют системы ортонормированных векторов. Решения задачи для матрицы, которая является и не является ортонормированной. Разработка структур данных и алгоритмов. Код программы на языке С++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.03.2012 |
Размер файла | 429,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Содержательная (исходная) постановка задачи
Предварительные сведения
Рассматриваем матрицу размера NЧM вида:
Матрица в программе представляется в виде двумерного массива (array[i][k]). Например, пусть дана матрица:
В программном языке эта матрица будет представляться в виде массива, элементами которого являются:
Array [0][0] = 1; array [0][1] = 2; array [0][2] = 3 ; array [1][0] = 4 ;
array [1][1] = 5 ; array [1][2] = 6 ; array [2][0] = 7 ; array [2][1] = 8;
array [2][2] = 9.
Ортонормированная (в высшей терминологии ортогональная) матрица - это такая матрица столбцы и строки которой образуют системы ортонормированных векторов, то есть:
где , n -- порядок матрицы, а дjk -- символ Кронекера.
Другими словами, скалярное произведение строки на саму себя равно 1, а на любую другую строку -- 0. Так же и для столбцов.
Постановка задачи
Матрица является ортонормированной, если скалярное произведение каждой пары различных строк равно 0, а скалярное произведение каждой строки на себя равно 1. Определить, является ли заданная матрица A размера N M ортонормированной.
Указания
Использовать две функции:
1. Функция которая проверяет условие ортонормированности матрицы и возвращает true, либо false
2. Функция, которая непосредственно производит перемножение строк.
2. Анализ и пример решения задачи
Анализ задачи
Как упоминалось ранее для определения ортонормированности функции нужно проверить скалярное произведение строки саму на себя и затем произведение этой строки с последующими.
· Чтобы в программе не выполнялись лишние действие перемножения строки с другими надо начинать не с первой строки а с последующий (соответственно, когда мы в цикле дойдем до последний строки, то она только перемножается сама на себя).
· Перемножение строк реализуется в функции с помощью сложения всех пар произведений типа array[i][k]*array[j][k] b и записи получившийся суммы в отдельную переменную.
· В проверяющей функции после каждого полученного результата перемножения строк сверяем полученный результат с условием, если неверно, то возвращаем false. А после окончания цикла проверки возвращаем true (таким образом, если матрица ортонормирована, то она пройдет все проверки и вернет true)
Пример решения задачи
Рассмотрим 2 примера решения задачи, для матрица, который является и не является ортонормированной.
1.Матрица ортонормированна
Размещено на http://www.allbest.ru/
· Сначала находим произведение первой строки саму на себя:
S= 1*1 + 0*0 + 0*0 + 0*0=1 (удовлетворяет условию )
· Затем происходит перемножение первой строки на 2,3 и 4
S1,2 =0; S1,3 =0; S1,4 =0 (удовлетворяет условию)
· Далее рассматриваем вторую строку (во-первых производим умножение саму на себя, а затем рассматриваем произведения уже со строками 3 и 4)
S22 =1; S2,3 =0; S2,4 =0 (удовлетворяет условию)
· По аналогии рассматриваем третью строку.
S32 =1;S3,4 =0 (удовлетворяет условию)
· Для последний строки производи только перемножение саму на себя
S42 =1 (удовлетворяет условию)
· Матрица прошла все проверки, значит она ортонормирована.
2.Матрица не ортонормирована.
Размещено на http://www.allbest.ru/
· Сначала находим произведение первой строки саму на себя:
S= 1*1 + 0*0 + 0*0 + 0*0=1 (удовлетворяет условию )
· Затем происходит перемножение первой строки на 2,3 и 4
S1,2 =1*0 + 0*2 + 0*0 + 0*1=0; (удовлетворяет условию)
S1,3 =1*3 + 0*5 + 0*3 +0*6=3 (не удовлетворяет условию)
· Функция возвращает false значит матрица не ортонормирована.
3. Формальная постановка задачи
Исходные данные
1) Размеры матрицы целые числа n и m.
2) Двумерный массив размера nЧm содержащий элементы вещественные числа двойной точности.
Ограничения на исходные данные
Числа n и m должны быть меньше 50, т.к. array это статический массив размера 50Ч50.
Матрица состоит из вещественных чисел
Результирующие (выходные) данные
Выходными данными является отчет о том ортонормированная ли матрица.
Связь выходных данных с исходными данными
Опишем формально связь между выходным булевским значением otvet и входной матрицей a. Для этого используем следующие функции над матрицей.
1) Функция определяющая скалярное произведение строки на строку в математическом представлении выглядит следующим образом:
где m - это количество столбцов в матрице
2)Функция проверки ортонормированности матрицы:
Перебор строк от i = 1 до n
j=i;
Если S? 1 (значение S берется из первой функции)
то Функция = false;
Перебор строк от j = i+1 до n-1
Если S? 0
то Функция = false;
Конец перебора;
Конец перебора;
Функция = true;
Т.е. входная матрица проверяется в функции 2, для реализации скалярного произведения строк используется функция 1. В проверяющей функции рассматриваются все возможные варианты скалярного произведения строк и сравниваются с условием задания. Если хоть одно условие не совпадает, то функция завершается и принимает false. Если матрица успешно проходит все проверки, то по завершению начального цикла функции присваивается значение true.
4. Спецификация программы
Исходные данные (ИД)
Перечень и основные характеристики ИД:
1) n - количество строк в матрице
2) m - количество столбцов в матрице
3) Array - Массив, задающий проверяемую матрицу A, вида
Ограничения на исходные данные:
1) Для n и m задан диапазон 2 n, m 50 , это натуральные числа типа int
2) Элементы вводимого массива любые числа диапазона double
Место и форма представления исходных данных:
1) n и m вводится с клавиатуры в процессе диалога, порядок ввода и форма представления описаны в сценарии диалога;
2) данные, задающие матрицу, вводятся с клавиатуры в процессе диалога через пробел с переносом на следующую строку, тогда когда все элементы строки будут введены. Введённая матрица будет выглядить следующим образом
Размещено на http://www.allbest.ru/
Функции программы по обработке исключительных ситуаций
Исполняющая система прекращает выполнение программы, выдавая диагностическое сообщение об ошибке в следующих случаях:
1) если значение n не принадлежит диапазону 2…50;
2) если значение m не принадлежит диапазону 2…50;
Выходные данные
Состав выходных данных:
1) Сообщения, которые просят пользователя ввести размеры матрицы.
2) Если размер массива не вписывается в рамки 50 на 50, то выводиться сообщения об ошибке.
3) Сообщение, которое просит пользователя последовательно ввести элементы матрицы.
4) Отчет о проверки матрицы.
Место и форма представления выходных данных. Выходные данные выводятся на экран.
1) Вывод сообщений диалога пользователя по порядку подробнее описано в пункте описание сцен диалога.
Макет вывода выходных данных в диалоговом окне в том случае, когда матрица ортонормированна
Размещено на http://www.allbest.ru/
Сценарий диалога
Общая схема диалога:
1.Сцена 1 (ввод, анализ количества строк в матрице + если размер недопустим выводиться сообщение об ошибке).
2.Сцена 2 (ввод, анализ количества столбцов в матрице + если размер недопустим выводиться сообщение об ошибке).
3.Сцена 3 (ввод элементов матрицы).
4.Сцена 4 (вывод отчета).
Описание сцен диалога. Описание сцены 1 приведено в табл. П.1.
Таблица П.1
Алгоритм ведения диалога |
Сообщения пользователю и его реакция |
|
Вывод запроса |
Enter number of rows |
|
Ввод n |
??<Enter> |
|
Если размер неверный |
Matrix size is inappropriate |
Описание сцены 2 аналогично сцене 1 приведено в табл. П.2.
Таблица П.2
Алгоритм ведения диалога |
Сообщения пользователю и его реакция |
|
Вывод запроса |
Enter Number of Columns |
|
Ввод m |
??<Enter> |
|
Если размер неверный |
Matrix size is inappropriate |
Описание сцены 3 приведено в табл. П.3.
Таблица П.3
Алгоритм ведения диалога |
Сообщения пользователю и его реакция |
|
Вывод запроса |
Lead elements of the matrix |
|
Ввод массива array |
??...<Space>…??...<Space>??...<Space>…??...<Space>...??...<Space>…??...<Space> |
5. Разработка структур данных и алгоритмов
Алгоритм тела программы
Алгоритм функции summa:
6. Код программы на языке С++
#include <iostream>
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()
{
double array[50][50]={0};
int n=0,m=0;//максимальное количество строк и столбцов
bool otvet=0;//булевская переменная, отображающая результат проверки массива
cout << "Enter number of rows" << endl;
cin >> n;// Вводим колличество строк
/*если количество строк больше, чем максимальное количество элементов,
выводим сообщение о превышении максимального значения и завершаем работу программы */
if (n>50||n<2){
cout << "Matrix size is inappropriate" << endl;
return 0;}
cout << "Enter Number of Columns" << endl;
cin >> m;// Вводим колличество столбцов
/*если количество столбцов больше, чем максимальное количество элементов,
выводим сообщение о превышении максимального значения и завершаем работу программы */
if (m>50||m<2){
cout << "Matrix size is inappropriate" << endl;
return 0;}
cout << "Lead elements of the matrix" << 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 << "Matrix is orthonormal";//Выводим сообщение об ортонормированности матрицы
else cout << "Matrix is not orthonormal";//Выводим сообщение о том, что матрица не ортонормарованна
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;
}
7. Испытание программы
n = 54 |
Matrix size is inappropriate |
|
n = 12 m = -3 |
Matrix size is inappropriate |
|
n = 4 m = 5 array = 1 0 3 7 8 9 0 0 5 1 3 8 0 6 1 0 0 0 0 1 |
Matrix is not orthonormal |
|
n = 4 m = 5 array = 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 |
Matrix is orthonormal |
|
n = 2 m = 2 array = 1 0 0 1 |
Matrix is orthonormal |
ортонормированная матрица программа
8. Анализ результатов
Программа прошла тестирование со всеми возможными входными данными, а так же проверкой всех диалогов между пользователем-программой. В процессе тестирования некорректной работы программы не выявлено. Следовательно программа может быть признана завершенной и годной к эксплуатации.
Размещено на Allbest.ru
Подобные документы
Этапы реализации класса "вещественная матрица", позволяющего осуществлять основные операции с вещественными прямоугольными и транспонированными матрицами. Листинг программы, которая реализует тип данных "вещественная матрица" и принципы работы с ними.
лабораторная работа [85,6 K], добавлен 07.05.2011Создание приложения на языке C Windows Form. Характеристика особенностей интерфейса GDI+. Композиция преобразований. Матрица A, поворот на 90 градусов. Матрица B, масштабирование по оси X с коэффициентом 2. Матрица C, сдвиг на три единицы по оси Y.
лабораторная работа [88,8 K], добавлен 12.06.2015Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.
контрольная работа [210,5 K], добавлен 25.03.2015Описание методов вычисления определителя матрицы. Математическое решение задачи с применением метода исключения Гаусса с выбором главного элемента. Схема алгоритма программы, описание переменных и структур данных, текст программы на языке Pascal.
курсовая работа [438,8 K], добавлен 16.02.2011Разработка программы для решения системы линейных уравнений методом Крамера и с помощью расширенной матрицы на языке С++. Описание метода Крамера. Структура программы: заголовочные файлы, типы данных, переменные, идентификаторы, операторы, массивы.
курсовая работа [32,3 K], добавлен 19.01.2009Формулировка задачи о замочной скважине, подойдет ли ключ к замку. Составление блок-схемы, которая позволяет наглядно увидеть ход выполнения поставленной задачи. Описание использованных переменных. Анализ результатов вычислений, листинг программы.
курсовая работа [134,1 K], добавлен 07.05.2012Алгоритм - последовательность арифметических и логических действий над числовыми значениями переменных, приводящих к вычислению результата решения задачи. Транспонированная, диагональная и единичная матрица. Вектор-строка и столбец. Блок-схемы алгоритмов.
курсовая работа [447,9 K], добавлен 15.06.2013Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.
курсовая работа [391,1 K], добавлен 30.09.2013Программа на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран. Лист с начальными данными. Ввод начальных (нулевых) значений для расчетных величин. Вспомогательные переменные, счетчики циклов. Формирование матрицы данных.
курсовая работа [2,7 M], добавлен 01.12.2010Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.
курсовая работа [115,5 K], добавлен 22.05.2010