Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 1
з курсу „ Обробка сигналів ”
Тема:
Ознайомлення з основами роботи в системі MATLAB.
Виконання елементарних операцій над сигналами.
Львів – 2006
Мета роботи: Вивчити можливості системи MatLab. Набути навики
роботи в даному середовищі.
Порядок виконання роботи
1. Запустити систему MatLab.
2. Ознайомитися з демонстраційною програмою, звернувши увагу на
виконання елементарних операцій над матрицями і векторами (demo).
(Додаткова інформація міститься також у файлі MatLab_book.pdf).
3. В командному вікні MatLab проілюструвати можливі операції над
матрицями та векторами.
4. Вивчити можливості системи для роботи з графікою.
5. Написати власну програму, яка реалізовує завдання, задане варіантом.
1. Завдання.
Варіант 9. Задати цілочисельну матрицю розміру 10 x 7. Знайти матрицю, що отримується з даної, шляхом перестановки рядків – першого з останнім, другого з передостаннім і т.д.
2. Перелік і короткий опис основних функцій
Створення векторів та матриць.
Ввід векторів і матриць з командного рядка відбувається в квадратних дужках - «[]», при чому стовпці (тобто елементи в рядку) відділяються комою - «,» або пробілом – « », а самі рядки крапкою з комою – «;».
Приклад: a=[12,13,14;1 3 8] a =
12 13 14
1 3 8
Утворилася матриця розміру 2x3
ndims(c) ans = 2 Розмірність матриці «с» становить 2
size(c) ans =2 3 Розмір матриці «с» становить 2 рядки і 3 стовпці (2x3)
Звертання до елементів матриць і векторів
Доступ до елементів вектора відбувається за допомогою індексу в круглих дужках після імені масиву, в якому зберігається вектор. Елементам масиву можна присвоювати нові значення, вони можуть приймати участь у виразах, з них можна формувати нові масиви. Для того, щоб певні елементи одного вектору помістити в інший у заданому порядку, існує індексація за допомогою вектору. Доступ до елементів матриці відбувається за допомогою двох індексів – номерів рядка та стовпця, також в круглих дужках після імені матриці. Розміщення елементів матриці в пам’яті визначає ще один спосіб звертання до них. Матриця А розміру m на n зберігається у виді вектору довжиною m, в якому елементи матриці розташовані один за одним, по рядках: [A(1,1) A(1,2) …A(1,n) … A(m,1) A(m,2) …A(m,n)].
Тому, для доступу до елементів матриці можна використовувати лише один індекс, який задає порядковий номер елементу матриці в загальному векторі. Зручним є також спосіб звертання до цілих блоків елементів векторів або матриць. Для цього використовується індексація за допомогою двокрапки – «:». При цьому до двокрапки вказується перший елемент блоку, після – останній. Якщо треба виділити з матриці цілий рядок або стовпець, то в якості одного з індексів слід вказати номер цього рядка, або стовпця, а інший індекс замінити двокрапкою. При виділення блоку до кінця матриці(вектору), можна не вказувати її розміри, а використати елемент end.
Логічні функції над масивами
all Перевірка на наявність нульовогоелементу в масиві.
any Перевірка на наявність ненульового елементу в масиві.
find Знаходження індексів і значень ненульових елементів масивів.
Знищення рядків, стовпців, елементів.
В MatLab парні квадратні дужки – «[]» позначають пустий масив, який дозволяє знищувати стовпці і рядки матриці, або елементи вектору. При цьому розмір результуючої матриці буде менший, ніж вхідної.
Приклади: v=[2 3 4 7 ] v = 2 3 4 7 Утворення вектору «v»
v(1)=[] v = 3 4 7 Знищення першого елементу «v»
m = [2 0 3
1 1 4
6 1 3]
m(1,:)=[] m = 1 1 4
6 1 3 Знищення першого рядка матриці «m»
Створення матриць спеціального виду.
zeros(n,m), zeros(n). Створення матриці нулів
ones(n,m), ones(n). Створення матриці одиниць
eye(n,m) або eye(n) Створення одиничної матриці
rand(n,m) або rand(n) Матриця заповнена випадковим чином між нулемі одиницею.
randn(n,m) або randn(n) Матриця заповнена випадковим чином з нормальним розподілом
diag Створення діагональної матриці
diag(n,m) Створення матриці з заповненою бічною діагоналлю
diag(n) Виділення діагоналі матриці в вектор
Інші операції над масивами.
cat Об’єднання масивів, відповідні розміри повинні співпадати.
fliplr Перестановка стовпців матриці зліва направо, повертає змінену матрицю.
flipud Перестановка рядків матриці зверху вниз, повертає змінену матрицю.
rot90 Поворот матриці проти годинникової стріли на 90 градусів.
tril Виділення нижнього трикутника матриці
triu Виділення верхнього трикутника матриці
repmat Створення блочної матриці з однакових блоків
M= repmat(A,m,n) – матриця М буде складатися з m блоків по вертикалі і
n блоків по горизонталі, кожен блок є матрицею А
reshape Зміна форми матриці або вектора.
A=reshape(x,m,n) – формування матриці m на n з елементів масиву х,
довжиною m*n. Елементи х вибираються послідовно, утворюючи стовпці А
Елементарні операції над векторами і матрицями
Додавання, віднімання над векторами і матриця однакового розміру відбувається та, ніби вони є скалярними величинами. Для цього використовуються відповідні позначення арифметичних операцій: «+» і «-». Також, всі елементарні математичні функції в MatLab пристосовуються до виду вхідних аргументів і якщо вони є векторами чи матрицями, то результат буде відповідно. Вектором або матрицею. Крім того, існує можливість примусово задати поелементну роботу з масивами.
Множення і ділення векторів і матриць
Як відомо, операції множення і ділення для векторів і матриць не є тривіальними.
Вектор можна помножити на вектор скалярно (внутрішній добуток), векторно, або утворити так званий зовнішній добуток. Результатом скалярного добутку є
число, векторного – вектор, а зовнішнього – матриця.
Якщо a і b вхідні вектори, то їх скалярний добуток буде обраховано командою sum(a.*b), або за допомогою вбудованої функції dot(a,b). Векторний добуток a ´b визначається лише для векторів, визначених в тривимірному просторі, тобто таких, що складаються з трьох елементів. Результатом також є вектор з тривимірного простору. Для знаходження векторного добутку в MatLab існує функція cross(a,b).
Для множення матриць слід пам’ятати, що відповідні розмірності в них повинні співпадати множення виконується за допомогою оператора «*».
Транспонування матриці виконується за допомогою «.’», а знаходження спряженої матриці за допомогою «’».
Піднесення до степеня квадратної матриці, виконується за допомогою оператора «^».
Поелементне піднесення до степеня матриці, виконується за допомогою оператора «.^».
Для ділення елементів одної матриці на відповідний елемент другої, використовується «./», а другої на першу, відповідно «.\».
Функції обробки даних для матриць і векторів
prod Знаходження добутку елементів вектора. Для матриці знаходяться добутки по стовпцях.
Щоб знайти добуток по рядках слід вказати prod(M,2), де М – матриця
cumprod Знаходження нагромаджуючого добутку.
Для матриці знаходяться нагромаджуючих добутків по стовпцях.
sum Знаходження суми елементів вектора.
Для матриці знаходяться суми по стовпцях. Щоб знайти суму по рядках слід вказати sum(M,2).
cumsum Знаходження нагромаджуючої суми.
Для матриці знаходяться нагромаджуючі суми по стовпцях. Щоб
знайти суму по рядках слід вказати sum(M,2).
min Знаходження мінімального елементу у векторі.
Для матриця відбувається знаходження мінімумів у кожному стовпці
max Знаходження максимального елементу у векторі.
Для матриця відбувається знаходження максимальних елементів у кожному стовпці
length Знаходження довжини вектора.
sort Впорядковує елементи кожного зі стовпців матриці в порядку
зростання. Щоб знайти сортувати по рядках слід ввести sort (M,2).
3. Текст написаної програми та пояснення алгоритму її роботи.
clc % очистка екрану
clear all % очистка пам'яті
choice=input('Generate matrix randomly? [Y/N] : ','s');
% запит на спосіб введення елементів матриць випадковим чином
switch choice
case {'Y','y'} % при ствердній відповіді
a=randint(7,10,[0,99]) % генерація матриці a розміром 10x7 випадково
case {'N','n'} % при негативній відповіді
a=input('Input matrix a =') % запит на ввід матрицs вручну
otherwise % при іншій відповіді
error('Wrong answer') % повідомлення про помилку
end
flipped=flipud(a); % перестановка рядків матриці зверху вниз
disp('Flipped up-down matrix:')
disp(flipped) % вивід "перевернутої" матриці
Висновки: виконуючи дану лабораторну роботу я вивчив основні можливості системи MatLab та набув навиків роботи в середовищі системи, на прикладі ознайомився із виконання елементарних операцій над матрицями і векторами.