Операції над матрицями
Елементами матриць і векторів служать елементи деякої числової системи, такі як дійсні числа, комплексні числа або, наприклад, цілі числа по модулю простого числа. Числова система визначає, яким чином повинні складатися і перемножуватися числа. Ці визначення можна розповсюдити і на матриці.
Визначимо додавання матриць (matrix addition) таким чином. Якщо А = (аij) і В = (bij) - матриці розміром m хn, то їх сумою є матрицяC= (cij) = А+В розміромmхn,яка визначаєтьсяспіввідношенням cij=аij + 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 х р, елементи якої визначаються рівнянням:
Матриці мають багато (але не усі) властивостей алгебри, притаманнізвичайним числам. Одинична матриця є нейтральним елементом по відношенню до множення:
Множення матриць асоціативне: А (ВС) = (АВ) С, для будь-яких сумісних матриць А, В і С. Множення матриць дистрибутивневідносно складання:А(В +С) =АВ + АС,(В + С)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();
}
ЗАВДАННЯ ДО ВИКОНАННЯ
Скласти програму, яка вирішує задачу обробки двомірного масиву з додатковою умовою:
• розмірність матриці повинна вводитися при виконанні програми.
Зміст звіту
Тема, короткі теоретичні відомості.
Завдання згідно варіанту.
Блок-схема.
Текст програми.
Результат роботи програми (скріншоти).
Висновки.