Красавин Компютерныы практикум в среде МатЛаб 2015
.pdfДля того, чтобы добавить переменную в mat-файл, требуется дополнительный аргумент -append:
x = 1:6;
save -append mat x who -file mat
Your variables are:
mymat x % в файле mat.mat теперь две переменные: mymat и x
Функция load используется для считывания переменных из mat-файла:
load filename variable list
Здесь filenamе – имя файла (без расширения); variable list – список загружаемых переменных; по умолчанию функция load считывает сразу все переменные:
who load mat who
Your variables are: mymat x
101
9
Работа со строками
9.1. Простые способы создания строк
Строки в MatLab могут состоять из любого количества символов, заключенных в одинарные кавычки. На самом деле, строки также являются векторами, где каждый элемент представляет собой отдельный символ; это означает, что строки поддерживают некоторые векторные операции и функции. MatLab имеет большое количество встроенных функций, написанных специально для работы со строками.
Существует множество применений строк, даже в тех областях, которые преимущественно считаются числовыми. Например, когда файл состоит из комбинации чисел и символов, часто приходится считывать каждую линию файла как строку, строки разбивать на части и преобразовывать части, содержащие числа, в числовые переменные, которые могут быть использованы в дальнейших вычислениях.
Строки могут состоят из любого количества символов. Ниже приведены примеры строк:
''
'x'
'Cat'
'Cat house' '123'
Подстроками называются части строк. Например, 'house' является подстрокой строки 'Cat house'. Символами являются числа, алфавит, знаки препинания, пробелы, а также спецсимволы.
102
Спецсимволы – это символы, не отображающиеся при выводе на экран.
Существует несколько способов задать строку. Одним из них является использование оператора присваивания:
word = 'cat';
Другим способом является ввод с клавиатуры строки с помощью функции input. Использование ключа 's' в качестве второго аргумента функции обязательно, так как этот ключ описывает переменную как строку:
strvar = input('Enter a string: ', 's') Enter a string: xyzabc
strvar =
xyzabc
9.2. Представление строк в виде векторов
Строки являются векторами символов или, иными словами, векторами, каждый элемент которых является одиночным символом, следовательно, к строкам можно применять некоторые векторные операции. Например, чтобы узнать количество символов в строке, можно использовать функцию length:
length('cat') ans =
3 length(' ') ans =
1
length('') ans =
0
103
Также можно ссылаться на отдельный элемент строки (символ в строке) или подмножество:
mystr = 'Hi'; mystr(1)
ans =
H
sent = 'Hello there'; length(sent)
ans =
11
sent(4:8) ans =
lo th
Результатом создания вектор-столбца строк является матрица символов:
wordmat = ['Hello';'Howdy'] wordmat =
Hello
Howdy
size(wordmat) ans =
2 5 % Переменная wordmat является матрицей символов 2x5
Можно обратиться к отдельному элементу (одиночному символу) или к отдельной строке (к одной из строк):
wordmat(2,4) ans =
d wordmat(1,:) ans =
Hello
104
Строки в пределах матрицы всегда должны быть одинаковой длины. Короткие строки должны быть дополнены с помощью пробелов так, чтобы все строки имели одинаковую длину; в противном случае произойдет ошибка:
greetmat = ['Hello'; 'Goodbye'] Error using vertcat
Dimensions of matrices being concatenated are not consistent.
greetmat = ['Hello '; 'Goodbye'] greetmat =
Hello
Goodbye
size(greetmat) ans =
27
9.3.Функции работы со строками
Конкатенация строк означает их объединение. Поскольку строки являются также и векторами, очевидно, что методы конкатенации векторов работают и со строками. Например, если требуется создать одну строку из двух, это возможно с помощью использования квадратных скобок:
first = 'Cat'; last = 'house'; [first last] ans =
Cathouse
Следует обратить внимание на то, что имена переменных (или строк) должны быть разделены пробелом в скобках, но в то же время пробелов между строками после их объединения нет.
Функция strcat горизонтально объединяет строки, т.е.
создается строка длиннее входных строк:
105
first = 'Cat'; last = 'house';
strcat(first,last) ans =
Cathouse
При наличии пробелов в строках вышеупомянутые методы конкатенации будут существенно отличаться. Метод с использованием квадратных скобок будет объединять все символы, включая все пробелы:
str1 |
= |
'xxx |
'; |
str2 |
= |
' |
yyy'; |
[str1 str2] ans =
xxx yyy
length(ans) ans =
12
Функция strcat удаляет завершающие пробелы перед конкатенацией строк, но в тоже время не удаляет начальные пробелы:
strcat(str1,str2) ans =
xxx yyy
length(ans) ans =
9
strcat(str2,str1) ans =
yyyxxx
106
length(ans) ans =
9
Функцию char можно использовать для вертикальной конкатенации строк, создавая вектор-столбцы строк (матрицы символов). Функция char автоматически дополняет короткие строки пробелами, так чтобы все строки в матрице имели одинаковую длину:
greetmat = char('Hello','Goodbye') greetmat =
Hello
Goodbye
size(greetmat) ans =
27
9.4.Создание строк при помощи встроенных функций
Функция blanks создает строку, состоящую из пробелов:
blanks(4) ans =
length(ans) ans =
4
Как правило, эту функцию чаще всего используют при конкатенации строк, чтобы задать количество пробелов между ними. Например, требуется вставить пять пробелов между словами:
first = 'Cat'; last = 'house';
[first blanks(5) last]
107
ans =
Cat house
Также для создания строк используется функция sprintf. С помощью определенного образца функция sprintf формирует строку. В качества первого аргумента вводится образец, в котором присутствуют спецсимволы, начинающиеся с %, определяющие тип переменных, которые вставляются в строку в качестве последующих аргументов в функции sprintf. Например, спецсимвол %.2f обозначает переменную с двумя знаками после запятой, в то время как %5d – целочисленное значение, состоящее из пяти символов, а спецсимвол %s – строковую переменную:
sent1 = sprintf('The value of pi is %.2f', pi) sent1 =
The value of pi is 3.14
sent2 = sprintf('Some numbers: %5d, %2d', 33, 6) sent2 =
Some numbers: 33, 6
length(sent2) ans =
23
В примере 9.1 рассматривается программа, которая считывает данные из файла expnoanddata.dat, содержащего номер эксперимента и следующие за ним экспериментальные данные:
123 4.4 5.6 2.5 7.2 4.6 5.3
108
Пример 9.1.
%Данная программа считывает информацию из файла, содержащего
%номер эксперимента и экспериментальные данные. Она строит график
%по имеющимся экспериментальным данным и выводит номер
%эксперимента в заголовок графика (рис. 9.1)
load expnoanddata.dat
experNo = expnoanddata(1); data = expnoanddata(2:end); figure
plot(data,'ro') xlabel('Sample #') ylabel('Weight')
title(sprintf('Data from experiment %d', experNo)) set(gca, 'LineWidth',1)
set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)
set(gca, 'FontWeight', 'bold')
Рис. 9.1. Номер эксперимента выведен в заголовок
109
9.5.Удаление пробелов
ВMatLab существуют функции, предназначенные для удаления пробелов в начале строки и завершающих пробелов в конце строки.
Функция deblank удаляет завершающие пробелы в конце строки. Например, строки в матрице символов дополняются пробелами, так чтобы их длины были одинаковыми, однако может потребоваться убрать лишние пробелы, для того чтобы использовать строки в оригинальном виде:
names = char('Sue', 'Cathy','Xavier') names =
Sue
Cathy
Xavier
name1 = names(1,:) name1 =
Sue
length(name1) ans =
6
name1 = deblank(name1); length(name1)
ans =
3
Функция strtrim удаляет одновременно и завершающие, и начальные пробелы из строки, но не трогает пробелы внутри строки. Например, пусть в строке присутствуют 3 начальных пробела, 4 завершающих и 2 пробела внутри строки:
strvar = [blanks(3) 'xx' blanks(2) 'yy' blanks(4)] strvar =
xx yy
110