
Примеры объединения числовых массивов
>> 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
Просуммируйте все строки магического квадрата.
Выполните конкатенацию четырех магических квадратов, чтобы размерность полученного массива была 7´7´4.
Выделите главные диагонали из матриц 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
В массиве строк sVL переместите на правый край только символ #.
Создайте массив строк с помощью 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