Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Применение MATLAB для решения аналитических задач моделирования. Учебное пособие
.pdf
Функции и операции для работы со строками
81
>> s1 = "Information ";
s2 = "System";
s = s1 + s2
s = "Information System"
Команда strvcat(s1,s2, ...), введенная в командной строке, выполняет
вертикальное объединение строк sl, s2, ... в массив символов S аналогично
char(sl,s2...).
str1=['stu'] ;
str2=['dent'] ;
t = strvcat(str1,str2)
t = 2×4 char array 'stu ' 'dent'
Команда strcmp( 'str1' . 'str2') сравнивает str1 и str2 и возвращает 1
(истина), если они идентичны, и 0 (ложь) – в противном случае. Текст
считается идентичным, если размер и содержание каждого из них одинаковы. Возвращаемый результат tf имеет логический тип данных. Входные
параметры могут быть любой комбинацией строковых массивов, символьных векторов и массивов ячеек из символьных векторов.
Ввод в командной строке tf = strcmp(s1,s2) вернет строковый массив ячеек tf, содержащий единицы для совпадающих элементов двух массивов и нули для всех остальных, причем если один из массивов не является символьным, а представляет собой строковый массив, то перед сравнением из сравниваемых копий рядов массива символов удаляются пробелы в конце строк. Массивы для сравнения должны быть одинакового
размера либо один из массивов может являться скалярной ячейкой.
Примеры ввода команд в строке и результаты их выполнения приведены ниже:
>> str1='info';
str2='info';
c = strcmp(str1,str2)
c = logical 1
s1 = 'upon';
s2 = {'Once','upon';

Применение Matlab для решения аналитических задач моделирования
82
'a','time'};
tf = strcmp(s1,s2)
tf = 2x2 logical array
0 1
0 0
s1 = {'Time','flies','when';
'you''re','studying','smth.'};
s2 = {'Time','drags','when';
'you''re','anxiously','waiting.'};
tf = strcmp(s1,s2)
tf = 2x3 logical array
1 0 1
1 0 0
Команда strncmp( 'str1, 'str2' ,n) сравнивает первые n символов строк
(с учетом регистра) и возвращает логическую единицу в случае, если
сравниваемые строки str1 и str2 содержат n первых совпадающих символов, и логический ноль в противном случае. Аргументы strl и str2 могут
являться строковыми массивами ячеек (рис. 38).
Ввод команды tf = strncmp(S,T,n) в командной строке возвращает
строковый массив ячеек tf, содержащий единицы для n-идентичных элементов массивов и нули для всех остальных. Пример ввода соответствующих команд в командную строку приведен ниже:
» strl='computer';
» strl='computer for studying':
» с = strncmp(strl,str2,3)
с = logical 1
» с = strncmp(strl,str2,15)
с = logical 0
К устаревшим командам можно отнести strmatch. В современных
версиях программы использовать ее не рекомендуется. Официальный
сайт рекомендует использовать другую функцию в зависимости от вашей
цели. Чтобы определить, какие элементы массива начинаются с указанного текста, используйте startWith или strncmp. Чтобы найти наилучшее соответствие для указанного текста, используйте validatestring.
Чтобы найти точное совпадение для указанного текста, используйте match. Команда x = strmatch(str, strarray) просматривает строки тексто-

Функции и операции для работы со строками
83
вого массива strarray, чтобы найти элементы, начинающиеся с текста, содержащегося в str, и возвращает соответствующие им индексы строк. Если strmatch не находит str в straray, то x – пустая матрица ([]). Любые конечные пробельные символы в str или straray игнорируются при сопоставлении. Команда strmatch работает быстрее всего, когда strray представляет
собой массив символов.
»strarray = ["max" "minimax" "maximum"];
x = strmatch("max", strarray)
x = 2×1
1
3
Команда newStr = strjust(str) возвращает выровненную по правому
краю версию текста в строке str. Если str имеет конечные пробельные символы, то они становятся ведущими пробельными символами в newStr. Если
str не имеет завершающих пробельных символов, то strjust возвращает
строку без изменений (рис. 39). Пробелы перемещаются в конец массива
символов. Функция strjusttS, 'left' возвращает массив символов, где все
строки выровнены влево, a strjusttS. 'center' выравнивает строки по центру.
Рис. 38. Ввод строки
в «чистом» виде
Рис. 39. Ввод строки с использованием
выравнивания
Команда strrep(strl,str2) находит и заменяет подстроки. Например:
newStr = strrep (str, old, new)
заменяет все вхождения строки old о в строке str на new.

Применение Matlab для решения аналитических задач моделирования
84
Если какой-либо входной параметр является нескалярным масси-
вом строк или массивом ячеек из символьных векторов, то другие входные параметры должны иметь совместимые размеры:
str = ["the great course";
"and the easy exam "]
str = 2x1 string
"the great course"
"and the light exam"
newStr = strrep(str,'the','a')
newStr = 2x1 string
"a great course "
"and a light exam "
Лабораторная работа № 11.
Обработка строк
Ввести символьную строку, состоящую не менее чем из 10 слов,
выполнить задание согласно варианту из табл. 33. В случае отсутствия
определенного выравнивания символов по условию задания, выполнить
выравнивание по центру.
Таблица 33
Варианты заданий для лабораторной работы № 11
№
варианта
Задание
1
Сравнить 2 строки, вывести элемент с индексом i, где i – номер
варианта
2
Заменить подстроку во введенной строке, выровнять полученную
строку по центру
3
Вывести индексы элементов подстроки 2, найденные в строке 1
4
Выполнить вертикальное склеивание 2 строк
5
Найти количество вхождений подстроки 2 во введенную строку1
6
Вывести индексы элементов подстроки 2, найденные в строке 1
7
Склеить 2 строки, вывести элемент с индексом i, где i – номер варианта
8
Заменить подстроку во введенной строке, выровнять полученную
строку по правому краю
9
Склеить вертикально 2 строки, вывести элемент с индексом i, где
i – номер варианта
10
Найти количество вхождений подстроки во введенную строку

Функции времени и даты Matlab
85
ФУНКЦИИ ВРЕМЕНИ И ДАТЫ MATLAB
Для создания объектов типа дата используется функция datetime.
Для разделения полученного в результате ее выполнения вектора-строки
на годы, месяцы, дни, часы, минуты, данные нужно указывать в виде массива строк ячеек в правильном формате (рис. 40, 41).
Рис. 40. Результат вызова функции datetime
Рис. 41. Пример разделения строки с помощью datavec
Функция календаря с различными атрибутами используется для
возврата текущего времени и даты. Например, calendar (d) отображает
календарь для месяца, на который приходится день, указанный аргументом d, а calendar (y, m) отображает календарь для месяца m (месяц) и год
для (год). В этом случае дни отсчитываются от начала календаря.
Вызов функции календаря без атрибутов отображает матрицу 6x7 с
календарем на текущий месяц (рис. 42). Недели начинаются в воскресенье
(Sunday) и заканчиваются в субботу (Saturday) (рис. 43).
Функция clock используется для вывода на экран текущей даты и
времени в формате вектора. Данные представлены в виде 6 элементов
десятичной форме (год месяц день час минуты секунды) (рис. 44).
Чтобы вывести данные в виде целых чисел используется функция
fix(clock) (рис. 45).

Применение Matlab для решения аналитических задач моделирования
86
Рис. 42. Результат выполнения
команды calendar
Рис. 43. Результат выполнения
команды calendar (d)
Рис. 44. Результат вызова функции clock
Рис. 45. Результат округления функции clock с помощью fix
Основные функции для работы с датой и временем приведены в
табл. 34.
Массивы Y, М и D, H, Ml и S должны иметь одинаковую размер-
ность, при этом любые из них могут быть скалярами.
При вызове функции cputime время работы может выйти за рамки
внутреннего представления (рис. 46, 47). В этом случае отсчет времени
начнется заново.
Рис. 46. Результат вызова функции cputime

Функции времени и даты Matlab
87
Таблица 34
Функции для работой с датой и временем
Функции
Назначение
Пример
cputime
Возвращает время работы процессора (в секундах), использованное системой MATLAB с момента ее запуска
>> cputime
ans = 87
date
Возвращает строку, содержащую
дату в формате дд–ммм–гггг
(день–месяц–год)
>> a = date
a = '07–Jan–2022'
datenum
Преобразует строку даты в порядковый номер даты, который отсчитывается с некоторого начального дня
(01.01.00) Для функции datenum возможны следующие вариации:
datenum(str)
Преобразует дату, заданную строкой
str, в порядковый номер даты. Строка
string должна иметь один из следующих форматов: 0, 1, 2, 6, 13, 14, 15
или 16, определенных для функции
datestr
>> datenum(str)
ans = 738528
datenum(Y.M.D)
Возвращает порядковый номер даты
для соответствующих массивов элементов Y, М и D (год, месяц, день)
>> n1 = datenum('01–Jan–2000')
n1 = 730486
datenum(Y.M.D,H.MI,
S)
Возвращает порядковый номер даты
для соответствующих массивов элементов Y, М, D, H, Ml и S (год, месяц, день, часы, минуты, секунды)
>> Y =[2000,2001];
M = [1,12];
D = 01;
C = datenum(Y,M,D)
C = 730486 731186
datestr(D,
dateform)
Преобразует каждый элемент массива порядковых номеров даты D в
строку
datevec(A)
Преобразует входные величины в
массив размерности пхб, каждая
строка которого представляет собой
вектор [Y,M.D,H,MI,S]. Первые пять
элементов вектора – целые числа.
Массив А может состоять или из
строк, удовлетворяющих формату
функции datestr, или из скалярных
величин, созданных функциями
datenum и now
>> c = datevec
('01/01/00')
c =
= 2000 1 1 0 0 0

Применение Matlab для решения аналитических задач моделирования
88
Рис. 47. График вызова функции cputime
Аргумент dateform определяет формат результата; dateform может
быть номером или строкой в соответствии с табл. 35.
Таблица 35
Форматы представления даты
Атрибуты Dateform
Результат
'dd–rmiM–yyyy HH:MM:SS'
01–Jan–2000 11:50
'dd–mmM–yyyy'
01–Jan–2000
'mm/dd/yy'
01/01/00
' mmm '
Jan
'm' J 'mm'
1
'mm/dd'
01/01
'dd' 1 'ddd'
Sat
'd'
S
'УУУУ'
2000
'УУ
00
' mmmyy '
Jan00
'HH:MM:SS'
11:50:00

Функции времени и даты Matlab
89
[Y, M., D, H. MI, S] = datevec (A) – возвращает компоненты вектора
даты как индивидуальные переменные.
Любой компонент входного вектора, который не вписывается в
нормальный диапазон дат, преобразуется в следующий диапазон (так,
например, несуществующая дата June 31 преобразуется в July 1). Допускаются значения нулевого месяца и нулевого дня. Например:
>> n = datevec(710223)
n =
1944 7 10 0 0
О eomday (Y, М) – возвращает последний день года и месяца, заданных соответственно элементами массивов Y и М. Пример (нахождение
високосных лет двадцатого столетия):
>> у = 1900:1999;
>> Е = eomday(y.2);
>> y(find(E==29))
ans=
Columns 1 through 6
1904 1908 1912 1916 1920 1924
Columns 7 through 12
1928 1932 1936 1940 1944 1948
Columns 13 through 18
1952 1956 1960 1964 1968 1972
Columns 19 through 24
1976 1980 1984 1988 1992 1996
etime(t2,tl) – возвращает длительность промежутка времени (в се-
кундах), задаваемого векторами t1 и t2. Векторы должны удовлетворять
формату, выдаваемому функцией clock:
Т = [год месяц день час минуты секунды].
Функция работает некорректно, если в текущий промежуток времени попадут границы месяца или года, что, однако, случается крайне
редко и исправляется при повторе операции. Пример (вычисляется время,
затрачиваемое на быстрое преобразование Фурье с 2048 точками):
>> х = rand(2048,l); t = clock; fft(x); etime(clock.t);etime (clock.t)
ans = 0.0500

Применение Matlab для решения аналитических задач моделирования
90
now – возвращает текущие время и дату в форме числа. Использо-
вание rem(now.l) возвращает только время, a floor(now) – только дату.
Пример:
>> t1 = now, t2 = rem(now,1)
t1 = 7.3009e+005
t2 = 0.6455
tic – запускает таймер;
toc – выводит время, прошедшее с момента запуска таймера;
t = toe – возвращает прошедшее время в переменной t. Пример:
>> tic.surf(peaks(50));toc
elapsed_time = 0.7600
[N,S] = weekday(D) – возвращает день недели в виде числа N и в
виде строки S для каждой даты массива D. Пример:
>> D = [728647,735730]:[N.S] = weekday(D)
N = 2 1
S = Mon Sun
Для этого скачаем данные с ежемесячными значениями индекса
NAO с сайта noaa, а именно Monthly mean NAO index since January 1950 –
Ascii format for downloading.
Загрузим скачанные данные в MATLAB:
>>nao = load('norm.nao.monthly.b5001.current.ascii');
Первый столбец – годы, второй – месяцы, третий – значения индекса NAO. Сам временной ряд выглядит так:
>>plot (nao(:,3))
Для того чтобы по оси Х отображались даты, первое, что приходит
в голову – скормить функции plot вектор с годами.
>>plot (nao(:,1),nao(:,3))
Как видите, ничего хорошего из этого не вышло. Будем помещать
на график даты другим путём. И для начала используем именно datenum.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
