Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Красавин Компютерныы практикум в среде МатЛаб 2015

.pdf
Скачиваний:
121
Добавлен:
12.11.2022
Размер:
9.22 Mб
Скачать

Для того, чтобы добавить переменную в 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]