36427

Работа с матрицами в Matlab

Лабораторная работа

Информатика, кибернетика и программирование

Например матрицу можно ввести следующим образом: набрать в командной строке разделяя элементы строки матрицы пробелами: =[0. Элементы каждой следующей строки матрицы набираются через пробел а ввод строки завершается нажатием на Enter . Другой способ ввода матрицы основан на том что матрицу можно рассматривать как векторстолбец каждый элемент которого является строкой матрицы.

Русский

2013-09-21

227.5 KB

66 чел.

Лабораторная работа 2

Работа с матрицами в Matlab

Матрицы небольших размеров удобно вводить из командной строки. Существует три способа ввода матриц. Например, матрицу

можно ввести следующим образом: набрать в командной строке (разделяя элементы строки матрицы пробелами): A=[0.7 –2.5 9.1 и нажать <Enter>. Курсор перемещается в следующую строку (символ приглашения командной строки >> отсутствует). Элементы каждой следующей строки матрицы набираются через пробел, а ввод строки завершается нажатием на <Enter>. При вводе последней строки в конце ставится закрывающая квадратная скобка:

>> A=[0.7 -2.5 9.1

8.4 0.3 1.7

-3.5 6.2 4.7]

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

Другой способ ввода матрицы основан на том, что матрицу можно рассматривать как вектор-столбец, каждый элемент которого является строкой матрицы. Поскольку точка с запятой используется для разделения элементов вектор-столбца, то ввод, к примеру, матрицы

осуществляется оператором присваивания:

>> B=[6.1 0.3; -7.9 4.4; 2.5 -8.1];

Введите матрицу В и отобразите ее содержимое в командном окне, набрав в командной строке B и нажав <Enter>.

Очевидно, что допустима такая трактовка матрицы, при которой она считается вектор-строкой, каждый элемент которой является столбцом матрицы. Следовательно, для ввода матрицы

достаточно воспользоваться командой:

>> C=[[0.4; 0.1] [-7.2; -2.1] [5.3; -9.5]]

Обратите внимание, что внутренние квадратные скобки действительно нужны. Оператор C=[0.4; 0.1 -7.2; -2.1 5.3; -9.5] является недопустимым и приводит к сообщению об ошибке, поскольку оказывается, что в первой строке матрицы содержится только один элемент, во второй и третьей — по два, а в четвертой — снова один.

Воспользуйтесь командой whos для получения информации о переменных A, B и C рабочей среды. В командное окно выводится таблица с информацией о размерах массивов, памяти, необходимой для хранения каждого из массивов, и типе — double array:

>> whos A B C

Name Size Bytes Class

A 3x3 72 double array

B 3x2 48 double array

C 2x3 48 double array

Функция size позволяет установить размеры массивов, она возвращает результат в виде вектора, первый элемент которого равен числу строк, а второй — столбцов:

>> s=size(B)

s =

3 2

Сложение и вычитание матриц одинаковых размеров производится с использованием знаков +, -.

Звездочка * служит для вычисления матричного произведения, причем соответствующие размеры матриц должны совпадать, например:

>> P=A*B

P =

46.7700 -84.5000

53.1200 -9.9300

-58.5800 -11.8400

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

Апостроф ' предназначен для транспонирования вещественной матрицы или нахождения сопряженной к комплексной матрице. Для возведения квадратной матрицы в степень применяется знак ^.

Вычислите для тренировки матричное выражение , в котором А, В и С — определенные выше матрицы. Ниже приведена запись в MatLab этого выражения:

>> R=(A-B*C)^3+A*B*C

R =

1.0e+006 *

-0.0454 0.1661 -0.6579

0.0812 -0.2770 1.2906

-0.0426 0.1274 -0.7871

MatLab обладает многообразием различных функций и способов для работы с матричными данными.

Для обращение к элементу двумерного массива следует указать его строчный и столбцевой индексы в круглых скобках после имени массива, например:

>> C(1,2)

ans =

-7.2000

Индексация двоеточием позволяет получить часть матрицы — строку, столбец или блок, например:

>> c1=A(2:3,2)

c1 =

0.3000

6.2000

>> r1=A(1,1:3)

r1 =

0.7000 -2.5000 9.1000

Для обращения ко всей строке или всему столбцу не обязательно указывать через двоеточие начальный (первый) и конечный индексы, то есть операторы r1=A(1,1:3) и r1=A(1,:) эквивалентны.

Для доступа к элементам строки или столбца от заданного до последнего можно использовать end, так же как и для векторов: A(1,2:end). Выделение блока, состоящего из нескольких строк и столбцов, требует индексации двоеточием как по первому измерению, так и по второму. Пусть в массиве T хранится матрица:

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

>> T1=T(2:3,2:4)

T1 =

-5 -6 3

4 5 -1

Индексация двоеточием так же очень полезна при различных перестановках в массивах. В частности, для перестановки первой и последней строк в произвольной матрице, хранящейся в массиве A, подойдет последовательность команд:

>> s=A(1,:);

>> A(1,:)=A(end,:);

>> A(end,:)=s;

MatLab поддерживает такую операцию, как вычеркивание строк или столбцов из матрицы. Достаточно удаляемому блоку присвоить пустой массив, задаваемый квадратными скобками. Например, вычеркивание второй и третьей строки из массива T, введенного выше, производится следующей командой:

>> T(2:3,:)=[]

T =

1 7 -3 2 4 9

-6 -4 7 2 6 1

Индексация двоеточием упрощает заполнение матриц, имеющих определенную структуру. Предположим, что требуется создать матрицу

Первый шаг состоит в определении нулевой матрицы размера пять на пять, затем заполняются первая и последняя строки и первый и последний столбцы:

>> W(1:5,1:5)=0;

>> W(1,:)=1;

>> W(end,:)=1;

>> W(:,1)=1;

>> W(:,end)=1;

Ряд встроенных функций, приведенных в таблице 1, позволяет ввести стандартные матрицы заданных размеров. Обратите внимание, что во всех функциях, кроме diag, допустимо указывать размеры матрицы следующими способами:

числами через запятую (в двух входных аргументах);

одним числом, результат — квадратная матрица;

вектором из двух элементов, равных числу строк и столбцов.

Таблица 1

Функции для создания стандартных матриц

Функция

Результат и примеры вызовов

zeros

Нулевая матрица

F=zeros(4,5) F=zeros(3) F=zeros([3 4])

eye

Единичная прямоугольная матрица (единицы расположены на главной диагонали)

I=eye(5,8) I=eye(5) I=eye([5 8])

ones

Матрица, целиком состоящая из единиц

E=ones(3,5) E=ones(6) E=ones([2 5])

rand

Матрица, элементы которой — случайные числа, равномерно распределенные на интервале (0,1)

R=rand(5,7) R=rand(6) R=rand([3 5])

randn

Матрица, элементы которой — случайные числа, распределенные по нормальному закону с нулевым средним и дисперсией равной единице

N=randn(5,3) N=randn(9) N=randn([2 4])

diag

1) диагональная матрица, элементы которой задаются во входном аргументе — векторе

D=diag(v)

2) диагональная матрица со смещенной на k позиций диагональю (положительные k — смещение вверх, отрицательные — вниз), результатом является квадратная матрица размера length(v)+abs(k)

D=diag(v,k)

3) выделение главной диагонали из матрицы в вектор

d=diag(A)

4) выделение k-ой диагонали из матрицы в вектор

d=diag(A,k)

Данные функии очень удобны, когда требуется создать стандартную матрицу тех же размеров, что и некоторая имеющаяся матрица. Если, к примеру, A была определена ранее, то команда I=eye(size(A)) приводит к появлению единичной матрицы, размеры которой совпадают с размерами A, так как функция size возвращает размеры матрицы в векторе.

Разберем, как получить трехдиагональную матрицу размера семь на семь, приведенную ниже, с использованием функций MatLab.

Введите вектор v с целыми числами от одного до семи v=[1 2 3 4 5 6 7] и используйте его для создания диагональной матрицы и матрицы со смещенной на единицу вверх диагональю. Вектор длины шесть, содержащий пятерки, заполняется, например, так: 5*ones(1,6). Этот вектор укажите в первом аргументе функции diag, а минус единицу — во втором и получите третью вспомогательную матрицу. Теперь достаточно вычесть из первой матрицы вторую и сложить с третьей:

>> T=diag(v)-diag(v(1:6),1)+diag(5*ones(1,6),-1)

Поэлементные вычисления с матрицами производятся практически аналогично, разумеется, необходимо следить за совпадением размеров матриц:

A.*B, A./B— поэлементные умножение и деление;

A.^p — поэлементное возведение в степень, p — число;

A.^B — возведение элементов матрицы A в степени, равные соответствующим элементам матрицы B;

A.' — транспонирование матрицы (для вещественных матриц A' и A.' приводят к одинаковым результатам);

Иногда требуется не просто транспонировать матрицу, но и "развернуть" ее. Вращение матрицы на 90o против часовой стрелки осуществляет функция rot90:

>> Q=[1 2;3 4]

Q =

1 2

3 4

>> R=rot90(Q)

R =

2 4

1 3

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

В MatLab определены и матричные функции, например, sqrtm предназначена для вычисления квадратного корня. Найдите квадратный корень из матрицы

и проверьте полученный результат, возведя его в квадрат (по правилу матричного умножения, а не поэлементно!):

>> K=[3 2; 1 4];

>> S=sqrtm(K)

S =

1.6882 0.5479

0.2740 1.9621

>> S*S

ans =

3.0000 2.0000

1.0000 4.0000

Матричная экспонента вычисляется с использованием expm. Специальная функция funm служит для вычисления произвольной матричной функции.

Все функции обработки данных могут быть применены и к двумерным массивам. Основное отличие от обработки векторных данных состоит в том, что эти функции работают с двумерными массивами по столбцам, например, функция sum суммирует элементы каждого из столбцов и возвращает вектор-строку, длина которой равна числу столбцов исходной матрицы:

>> M=[1 2 3; 4 5 6; 7 8 9]

M =

1 2 3

4 5 6

7 8 9

>> s=sum(M)

s =

12 15 18

Если в качестве второго входного аргумента sum указать 2, то суммирование произойдет по строкам.

Для вычисления суммы всех элементов матрицы требуется дважды применить sum:

>> s=sum(sum(M))

s =

45

Очень удобной возможностью MatLab является конструирование матрицы из матриц меньших размеров. Пусть заданы матрицы:

,   ,   ,   

Требуется составить из М1, М2, М3 и  М4 блочную матрицу М

Можно считать, что М имеет размеры два на два, а каждый элемент является, соответственно, матрицей М1, М2, М3 или М4. Следовательно, для получения в рабочей среде MatLab массива M с матрицей М требуется использовать оператор:

>> M=[M1 M2; M3 M4]

Задания лабораторной работы

В лабораторную работу № 2 входит 4 задания.

Задание 1

Введите матрицы

     

и найдите значения следующих выражений.

Варианты:

Выражение

1

2

3

4

5

6

7

8

9

10

Задание 2

При помощи встроенных функций для заполнения стандартных матриц, индексации двоеточием и, возможно, поворота, транспонирования или вычеркивания получите следующие матрицы:

Варианты:

1.    2.    3.

4.    5.    6.

7.   8.

9.    10.

Задание 3

Сконструировать блочные матрицы (используя функции для заполнения стандартных матриц) и применить функции обработки данных и поэлементные операции для нахождения заданных величин.

Варианты:

1. ,   

2. ,   

3. ,   

4. ,   

5. ,   

6. ,   

7. ,   

8. ,   

9. ,   

10. ,   

Задание 4

Пусть модель поведения объекта с параметрами, заданными в матрице А, описывается функцией f(x). Необходимо рассчитать параметры модели, а именно:

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

Варианты:

1. ;   

2. ;   

3. ;   

4. ;   

5. ;   

6. ;   

7. ;   

8. ;   

9. ;   

10. ;   

PAGE  11


 

А также другие работы, которые могут Вас заинтересовать

16835. Компиляция и подключение модулей 294 KB
  Лекция 8 Компиляция и подключение модулей Для того чтобы сформировать модуль библиотеку с подпрограммами можно отладить подпрограммы в составе основной программы а затем перенести их в модуль. Для использования подпрограмм модуля его надо оттранслировать т. е. сф
16836. Распределение оперативной памяти при выполнении программ 756 KB
  Лекция 9 1. Динамические переменные. Основные понятия Распределение оперативной памяти при выполнении программ Адресуемое пространство ОП в ОС MSDOS организовано сегментами: перенумерованными блоками памяти по 64 Кбайта. Причем сегмент может начинаться с любого фи
16837. Массивы указателей 1.37 MB
  6. Массивы указателей С помощью массивов указателей можно формировать большие массивы и коллекции массивов любых типов. Работа с большими массивами Размер одного массива данных должен быть не более 64 Кбайт. Но в реальных задачах могут использоваться массивы требую...
16838. Массивы и многоуровневая косвенная адресация 564 KB
  Лекция 10 5. Массивы и многоуровневая косвенная адресация Многоуровневая косвенная адресация и одномерные арифметические массивы Многоуровневая адресация имеет место при использовании указателей на указатели на массивы. Рассмотрим это на примерах формирования одн
16839. Связанные структуры 682 KB
  Лекция 11 8. Связанные структуры Основные понятия Записи содержащие указатели позволяют формировать в ОП линейные и нелинейные связанные структуры. К линейным связанным структурам относят например стеки очереди и списки. К нелинейным деревья и сети. Эти структур
16840. Объектно-ориентированное программирование. Методология объектно-ориентированного программирования 362 KB
  Объектно-ориентированное программирование. Основные понятия Методология объектно-ориентированного программирования Фундаментальными понятиями в программировании являются: технология программирования методология метод. Технология программирования...
16841. Подготовка и решение задач на компьютере Этапы полготовки и решения задач на компьютере 428.5 KB
  Лекция 1. Подготовка и решение задач на компьютере Этапы полготовки и решения задач на компьютере Подготовка и решение задач на компьютере имеет следующие этапы: постановка задачи и разработка технического задания; разработка: а информационной мо
16842. ОБ ОДНОМ «МУРАВЬИНОМ» АЛГОРИТМЕ 281 KB
  ОБ ОДНОМ МУРАВЬИНОМ АЛГОРИТМЕ А.А. Кажаров В.М.Курейчик В этой работе рассматривается решение классической NPтрудной задачи о коммивояжере на основе муравьиных алгоритмов. Данная задача без какихлибо изменений в ее интерпретации решается для проектирования СБИС. В...
16843. Проблемы перевода Problems of Translation 142 KB
  Проблемы перевода Problems of Translation В.ГГак Типология преобразований в актантной структуре высказывания при переводе При переводе нередко приходится прибегать к преобразованиям в актантной структуре высказывания особенно когда мы име