Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MB_2.rtf
Скачиваний:
0
Добавлен:
31.12.2019
Размер:
608.63 Кб
Скачать

Кафедра АСОИУ–Афонин В. В.

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

ЧИСЛОВЫЕ И СИМВОЛЬНЫЕ МАССИВЫ СИСТЕМЫ MATLAB

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

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

С

1

2

3

4

5

6

7

8

11

12

13

14

15

16

17

18

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

–1

2

–3

4

–5

6

–7

8

8

7

6

5

4

3

2

1

–0.1

2

–0.3

4

–0.5

6

–0.7

8

121

122

33

44

55

66

77

88

8.1

8.2

8.3

8.4

8.5

8.6

8.7

8.8

91

92

93

94

95

96

97

98

0

1

0

1

0

1

0

1

1

2

3

4

5

6

7

8

0.2

0.1

0.2

0.1

0.2

0.1

0.2

0.1

1

–2

3

–4

5

–6

7

–8

8.1

7.2

6.3

5.4

4.5

3.6

2.7

1.8

0.1

–2

0.3

–4

0.5

–6

0.7

–8

12

13

14

15

16

17

18

19

1.8

2.8

3.8

4.8

5.8

6.8

7.8

8.8

9.1

9.2

9.3

9.4

9.5

9.6

9.7

9.8

1.9

2.9

3.9

4.9

5.9

6.9

7.9

8.9

–1

–2

–3

–4

–5

–6

–7

–8

0.2

0.12

0.23

0.14

0.25

0.16

0.27

0.18

1

–2

3

–4

5

–6

7

–8

8.1

7.2

6.3

5.4

4.5

3.6

2.7

1.8

0.1

–2

0.3

–4

0.5

–6

0.7

–8

12

13

14

15

16

17

18

19

1.8

2.8

3.8

4.8

5.8

6.8

7.8

8.8

9.1

9.2

9.3

9.4

9.5

9.6

9.7

9.8

1.9

2.9

3.9

4.9

5.9

6.9

7.9

8.9

–1

–2

–3

–4

–5

–6

–7

–8

0.2

0.12

0.23

0.14

0.25

0.16

0.27

0.18

1

–2

3

–4

5

–6

7

–8

8.1

7.2

6.3

5.4

4.5

3.6

2.7

1.8

0.1

–2

0.3

–4

0.5

–6

0.7

–8

12

13

14

15

16

17

18

19

1.8

2.8

3.8

4.8

5.8

6.8

7.8

8.8

9.1

9.2

9.3

9.4

9.5

9.6

9.7

9.8

истема MATLAB предназначена для работы с массивами, числовыми или символьными. Даже одно отдельно взятое число MATLAB рассматривает как массив размерностью 1´1 (одна строка, один столбец). Размерность массивов определяется с помощью функции size (см. help size). MATLAB поддерживает формирование и работу с многомерными массивами, например, размерностью 9´8´4 (трехмерный массив). Его интерпретация может быть такой как показано на рис. 2.1.

Рис. 2.1. Пример организации трехмерного массива

Массивы могут формироваться из одного типа данных, например, числовые массивы. Массивы могут быть также символьные, состоящие, например, из строк (набор различных символов). Примеры символьных массивов:

>> str = 'aza',ch = 'w'

str =

aza

ch =

w

Индексация массивов в MATLAB начинается с единицы, как, например, в языке Pascal.

Одной из важных функций для анализа массивов является функция size. Эта функция возвращает в первую очередь размеры заданного массива. Для одномерных массивов удобно пользоваться функцией length (см. help length). Например,

>> str = 'aza'; ch = 'w';

>> a = size(str), b = length(str), c = size(ch), d = length(ch)

a =

1 3

b =

3

c =

1 1

d =

1

Для объединения строк могут быть использованы следующие функции и приемы:

>> str1 = 'baza'; str2 = 'aza'; str3 = 'яблоко';

>> % Горизонтальная конкатенация строк

>> str = strcat(str1, ' ', str2, ' ', str3)

str =

bazaazaяблоко

>> sm = [str1, ' ', str2, ' ', str3]

sm =

baza aza яблоко

>> smv = strvcat(str1, str2, str3) % вертикальная конкатенация

smv =

baza

aza

яблоко

>> msize = size(smv)

msize =

3 6

>> m1 = smv(2, :)

m1 =

aza

>> sm1 = size(m1)

sm1 =

1 6

В случае, когда выполнено обращение к элементу массива, номер которого превышает общую размерность массива, то система MATLAB выводит сообщение об ошибке.

В системе MATLAB предусмотрены матричные и массивные операции. Матричные операции подчиняются известным правилам из алгебры. Например, две матрицы можно перемножить, если их размерности будут иметь следующий вид: n´m и m´k. В общем случае n ¹ k. В то же время в системе MATLAB две матрицы одинаковых размерностей можно перемножить поэлементно.

В системе MATLAB имеются достаточно много встроенных функций для формирования массивов. Например, rand (формирует массив, состоящий из псевдослучайных равномерно распределенных чисел из интервала от 0 до 1 без крайних значений), randi (формирует массив, состоящий из целых псевдослучайных равномерно распределенных чисел для указанного массива и предельного значения), например,

>> randi(3,1,5)

ans =

3 2 1 1 1

>> randi(3,1,5)

ans =

3 1 3 1 3

>> randi(3,1,5)

ans =

2 1 1 2 2

Функция randn (формирует массив, состоящий из случайных нормально распределенных чисел с параметрами 0 и 1), magic (выводит магический квадрат соответствующей размерности), ones (формирует массив единиц), zeros (формирует массив нулей) и другие. С помощью функции reshape можно по заданному массиву изменить его размерности. Например, для матрицы размера 3´8 (24 элемента) можно сформировать матрицы с таким количеством строк и столбцов, чтобы их произведение равнялось 24. Например, 6´4.

Основные функции для работы с массивами можно посмотреть по справке help elmat.

Имеются функции, которые предназначены для функциональных матричных преобразований, например, expm (матричный экспоненциал), logm (матричный логарифм), sqrtm (матричный квадратный корень), funm (функция от матриц, таких как sin, sinh, cos, exp, log, sqrt и т. д.). Эти функции осуществляют разложение в ряд Маклорена (частный случай ряда Тейлора). Например, для матричного экспоненциала разложение в ряд Маклорена имеет следующий вид:

где А – квадратная матрица, t – скалярная величина.

Практическая часть

  1. Основные математические операции с массивами

Рассмотрим примеры формирования массивов и элементарных действий над ними. Действия над массивами будем выполнять в командном окне.

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

>> % строка чисел от 1 до 8 в случайном расположении

>> n = randperm(8)

n =

8 3 6 7 5 1 2 4

>> % формирование квадратной матрицы случайных чисел

>> M = rand(n(3)) % обращение к 3 элементу массива n

M =

0.3517 0.7572 0.5308 0.0119 0.1656 0.4505

0.8308 0.7537 0.7792 0.3371 0.6020 0.0838

0.5853 0.3804 0.9340 0.1622 0.2630 0.2290

0.5497 0.5678 0.1299 0.7943 0.6541 0.9133

0.9172 0.0759 0.5688 0.3112 0.6892 0.1524

0.2858 0.0540 0.4694 0.5285 0.7482 0.8258

>> size(M) % определение размерности массива

ans =

6 6

>> length(M) % определение наибольшей размерности массива

ans =

6

>> % формирование трехмерного массива случайных чисел

>> % по случайному нормальному закону

>> M3 = randn(7,4,3) % по нормальному закону

M3(:,:,1) =

-0.4326 -0.0376 -0.1364 -1.3362

-1.6656 0.3273 0.1139 0.7143

0.1253 0.1746 1.0668 1.6236

0.2877 -0.1867 0.0593 -0.6918

-1.1465 0.7258 -0.0956 0.8580

1.1909 -0.5883 -0.8323 1.2540

1.1892 2.1832 0.2944 -1.5937

M3(:,:,2) =

-1.4410 0.6686 -1.0565 -0.0592

0.5711 1.1908 1.4151 -1.0106

-0.3999 -1.2025 -0.8051 0.6145

0.6900 -0.0198 0.5287 0.5077

0.8156 -0.1567 0.2193 1.6924

0.7119 -1.6041 -0.9219 0.5913

1.2902 0.2573 -2.1707 -0.6436

M3(:,:,3) =

0.3803 -1.8740 0.5689 0.3148

-1.0091 0.4282 -0.2556 1.4435

-0.0195 0.8956 -0.3775 -0.3510

-0.0482 0.7310 -0.2959 0.6232

0.0000 0.5779 -1.4751 0.7990

-0.3179 0.0403 -0.2340 0.9409

1.0950 0.6771 0.1184 -0.9921

>> size(M3) % определение размерности массива

ans =

7 4 3

>> M3(:,:,2) % обращение к заданной части трехмерного массива

ans =

-1.4410 0.6686 -1.0565 -0.0592

0.5711 1.1908 1.4151 -1.0106

-0.3999 -1.2025 -0.8051 0.6145

0.6900 -0.0198 0.5287 0.5077

0.8156 -0.1567 0.2193 1.6924

0.7119 -1.6041 -0.9219 0.5913

1.2902 0.2573 -2.1707 -0.6436

>> % определение размерности заданной части массива

>> length(M3(:,:,2))

ans =

7

>> size(M3(:,:,2))

ans =

7 4

>> % обращение к 2 столбцу третьей части массива М3

>> M_23 = M3(:,2,3)

M_23 =

-1.8740

0.4282

0.8956

0.7310

0.5779

0.0403

0.6771

>> % замена 2 столбца третьей части массива на нулевые элементы

>> M3(:,2,3) = zeros(7,1)

M3(:,:,1) =

-0.4326 -0.0376 -0.1364 -1.3362

-1.6656 0.3273 0.1139 0.7143

0.1253 0.1746 1.0668 1.6236

0.2877 -0.1867 0.0593 -0.6918

-1.1465 0.7258 -0.0956 0.8580

1.1909 -0.5883 -0.8323 1.2540

1.1892 2.1832 0.2944 -1.5937

M3(:,:,2) =

-1.4410 0.6686 -1.0565 -0.0592

0.5711 1.1908 1.4151 -1.0106

-0.3999 -1.2025 -0.8051 0.6145

0.6900 -0.0198 0.5287 0.5077

0.8156 -0.1567 0.2193 1.6924

0.7119 -1.6041 -0.9219 0.5913

1.2902 0.2573 -2.1707 -0.6436

M3(:,:,3) =

0.3803 0 0.5689 0.3148

-1.0091 0 -0.2556 1.4435

-0.0195 0 -0.3775 -0.3510

-0.0482 0 -0.2959 0.6232

0.0000 0 -1.4751 0.7990

-0.3179 0 -0.2340 0.9409

1.0950 0 0.1184 -0.9921

>> % формирование числовой матрицы пользователем

>> A = [1,2,3;4,5,6;7,8,9;10,12,13]

A =

1 2 3

4 5 6

7 8 9

10 12 13

>> A(1,:) = [] % удаление первой строки матрицы

A =

4 5 6

7 8 9

10 12 13

>> D = diag(A) % выделение главной диагонали квадратной матрицы

D =

4

8

13

>> D = diag(A,-1) % выделение поддиагонали

D =

7

12

>> diag([-1,2,3.3]) % формирование квадратной матрицы

ans =

-1.0000 0 0

0 2.0000 0

0 0 3.3000

Задание 1

  1. Создайте прямоугольную матрицу с помощью функции rand при обращении к двум элементам вектора, который создан функцией randperm.

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

  3. Создайте прямоугольную матрицу n´m, где n > 1, m > 1, с помощью функции randi и попытайтесь удалить из нее какой-либо элемент.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]