
- •2. Matlab.
- •2.9. Символьные вычисления в Matlab.
- •2.9.1. Символьные переменные и функции [1, с. 751].
- •2.9.2. Матрицы и векторы.
- •2.9.3. Вычисления с символьными переменными.
- •2.9.4. Графическое представление функций.
- •2.9.5. Упрощение и преобразование символьных выражений [1, с. 760].
- •2.9.6. Другие возможности символьных преобразований в matlab.
- •2.9.6.1. Численное вычисление интегралов в Matlab.
- •2.9.7.Решение уравнений и систем в символьном виде.
- •2.10. Интерактивное взаимодействие м-функиий с пользователем [2, с. 185].
- •2.11. Работа со строками [1, с. 386].
- •2.11.1. Ввод и сцепление строк.
- •2.11.2. Сервисные функции для работы со строками.
- •2.11.3. Массивы строк.
- •2.11.4. Еще некоторые функции для работы со строковыми переменными.
- •2.11.5. Структуры.
- •2.12. Текстовые файлы [1, с. 392].
2.11.3. Массивы строк.
Удобной возможностью организации строковых переменных являются массивы строк, которые формируются так же, как обычные вектор-столбцы, но в качестве их элементов выступают строки одинаковой длины. Например:
» names = ['Иван'; 'Олег'; 'Петр']
names =
Иван
Олег
Петр
Доступ к строкам в массиве осуществляется при помощи индексации:
» names(1, :)
ans =
Иван
Использование строк разной длины недопустимо:
» surnames = ['Иванов'; 'Васильев'; 'Петров']
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.
Очевидно, что names является двумерным массивом (матрицей), состоящим из символов, поэтому возникает ограничение на одинаковую длину строк. Короткие строки следует дополнить пробелами для достижения максимальной длины строк, входящих в массив. Функция char создает столбец и автоматически добавляет недостающие пробелы:
» surnames = char('Иванов', 'Васильев', 'Петров')
surnames =
Иванов
Васильев
Петров
К первой и последней строке добавились справа два пробела, и длина всех строк стала одинаковой. Для удаления лишних пробелов при доступе к строкам массива предназначена функция deblank:
» surnl = deblank(surnames(1, :) )
surnl =
Иванов
Аргументами char могут быть и массивы строк, что позволяет помещать строки в начало или конец существующих массивов строк, например:
» surnames = char(surnames, 'Сидоров')
surnames =
Иванов
Васильев
Петров
Сидоров
Поиск в массиве строк производится функцией strmatch, входными аргументами которой являются образец подстроки для поиска и массив строк, а выходным - номера строк массива:
» mas = char ( ' Март ' , ' Апрель ' , ' Май' ) ;
» ind = strmatch('Ma', mas )
ind =
1
3
Задание дополнительного третьего аргумента 'exact' означает поиск подстроки целиком, вхождение в различные контексты не учитывается.
2.11.4. Еще некоторые функции для работы со строковыми переменными.
Массив символов можно преобразовать в числовую матрицу, содержащую представление ASCII кода для каждого символа числом с плавающей точкой:
»s = 'Hello';
»a = double(s)
a =
72 101 108 108 111
Обратное преобразование числовых кодов в символы осуществляет функция char :
»s = char(a);
ПРИМЕЧАНИЕ: при преобразовании ASCII кодов в символы необходимо учитывать, какой в этот момент используется (выставлен) шрифт в командном окне. Для разных шрифтов преобразования могут быть не одинаковыми.
При конкатенации текстовых переменных в большую строку можно использовать не только текстовые выражения, но и имена переменных, которым они присвоены:
»h = [s, ' world']
h = Hello world
Для формирования вектора-столбца символов вместо функции char, добавляющей при необходимости пробелы в строки для выравнивания их длин, можно использовать формирование массива ЯЧЕЕК :
»С = {'A'; 'home'; 'bilding'}
С =
'A';
'home';
'bilding'
Можно также преобразовать заполненный символьный массив в массив ячеек из строк с помощью функции cellstr:
»D = char('A', 'AB', 'ABC')
D =
A % char добавляет пробелы в соответствующих строках
AB
ABC
»С = cellstr(D)
'A'
'AB'
'ABC'
Обратное преобразование можно выполнить снова с помощью функции char :
»D = char(С);