Матричная лаборатория MatLab

         

Функции преобразования систем счисления



Функции преобразования систем счисления

Некоторые строковые функции служат для преобразования систем счисления. Ниже представлен набор этих функций.

bin2dec( 'binarystr') — возвращает десятичное число, эквивалентное строке двоичных символов binarystr.

Операции над строками



Операции над строками



К операциям над строками обычно относят поиск вхождений одних строк в другие, замену регистров символов, объединение строк и т. д. Следующие функции осуществляют операции над строками:

findstr(str1,str2) — обеспечивает поиск начальных индексов более короткой строки внутри более длинной и возвращает вектор этих индексов. Индексы указывают положение первого символа более короткой строки в более длинной строке.

Основные функции символьных данных



Основные функции символьных данных

В основе представления символов в строках лежит их кодирование с помощью сменных таблиц кодов. Такие таблицы ставят в однозначное соответствие каждому символу некоторый код со значением от 0 до 255.

Вектор, содержащий строку символов, в системе MATLAB задается следующим образом:

S= 'Any Characters' — вектор, компонентами которого являются числовые коды, соответствующие символам [ Символ внутри такой строки дублируется (заменяется на ''). — Примеч. ред. ].

Первые 127 чисел — это коды ASCII, представляющие буквы латинского языка, цифры и спецзнаки. Они образуют основную таблицу кодов. Вторая таблица (коды от 128 до 255) является дополнительной и может использоваться для представления символов других языков, например русского. Длина вектора S соответствует числу символов в строке, включая пробелы. Апостроф внутри строки символов должен вводиться как два апострофа ' '.

К основным строковым функциям относятся следующие:

char (X) — преобразует массив X положительных целых чисел (числовых кодов от 0 до 65 535) в массив символов системы MATLAB (причем только первые 127 кодов — английский набор ASCII, со 128 до 255 — расширенный набор ASCII) и возвращает его, на платформе Windows при значении выше 65 535 выдает предупреждение об ошибке, но возвращает русскую букву я (я повторяется так же, как char(255+256rt), где п — целые неотрицательные числа) [ Результат char(x) при х>65535 зависит от платформы, русификации и т. д. — Примеч. ред. ];

Преобразование символов и строк



Преобразование символов и строк

int2str(X) — округляет элементы массива X до целых чисел и возвращает массив символов, содержащих символьные представления округленных целых чисел. Аргумент X может быть скаляром, вектором или матрицей.

с дополнительной кодовой таблицей ASCII



Примечание

Правильная работа строковых функций с дополнительной кодовой таблицей ASCII возможна, но не гарантируется для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы работы с символами кириллицы (например перевод строки при наборе малой буквы «с» в командной строке) уже обсуждались. Поэтому примеры в этой главе даны для строк с символами основной кодовой таблицы.

преобразует каждый элемент строкового массива



Пример 1

» X=reshape(32:127,32,3); 
» S= char(X')
S=

!"#$*&'()*+.-./0123456789::<=>? 
(aABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
 "abcdefghijklmnopqrstuvwxyz{|}-[]
» t1= ' computer'
» t2='for';
» t3='home':
» t4='users':

» S = Char(tl.t2.t3.t4)
S =
computer
for
home
users
char (С) — преобразует каждый элемент строкового массива ячеек в ряды массива символов, если строки массива ячеек разного размера, к ним в конце добавляются пробелы (осуществляется набивка (padding) в терминах MATLAB) так чтобы в каждом ряде массива символов было одинаковое число символов; char (Tl, T2, ТЗ), где Т — строки, возвращает массив символов, при этом копии строк T1, T2, Т3 преобразуются в ряды массива символов добавлением при необходимости пробелов в конце рядов массивов символов, как описано ранее;char (java.Tang.string) — преобразует объект класса java.lang. string вмассив символов MATLAB; char (javaarray of java.lang.string) — единственный случай, когда выходным аргументом функции является не массив символов, а строковый массив ячеек, в который преобразуется массив строк Java; double(S) — преобразует символы строки S в числовые коды 0—65535 и возвращает вектор с этими числовыми кодами; ischar'(S) — возвращает логическую единицу, если S является символьной переменной, и логический ноль в противном случае; deblank(str) — возвращает строку, полученную из аргумента — строки str с удаленными из ее конца пробелами; deblank(c) — применяет функцию deblank к каждому элементу строкового массива ячеек с. Примеры:
» S = 'computer'
S =
computer
» X = double(S)
X =
99 111 109 112 117 116 101 114
» ischar(S)
ans =
1
»c{l,l}='My ';
» c{l,2}='home ';
» c{1.3}='computer ';
» с
с=
'My ' 'home ' 'computer 
» с = deblank(c) 
с =
'My' 'home' 'computer'

Example of the function Is



Пример 1

» strb' Example of the function Is the findstr function';
» str2='the';
» k = findstr(strl,str2)
k =
12 28
lower('str') — возвращает строку символов str, в которой символы верхнего регистра переводятся в нижний регистр, а все остальные символы остаются без изменений.

в единую строку; если элемент



Пример 1

» X=magic(3)
X =
8 1 б
3 5 7
4 9 2 
Х=Х+0.05 
X =
8.0500 1.0500 6.0500
3.0500 5.0500 7.0500
4.0500 9.0500 2.0500 
» str=int2str(X) 
str =
8 1 б 357 492
 mat2str(A) — преобразует матрицу А в единую строку; если элемент матрицы не скаляр, то он заменяется на [ ], при этом учитываются 15 знаков после десятичной точки; mat2str(A,n) — преобразует матрицу А в строку, используя точность до n цифр после десятичной точки. Функция eval(str) осуществляет обратное преобразование.

эквивалентную десятичному числу d. Аргумент



Пример 1

» bin2dec('101')
ans =
5
dec2bin(d) — возвращает строку двоичных символов (0 и 1), эквивалентную десятичному числу d. Аргумент d должен быть неотрицательным целым числом, меньшим чем 2 52 ; dec2bin(d.n) — возвращает строку двоичных символов, содержащую по меньшей мере n бит.

в которой все символы нижнего



Пример 2

» str='Example Of The Function';
» t=lower(str)
t =
example of the function
upper( 'str') — возвращает строку символов str, в которой все символы нижнего регистра переводятся в верхний регистр, а все остальные символы остаются без изменений.

с точностью до четырех десятичных



Пример 2

» randС state'); 
» A=rand(4.3) 
А =
0.9501 0.8913 0.8214
0.2311 0.7621 0.4447
0.6068 0.4565 0.6154
0.4860 0.0185 0.7919 
» str = mat2str(A,2)
str =
[0.95 0.89 0.82:0.23 0.76 0.44:0.61 0.46 0.62:0.49 0.019 0.79]
num2str(A) — выполняет преобразование массива А в строку символов str с точностью до четырех десятичных разрядов и экспоненциальным представлением, если требуется. Обычно используется при выводе графиков совместно с title, xlabel. ylabel или text; num2str(A,precision) — выполняет преобразование массива А в строку символов str с максимальной точностью, определенной аргументом precision. Аргумент precision определяет число разрядов в выходной строке; num2str(A,format) — выполняет преобразование массива чисел А, используя заданный формат format. По умолчанию принимается формат, который использует четыре разряда после десятичной точки для чисел с фиксированной или плавающей точкой.

возвращает строку символов, представляющих десятичное



Пример 2

» str = dec2bin(12)
str =
1100
dec2base(d.n) — возвращает строку символов, представляющих десятичное число d как число в системе счисления с основанием n.

выполняет горизонтальное объединение соответствующих рядов



Пример 3

» str='danger!';
» t = upper(str)
t =
DANGER!
strcat(sl,s2,s3,...) — выполняет горизонтальное объединение соответствующих рядов массивов символов s1, s2, s3 и т. д., причем пробелы в конце каждого ряда отбрасываются, и возвращает объединенную строку (ряд) результирующего массива символов, пробелы добавляются заново после анализа строк в полученном массиве. Все входные массивы должны иметь одинаковое число строк (в частном случае должны быть представлены в виде одной строки символов), но если один из входных аргументов — не массив символов, а строковый массив ячеек, то любой из других входных аргументов может быть скаляром или любым массивом той же размерности и того же размера. Если входной массив состоит только из символов, то выходной массив также будет являться массивом символов. Если любой из входных массивов является строковым массивом ячеек, то функция strcat возвращает строковый массив ячеек, сформированный из объединенных соответствующих элементов массивов si, s2, s3. при этом любой из элементов может быть скаляром и т. д. Примеры:
» sl{1.2}='book' :
» sl sl =
'Home' 'book' 
» s2{ 1.1}= 'home ' : 
» s2{ 1,2}= 'reading'; 
» s2 s2 =
'home' 'reading' 
» t = strcat(sl.s2)
t =
'Homehome' 'book read ing' 
» sl=['wri '] 
s1 =wri
» s2=['ter'] 
s2 =ter
» t = strcat(sl.s2)
 t = 
writer
strvcat(t1,t2,t3....) — выполняет вертикальное объединение строк tl, t2, t3,.. в массив символов S аналогично char(tl,t2.t3....).

выполняет преобразование численной строки s,



Пример 3

» str = num2str(pi.7)
str =
3.141593
» randCstate'):
» A=rand(3,5)
A =
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763
» str = num2str(A,l) 
str =
1 0.5 0.5 0.4 0.9 0.20.9 0.02 0.6 0.7 0.60.8 0.8 0.8 0.2
str2double( 'str') — выполняет преобразование численной строки s, которая представлена в ASCII-символах, в число с двойной точностью. При этом + и -могут быть только в начале строки.

возвращает шестнадцатеричную строку символов, эквивалентную



Пример 3

» str = dec2base(1234.16)
str =
4D2
dec2hex(d) — возвращает шестнадцатеричную строку символов, эквивалентную числу d. Аргумент d должен быть неотрицательным целым числом, меньшим чем 2 52 ; str = dec2hex(d.n) — возвращает шестнадцатеричную строку, содержащую по меньшей мере n цифр.

возвращает логическую единицу, если две



Пример 4

» t1=['string'];
» t2=['concatenation']:
» S = strvcat(tl.t2)
S =
string concatenation
strcmp( 'str1' . 'str2') — возвращает логическую единицу, если две сравниваемые строки str1 и str2 идентичны, и логический ноль в противном случае; TF = strcmp(S.T) — возвращает строковый массив ячеек TF, содержащий единицы для идентичных элементов массивов S и Т и нули для всех остальных, причем если один из массивов — не массив символов, а строковый массив ячеек, то перед сравнением из сравниваемых копий рядов массива символов удаляются пробелы в конце строк. Массивы S и Т должны иметь одинаковый размер, или один из них может быть скалярной ячейкой. Примеры:
» strl='computer'; 
» str2='computer'; 
» k = strcmp(strl.str2) 
k =
1
» S{l,l}='first'; 
» S{1,2}='second ' : 
» S S =
'first''second' 
» T{l.l}='third'; 
» TF = strcmp(S.T) 
TF =
0 0
» T{1.1}='second';
» TF - strcmp(S.T) 
TF =
0 1
strncmp( 'strT , 'str2' ,n) — возвращает логическую единицу, если две сравниваемые строки strl и str2 содержат n первых идентичных символов, и логический ноль в противном случае. Аргументы strl и str2 могут быть также строковыми массивами ячеек. TF = strncmp(S,T,n) — возвращает строковый массив ячеек TF, содержащий единицы для идентичных (до n символов) элементов массивов S и Т и нули для всех остальных. Примеры:
» strl='computer'
strl =
computer
» strl='computer for me'
strl =
computer for me
» k = strncmp(strl.str2,3)
k =

» k = strncmp(strl,str2.12)
L =

strmatch( 'str' ,STRS, 'exact') — возвращает только индексы строк символов массива STRS, точно совпадающих со строкой символов str; strjust(S) — возвращает выровненный вправо массив символов (т. е. перемещает пробелы в конце рядов массива символов, если они есть, в начало тех же рядов) [ Функция strjusttS, 'left') возвращает массив символов, где все строки выровнены влево, a strjusttS. 'center') — где все строки выровнены по центру.— Примеч.ред. ]; strmatch( 'str' ,STRS) — просматривает массив символов или строковый массив ячеек STRS по строкам, находит строки символов, начинающиеся с строки str, и возвращает соответствующие индексы строк;

Обратите особое внимание на последнюю



Пример 4

» х = str2double('5.45+2.67Г) 
5.4500 + 2.67001
Обратите особое внимание на последнюю функцию, поскольку именно она в MATLAB 6 обычно обеспечивает переход от символьного представления математических выражений к их вычисленным численным значениям;
str2num(s) — выполняет преобразование численного массива символов — матрицы или строки s, который представлен в ASCII-символах, в матрицу (массив размерности 2).

преобразует строку символов S, представляющих



Пример 4

» str = dec2hex(1234)
str =
4D2
base2dec(S, В) — преобразует строку символов S, представляющих число в системе счисления по основанию В, в символьное представление десятичного числа.

заменяет все подстроки str2, найденные



Пример 5

» STRS{1.1}='character':
» STRS{1.2}='array';
» STRS{2.1}='character array':
» STRS{2.2}='string':
» STRS
STRS =
'character' 'array'
'character array' 'string'
» i = strmatchCcharac'.STRS)
 i =
1
2
»i = strmatch('character'.STRS.'exact') 
i =
1
strrep(strl,str2,str3) — заменяет все подстроки str2, найденные внутри строки символов str1 на строку str3; strrep(strl,str2,str3) — возвращает строковый массив ячеек, полученный в результате выполнения функции strrep над соответствующими рядами входных массивов символов или ячеек, если один из аргументов strl, str2 или str3 — строковый массив ячеек. В этом случае любой из аргументов может быть также скалярной ячейкой.

Обратите особое внимание, что при



Пример 5

» х = str2num('5.45+2.67') 
8.1200
Обратите особое внимание, что при этом можно вводить знаки + и - в любом месте строки. Предыдущая функция выдала бы NaN. Но фирма MathWorks рекомендует использовать str2num с осторожностью и по возможности заменять ее на str2double.

возвращает число d, представленное строкой



Пример 5

» d = base2dec('4D2',16) 
 d =
1234;

hex2dec('hex_value') — возвращает число d, представленное строкой шестнадцатеричных символов hex_value. Если аргумент hex_value является массивоу символов, то каждая строка этого массива интерпретируется как шестнадца-теричное представление числа.

возвращает часть текстовой строки str,



Пример 6

» strl='This is a good example for me.':
» str2='good';
» str3='best';
» str = strrep(strl.str2.str3)
str =
This is a best example for me.
strtokCstr' .delimiter) — возвращает часть текстовой строки str, ограниченную с ее конца разделителем del i miter. Символы-разделители в начале строки игнорируются. Вектор delimiter содержит возможные символы-разделители; strtokCstr') — использует символ-разделитель по умолчанию («белое пространство»). Реальными символами-разделителями при этом являются символ табуляции (ASCII-код 9), символ возврата каретки (ASCII-код 13) и пробел (ASCII-код 32); [token,rem]=strtok(...) — возвращает остаток rem исходной строки. Примеры:
» str='This is a good example for me.': 
» token = strtok(str) 
token =
This
» token = strtok(str.'f') 
token =
This is a good example 
» [token,rem] = strtok(str) 
token = 
This 
rem =
is a good example for me.

с удвоенной точностью, эквивалентное шестнадцатеричному



Пример 6

» d = hex2dec('4D2')
d =
1234
 hex2num( 'hex_value') — возвращает десятичное число f с удвоенной точностью, эквивалентное шестнадцатеричному числу, находящемуся в строке символов hex_va1ue.

Пример » f = hex2num('4831fb52al8')



Пример 7

» f = hex2num('4831fb52al8')
f = 
6.1189е+039

Работа с символьными данными


Урок 18. Работа с символьными данными Основные функции символьных данных Операции над строками Преобразование символов и строк Функции преобразования систем счисления Вычисление строковых выражений Что нового мы узнали?

Вычисление строковых выражений



Вычисление строковых выражений

Строковые выражения обычно не вычисляются, так что, к примеру, вывод строки ' 2+3' просто повторяет строку:

» '2+3'

ans = 

2+3

Однако с помощью функции eval ('строковое выражение'.) строка, представляющая математическое выражение, может быть вычислена:

» eval C2+3') 

ans =

5

» eval('2*sin(l)')

 ans =

1.6829

Ниже использование eval возвращает 12 матриц, представляющих магические квадраты чисел от 1 до 12:

for n = 1:12

eval(['IT num2str(n) ' = magic(n)']) 

end

eval (SI,S2) — в случае ошибки в вычислении выражения s1 оценивает выражение s2.

T=evalc (S) выполняет то же, что и функция eval(s), но то, что выводится в командное окно, записывается также и в массив Т;

Еще одна функция — feval (@имя_функции,х1,х2,...) — имеет важное достоинство — она позволяет передавать в вычисляемую функцию список ее аргументов. При этом вычисляемая функция задается только своим именем. Это поясняют следующие примеры:

» feval(@prod.[l 23]) 

ans = 

6

Существовавшая в прежних версиях MATLAB форма feval (' иня_функции' ,xl. х2,...) по-прежнему работает, но применять ее не рекомендуется. 

» feval(@sum.[l 2 3: 4 5 6].2)

 ans =

6

15

Рекомендуется применять функцию feval при вычислении значений функций, записанных в виде строки, вместо eval. m-файлы-функции, содержащие функцию feval, корректно компилируются компилятором системы MATLAB.

Для выполнения вычислений, представленных строкой expression, в заданной рабочей области ws служит функция evalin(ws.expression). Переменная ws может иметь два значения: 'base' — для основной рабочей области и 'caller' — для рабочей области вызванной функции. В приведенном ниже примере в рабочей области записаны переменные а и b и вычисляется символьное значение 'а+b':

» а=2;b=3;

» evalin('base','a+b') 

ans = 

5

Функция может также записываться в виде [а1.а2,аЗ,...] = eval in(ws, expression), где a1, а2, а3,... — переменные, возвращающие результаты вычислений. А функция evalin(ws,expression, catch_expr) позволяет проверить правильность выражения expression в рабочей области и сформировать сообщение, заданное в строке   catch_expr.

Например (в продолжение последнего примера):

» h='Error in expression';

» evalin('base'. 'a+b'. 'h'); 

ans = 

5

» evalinCbase'. 'a+c', 'h'); h = Error in expression

Здесь выражение а+с ошибочно (переменная с не определена), поэтому выдана переменная h с ее значением в виде строки.