Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание на L10.doc
Скачиваний:
52
Добавлен:
22.04.2016
Размер:
381.44 Кб
Скачать

Операції над матрицями

Елементами матриць і векторів служать елементи деякої числової системи, такі як дійсні числа, комплексні числа або, наприклад, цілі числа по модулю простого числа. Числова система визначає, яким чином повинні складатися і перемножуватися числа. Ці визначення можна розповсюдити і на матриці.

Визначимо додавання матриць (matrix addition) таким чином. Якщо А = (аij) і В = (bij) - матриці розміром m хn, то їх сумою є матрицяC= (cij) = А+В розміромmхn,яка визначаєтьсяспіввідношенням cijij + bijдляі= 1,2,.., m і j = 1,2,..,n. Іншими словами, складання матриць виконується поелементно. Нульова матриця нейтральна по відношенню до складання матриць: А + 0 = А = 0 + А.

Якщоλ — число, a А = (aij) —матриця, то співвідношення λА = (λaij)визначаєскалярнийдобуток(scalar multiple) матриці на число, яке також виконується поелементно. Частковимвипадком скалярногодобуткує множення на -1, яке дає протилежну (negative) матрицю -1 ∙ А = -А, що має ту ж властивість, що: А + (-А) = 0=(-А)+А.

Відповідно, можна визначити віднімання матриць (matrix subtraction) як складання з протилежною матрицею: А - В = А + (- В).

Матричне множення (matrix multiplication) визначається наступним чином. Матриці А і В можуть бути перемножені, якщо вони сумісні (compatible) в тому сенсі, що число стовпців А дорівнює числу рядків В (у загальному випадку вираження, що містить матричний добуток АВ, завжди подразумевает сумісність матриць А і В). Якщо А = (аij) - матриця розміром m х n, а В = (bij) - матриця розміром n х р, то їх добуток C = АВ представляє собою матрицю C = (Cij) розміром m х р, елементи якої визначаються рівнянням:

дляі= 1,2,..,mіk= 1,2,.., р.

Матриці мають багато (але не усі) властивостей алгебри, притаманнізвичайним числам. Одинична матриця є нейтральним елементом по відношенню до множення:

для любоїматриці Арозміромmхn. Множенняна нульову матрицюдаєнульову матрицю: А0 = 0А = 0.

Множення матриць асоціативне: А (ВС) = (АВ) С, для будь-яких сумісних матриць А, В і С. Множення матриць дистрибутивневідносно складання:А(В +С) =АВ + АС,(В + С)D = BD + СD.

Для n> 1 множення матриць розміромnхnне комутативна. Наприклад, якщо

Множення матриць

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

Элемент ci,j матрицы – ответа принадлежащий i-ой строке и j-му столбцу, вычисляется как произведение i-ой строки первого сомножителя An,m на j-ый столбец второго сомножителя Bm,k.

В результате получается число, равное сумме произведений соответствующих элементов (первый элемент строки на первый элемент столбца плюс второй элемент строки на второй элемент столбца и т. д. и, наконец, плюс произведение последних элементов).

Рассмотрим умножение матриц на примере :

где

 

некоторые свойства матриц (см. рис.):

● если номер строки элемента совпадает с номером столбца (i = j), это означает что элемент лежит на главной диагонали матрицы;

● если номер строки превышает номер столбца (i > j), то элемент находится ниже главной диагонали;

● если номер столбца больше номера строки (i < j), то элемент находится выше главной диагонали.

● элемент лежит на побочной диагонали квадратной матрицы , если его индексы удовлетворяют равенству i + j +1 = n;

● неравенство i + j + 1 < n характерно для элемента находящегося выше побочной диагонали квадратной матрицы;

● соответственно, элементу квадратной матрицы, лежащему ниже побочной диагонали соответствует выражение i + j + 1 > n.

N-размер матрицы.

#include <iostream>

#include <string>

#include <conio.h>

#include <cstdlib>

using namespace std;

const int M = 3, N = 2, K=4;

int main()

{

int x[N][M], y[M][K], c[N][K];

for(int i = 0; i < N; i++)//заполняем матрицу х

{

for (int j = 0; j < M; j++)

{

x[i][j] = rand()%10;

cout<<x[i][j]<<'\t';

}

cout<<endl;

}

cout<<endl<<endl;

for(int i = 0; i < M; i++)//заполняем матрицу у

{

for (int j = 0; j < K; j++)

{

y[i][j] = rand()%10;

cout<<y[i][j]<<'\t';

}

cout<<endl;

}

cout<<endl<<endl;

for(int i = 0; i < N; i++) // i = ряд матрицы x

{

for(int j = 0; j < K; j++) // j = столбец матрицы y

{

int sum = 0;

for(int k = 0; k < M; k++)

{sum += x[i][k] * y[k][j];

}

c[i][j] = sum;

cout<<c[i][j]<<'\t';

}

cout<<endl;

}

_getch();

}

ЗАВДАННЯ ДО ВИКОНАННЯ

Скласти програму, яка вирішує задачу обробки двомірного масиву з додатковою умовою:

• розмірність матриці повинна вводитися при виконанні програми.

Зміст звіту

  1. Тема, короткі теоретичні відомості.

  2. Завдання згідно варіанту.

  3. Блок-схема.

  4. Текст програми.

  5. Результат роботи програми (скріншоти).

  6. Висновки.

Соседние файлы в предмете Теория алгоритмов и автоматов