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

Примеры объединения числовых массивов

>> a = zeros(2,3), b = ones(2,3)

a =

0 0 0

0 0 0

b =

1 1 1

1 1 1

>> c = [a, b]

c =

0 0 0 1 1 1

0 0 0 1 1 1

>> d = [a; b]

d =

0 0 0

0 0 0

1 1 1

1 1 1

>> c1 = cat(2, a,b)

c1 =

0 0 0 1 1 1

0 0 0 1 1 1

>> c2 = cat(1, a,b)

c2 =

0 0 0

0 0 0

1 1 1

1 1 1

>> c3 = cat(3, a,b)

C3(:,:,1) =

0 0 0

0 0 0

C3(:,:,2) =

1 1 1

1 1 1

>> size(c3)

ans =

2 3 2

>> c4 = cat(4, a,b)

C4(:,:,1,1) =

0 0 0

0 0 0

C4(:,:,1,2) =

1 1 1

1 1 1

>> size(c4)

ans =

2 3 1 2

>> c4(:,:,1,1)

ans =

0 0 0

0 0 0

>> c4(:,:,1,2)

ans =

1 1 1

1 1 1

>> c4(:,:,2,2)

??? Index exceeds matrix dimensions.

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

Примеры с магическим квадратом

>> Q7 = magic(7)

Q7 =

30 39 48 1 10 19 28

38 47 7 9 18 27 29

46 6 8 17 26 35 37

5 14 16 25 34 36 45

13 15 24 33 42 44 4

21 23 32 41 43 3 12

22 31 40 49 2 11 20

>> sum(diag(Q7)) % сумма элементов главной диагонали

ans =

175

>> sum(Q7(:,2)) % сумма элементов 2-го столбца

ans =

175

>> Q5 = magic(5)

Q5 =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>> In = inv(Q5)*Q5 % inv - функция обращения квадратной матрицы

In =

1.0000 -0.0000 0 -0.0000 0.0000

0.0000 1.0000 0 0.0000 0.0000

0 0.0000 1.0000 0.0000 0.0000

0.0000 0.0000 -0.0000 1.0000 0.0000

0.0000 0.0000 0.0000 0.0000 1.0000

>> In2 = Q5*inv(Q5)

In2 =

1.0000 0.0000 0 0.0000 -0.0000

0.0000 1.0000 0 0.0000 0

0.0000 0.0000 1.0000 0.0000 -0.0000

0.0000 0.0000 0.0000 1.0000 0.0000

-0.0000 0.0000 0.0000 0.0000 1.0000

Задание 3

  1. Просуммируйте все строки магического квадрата.

  2. Выполните конкатенацию четырех магических квадратов, чтобы размерность полученного массива была 7´7´4.

  3. Выделите главные диагонали из матриц In и In2 и найдите сумму их элементов.

Примечание. Специальные типы матриц, встроенные в MATLAB, можно найти при обращении по справке help gallery.

Рассмотрим некоторые операции со строками.

>> % Перевод к верхнему регистру

>> str = 'Система matlab', strUp = upper(str)

str =

Система matlab

strUp =

СИСТЕМА MATLAB

>> %% Вертикальная конкатенация (объединение)

>> sV = strvcat('Яблоки', 'ГРУШИ', 'matlab', 'simulink')

sV =

Яблоки

ГРУШИ

matlab

simulink

>> %% Выборочная смена регистра

>> sV(1) = lower(sV(1))

sV =

яблоки

ГРУШИ

matlab

simulink

>> sV2 = lower(sV(2,:))

sV2 =

груши

>> sV3 = upper(sV(3, :))

sV3 =

MATLAB

>> sV

sV =

яблоки

ГРУШИ

matlab

simulink

>> % Полный переход к буквам верхнего регистра

>> upper(sV)

ans =

ЯБЛОКИ

ГРУШИ

MATLAB

SIMULINK

>> % Выравнивание букв или символов массива

>> sV = strvcat('ветка', '#', 'matlab', 'simulink')

sV =

ветка

#

matlab

simulink

>> sVR = strjust(sV,'right') % по правому краю

sVR =

ветка

#

matlab

simulink

>> sVC = strjust(sV,'Center') % по центру

sVC =

ветка

#

matlab

simulink

>> sVL = strjust(sV,'Left') % по левому краю

sVL =

ветка

#

matlab

simulink

Примечание. В новых версиях MATLAB вместо strvcat рекомендуется использовать char, например,

>> a = strvcat('aza', '12345678')

a =

aza

12345678

>> b = char('aza', '12345678')

b =

aza

12345678

При вертикальном объединении строк с помощью strvcat или char получается ряды массивов символов одинакового размера, где возможно дополнение пробелов в конце рядов символов. То есть размер каждой строки определяется максимальным размером строки, которая входит в создание вертикального объединения строк.

Задание 4

  1. В массиве строк sVL переместите на правый край только символ #.

  2. Создайте массив строк с помощью strvcat или char, в который поместите свою фамилию, имя и текущий год. Затем выполните выравнивание по разным краям (влево и вправо) и в центр с помощью функции strjust.

Рассмотрим еще некоторые операции над строками, распространенные в программировании.

>> % Заданная строка

>> s1 = 'MATLAB - MATrix LABoratory is a good system'

s1 =

MATLAB - MATrix LABoratory is a good system

>> s2 = 'MAT'; %% искомая подстрока

>> n2 = length(s2); %% длина подстроки

>> k = findstr(s1, s2) %% поиск индексов подстроки в строке

k =

1 10

>> % Выделение и объединение искомой подстроки

>> s12 = s1([k(1) : k(1)+n2-1, k(end) : k(end) + n2 - 1])

s12 =

MATMAT

>> % Замена подстроки в строке новой подстрокой

>> str = strrep(s1, 'a good', 'the best')

str =

MATLAB - MATrix LABoratory is the best system

>> % Выделение подстроки с разделителями

>> st = strtok(str, ', .:;?!')

st =

MATLAB

>> % Выделение подстроки и получение остатка строки

>> [st, rm] = strtok(str, ',.:;-?!')

st =

MATLAB

rm =

- MATrix LABoratory is the best system

>> % Сравнение строк: 1 - одинаковые строки, 0 - разные строки

>> p = strcmp(s1, s1)

p =

1

>> p2 = strcmp(s1, s2)

p2 =

0

>> % Преобразование числового массива в массив символов

>> A = [1,2,3.678] % заданный числовой массив - вектор

A =

1.0000 2.0000 3.6780

>> whos A % что такое массив А

Name Size Bytes Class Attributes

A 1x3 24 double

>> As = num2str(A)

As =

1 2 3.678

>> whos As

Name Size Bytes Class Attributes

As 1x25 50 char

>> % Обратное преобразование

>> Ad = str2num(As)

Ad =

1.0000 2.0000 3.6780

>> % Пример невозможного преобразования

>> As2 = strcat(As, 'z')

As2 =

1 2 3.678z

>> Ad2 = str2num(As2)

Ad2 =

[]

>> whos Ad2

Name Size Bytes Class Attributes

Ad2 0x0 0 double

>> L = length(Ad2) %% длина числового вектора

L =

0

Задание 5

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