Как сделать строку в матлабе

Добавил пользователь Валентин П.
Обновлено: 10.09.2024

Выше говорилось, что основным типом переменных в MATLAB являются матрицы, однако, кроме матриц, существуют и другие типы переменных, в частности, строки. Под строкой понимается последовательность символов. Строки создаются с помощью одинарных кавычек. Например:

Name Size Bytes Class Attributes

hello_string 1x5 10 char

Видно, что строка hello_string имеет длину 5 символов и занимает 10 байт.

Для выделения части строки можно использовать те же операции индексирования, что и для матриц. Например:

>> hello_string = 'hello, MATLAB'

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

Name Size Bytes Class Attributes

number_123 1x1 8 double

string_123 1x3 6 char

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

Функция Описание
num2str Преобразование числа в его строковое представление
str2double Преобразование строкового представления числа в число
sprintf Форматирование данных
strcat Конкатенация (объединение) строк
strcmp Сравнение строк с учетом регистра
strcmpi Сравнение строк без учета регистра
strrep Замена подстроки в строке
strtrim Удаление пробелов, знаков табуляции и перевода строк в начале и конце строки
isempty Возвращает 1, если длина строки равна 0, и 1 в противном случае
length Расчет длины строки
findstr Поиск подстроки в строке

Чтобы преобразовать число в его строковое представление, используется функция num2str, которая в простейшем случае принимает числовое значение и возвращает строку. Например:

>> result_str = num2str (123)

Name Size Bytes Class Attributes

result_str 1x3 6 char

Существуют другие способы использования функции num2str, в частности, можно задавать количество знаков после запятой для форматирования дробных чисел. Более подробно о других способах использования этой функции написано в документации MATLAB.

Для выполнения обратной операции, то есть для преобразования строкового представления числа в число используется функция str2double. Эта функция возвращает число, соответствующее строковому представлению или NaN, если строку невозможно преобразовать в число. Кроме того, с помощью функции str2double можно создавать комплексные числа. Например:

>> x = str2double ('123.456')

Name Size Bytes Class Attributes

>> y = str2double ('-5 + 8j')

Name Size Bytes Class Attributes

y 1x1 16 double complex

>> z = str2double ('is not number')

Для проверки успешности выполнения преобразования из строки в число удобно использовать функцию isnan, которая возвращает 1, если в качестве аргумента передано значение NaN, или 0 в противном случае.

>> x = str2double ('123.456')

>> z = str2double ('is not number')

Для конкатенации (объединения) строк есть несколько способов. Первый способ подразумевает работу со строками как с матрицами и объединение их подобным образом. Например:

>> result_str = [hello_str, matlab_str]

Также для конкатенации можно использовать функцию strcat, но в этом случае во всех строках, являющихся параметрами этой функции, будут удалены начальные и конечные пробелы:

>> result_str = strcat (hello_str, matlab_str)

Такими же способами можно объединять одновременно большее количество строк, передавая их в качестве параметров.

>> disp ('Hello, MATLAB')

>> x = [1 2 3; 4 5 6; 7 8 9];

Для того, чтобы попросить пользователя ввести какие-то данные с клавиатуры, используется функция input, которая имеет два режима работы. Первый режим заключается в том, что введенные пользователем данные интерпретируются как числа или матрицы. В этом случае синтаксис функции input выглядит следующим образом:

переменная = input (строка_запроса)

>> input ('Введите данные: ')

Введите данные: 123.456

>> x = input ('Введите данные: ')

Введите данные: [1 2 3; 4 5 6]

>> x = input ('Введите данные: ')

Введите данные: 10.1 + 5j

>> z = input ('Введите данные: ')

Введите данные: 'Строковое значение'

Как видно из приведенного примера, пользователь может вводить числа, матрицы, комплексные числа и строки. Строки при этом пользователь должен отмечать одинарными кавычками, как это принято в языке MATLAB. Кроме того, пользователь может вводить не конкретные значения, а имена переменных и даже целые выражения. Например:

>> z = input ('Введите данные: ')

Введите данные: x + sind (y)

В случае если пользователь допустил ошибку, функция input сообщит об этом и попросит повторить ввод:

>> z = input ('Введите данные: ')

Введите данные: xx + sind(y)

Error using input

Undefined function or variable 'xx'.

Введите данные: x + sind (y)

Второй режим работы функции input заключается в том, что все вводимые пользователем данные будут интерпретироваться, как строки. Это может быть удобно тем, что пользователь не должен помнить о том, что строки нужно обозначать кавычками, но, в то же время, разработчик скрипта должен сам позаботиться о правильной интерпретации вводимых пользователем данных. Для использования функции input в таком режиме в качестве второго параметра функции input нужно передать строку ‘s’. Например:

>> x = input ('Введите данные: ', 's')

Введите данные: Строковое значение

Name Size Bytes Class Attributes

>> y = input ('Введите данные: ', 's')

Введите данные: 15

Name Size Bytes Class Attributes

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

Часто требуется отформатировать данные для удобного представления их пользователю, например, вставить значение каких-то переменных в середину строки, представить данные в 16-ричном виде или в экспоненциальной форме. Для этого предназначена функция sprintf, поведение которой напоминает поведение одноименной функции в языках C и C++. Один из возможных синтаксисов функции sprintf выглядит следующим образом:

результат = sprintf (строка_форматирования, параметры. )

строка_форматирования – это строка, содержащая специальные команды подстановки, которые описывают, каким образом должны форматироваться данные. Для каждой команды подстановки в последующих параметрах функции sprintf должен передаваться соответствующий параметр. Команды форматирования представляют собой последовательность символов, начинающихся со знака %, за которым следует описание формата данных. В таблице 1.6 приведены команды, которые могут быть использованы в строке форматирования.

К каждой команде могут быть добавлены параметры, описывающие способ форматирования (выравнивание, количество знаков после запятой и т.п.), данные параметры подробно описаны в документации MATLAB и в данном пособии не приводятся.

В формуле приглашение представляет текстовую информацию, которая должна отображаться, например, a = input ('пожалуйста, введите число \ n'), она будет отображаться в командной строке, введите число вручную (если вы вводите другие форматы, такие как Персонажи будут не правы). Это значит, что программа не будет продолжать работать, но дождитесь ввода номера и затем нажмите Enter, чтобы продолжить. Ввод текста такой же. Увидеть большеФункция ввода в MATLAB?

2. Другие входы

2.1 fscanf

Во-первых, формат файла, читаемый с использованием функции fscanf, представляет собой текстовый формат, и применяются три следующие формы:

A = fscanf( fileID , formatSpec ) Считать данные в открытом текстовом файле в вектор-столбец A Средний и в соответствии с formatSpec Указанный формат интерпретирует значения в файле. fscanf Функция повторно применяет формат ко всему файлу и размещает указатель файла в конце файла. если fscanf Невозможно изменить formatSpec Сопоставляя с данными, он только прочитает соответствующую часть и остановит обработку. fileID (идентификатор файла) можно получить, открыв файл с помощью fileID = fopen ('x.txt', 'a'); formatSpec Частичный формат сегмента данных.

A = fscanf( fileID , formatSpec , sizeA ) Данные файла считываются в измерение sizeA Массив A , И поместите указатель файла после последнего прочитанного значения. fscanf Заполните в столбце порядок A ? sizeA Должно быть положительным целым числом или использовать [m n] Форма которой m и n Это положительное целое число (это также может быть бесконечная положительная бесконечность, что означает чтение всех соответствующих строк / столбцов / полных блоков данных).

[ A , count ] = fscanf(___) Также вернется fscanf Читать в A Количество полей в. Для числовых данных это количество значений, которые были прочитаны. Вы можете использовать этот синтаксис в сочетании с любыми входными параметрами в предыдущем синтаксисе.

Тем не менее, я обычно не использую это.

2.2 load

Загрузка - самая распространенная функция чтения файлов в MATLAB. Основные формы:

Он может быть загружен напрямую, например data = load ('D: /test.txt') или data = load ('D: /test.txt', 'x'), чтобы прочитать переменную x в test.txt, где x также можно заменить массивом ячеек с несколькими переменными, например, заменить x на var , где var = ; в дополнение к текстовым файлам txt это также может быть MATLAB Тип данных файла формата mat (будет напрямую выводиться в рабочую область), формат файла ascii, как показано в третьей формуле, создаст массив двойной точности, содержащий данные файла.

Данные, загружаемые методом загрузки, особенно распространены. Их можно увидеть во многих функциях расширения MATLAB. Формат загрузки также очень богат. Это может быть текстовый файл, файл базы данных или файл таблицы.

2.3 fopen

fopen - открыть файл, и его различные форматы подробно описаны в функции fprintf ниже. После открытия файла через fopen, вы можете использовать текстовый файл или функцию чтения строк testcan, чтобы прочитать файл, формат вызова следующий:

После открытия файла testscan попытается сопоставить данные в файле со спецификатором преобразования в formatSpec. Функция testscan повторно сканирует данные в соответствии с formatSpec во всем файле и останавливается до тех пор, пока formatSpec не сможет найти совпадающие данные.

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

fileID = fopen('D:/test.txt','r');
rowdata = textcan (fileID, '% s', 'DElimiter', '\ n');% получает каждую строку данных
fclose(fileID);
whos rowdata
rowdata
% rowdata , будет сообщено об ошибке, rowdata - это массив ячеек
a=rowdata
whos a
b1=a
whos b1


Существует три основных формата вывода:

1. Прямой вывод в командную строку

MATLAB позволяет напрямую вводить имена переменных в сценариях (M-файлах) или командных строках для вывода.Этот метод относительно прост и удобен в применении и подходит для тестирования. Но общий вывод всегда выводится в соответствии с форматом системы по умолчанию. Если вы хотите настроить его, вам нужно изменить формат вывода командной строки через формат перед программой. См. Таблицу ниже для большего количества числовых форматов (их можно найти в документации MATLAB ~Подробный формат)

Эти стили управляют форматом вывода числовых переменных.

Исправлен короткий десятичный формат с 4 цифрами после запятой.

Длинный фиксированный десятичный формат, double Значение содержит 15 цифр после десятичной точки, single Значение содержит 7 цифр после десятичной точки.

Краткая научная запись, с 4 цифрами после десятичной точки.

Длинная научная запись, double Значение содержит 15 цифр после десятичной точки, single Значение содержит 7 цифр после десятичной точки.

Короткий фиксированный десятичный формат или научное обозначение (в зависимости от того, что является более компактным), всего 5 цифр.

Длинный фиксированный десятичный формат или научная запись (в зависимости от того, что является более компактным), для double Значение, всего 15 цифр, для single Значение, всего 7 цифр.

Краткое инженерное обозначение, с 4 цифрами после десятичной точки и показателем, кратным 3.

Длинная техническая запись, включающая 15 значащих цифр, показатель степени, кратный 3.

Положительный / отрицательный формат, показывающий положительные, отрицательные и нулевые элементы отдельно + ? - И пустые символы.

Формат валюты, включая 2 цифры после запятой.

Шестнадцатеричное представление двоичного числа двойной точности.

Соотношение маленьких целых чисел.

Кроме того, вы также можете установить формат межстрочного интервала при выводе матрицы:

Скрыть слишком много пустых строк, чтобы показать больше вывода на одном экране.

Добавьте пустые строки, чтобы сделать вывод легче для чтения.

2 Вывод функции fprintf

Если вам нужно контролировать длину вывода, вы можете добавить число после знака процента, например,% 8s. Выходная длина равна восьми (если фактическая длина строки превышает восемь, сама строка будет выведена и не будет усечена), оставьте по крайней мере 8 в командной строке Заполнителя недостаточно для заполнения пробелами, и% 4.8f выведет 4-значное целое число плюс десятичную точку плюс 8 десятичных цифр.

Выходной формат вышеупомянутого случая соответствует формату, выровненному по правому краю.Если вы хотите выровнять по левому краю, вы можете добавить знак минус после знака процента или перед форматом, например% -8s. Кроме того, мы также можем использовать некоторые специальные управляющие символы для поддержания красоты выходного формата, такие как \ t (горизонтальные) табуляции, \ n разрывы строк, \ v вертикальные табуляции.

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

Вам необходимо открыть файл (fopen) перед выводом и закрыть файл (fclose) после вывода, как показано выше. Среди них функция fopen - это имя файла и идентификатор. Существует 8 типов идентификаторов. Если вы хотите создать новый файл, это w. Если вы добавляете его в исходный файл, это a. Как правило, эти два типа используются.

Откройте файл для чтения.

Откройте или создайте новый файл для записи. Отменить существующий контент (если есть).

Откройте или создайте новый файл для записи. Добавить данные в конец файла.

Откройте файл для чтения и записи.

Откройте или создайте новый файл для чтения и записи. Отменить существующий контент (если есть).

Откройте или создайте новый файл для чтения и записи. Добавить данные в конец файла.

Откройте файл, чтобы добавить (но не обновлять автоматически) текущий буфер вывода.

Откройте файл, чтобы записать (но не обновлять автоматически) текущий буфер вывода.

fclose закрывает файл. FileID в скобках является идентификатором файла, то есть представляет открытый файл. Без особых обстоятельств этот оператор также можно заменить на fclose ('all'), чтобы закрыть все файлы. Формат fprintf аналогичен предыдущему выводу в командной строке, но идентификатор файла fileID ~ добавляется спереди.

3.disp

Это выведет в одну строку: Алисе будет 12 в этом году.

Общие операции ввода и вывода здесь, и необходимо продолжить больше контента. Вообще говоря, этих входов и выходов достаточно

Вот небольшой фрагмент кода того, что я пытаюсь сделать:

ОТВЕТЫ

Ответ 1

Вам нужно использовать ячейки массивов. Если количество итераций известно заранее, я предлагаю вам предварительно выделить:

иначе вы можете сделать что-то вроде:

Ответ 2

Как отмечали другие ответы, использование массивов ячеек, вероятно, является самым простым подходом, что приведет к тому, что ваша переменная name будет ячейкой массив, в котором каждый элемент ячейки содержит строку.

Однако существует и другая опция, использующая функцию STRVCAT, которая будет вертикально конкатенировать строки. Вместо создания массива ячеек это создаст двухмерную матрицу символов с каждой строкой, содержащей одну строку. STRVCAT автоматически заполняет концы строк пробелами, если необходимо, чтобы правильно заполнить строки матрицы:

Ответ 3

Как отмечалось в других разделах, в MATLAB все строки в массиве должны быть одинаковой длины. Чтобы иметь строки разной длины, используйте массив ячеек:

Ответ 4

Ответ 5

Используйте функцию strcat для добавления с использованием одного кода строки без использования цикла:

Ответ 6

Если вы используете два массива, например, ниже (A и B), вы можете добавлять их так же, как и с другими матрицами.

Ответ 7

Я знаю, что это старый поток, но кажется, что вам даже не нужен цикл, если это все, что вы делаете в цикле. Не могли бы вы использовать вертикальную конкатенацию?

Ответ 8

Для полноты также следует упомянуть новый string класс, представленный в MATLAB R2016b; контейнер для текстовых данных и набор функций для легкого манипулирования текстом.

Чтобы сравнить его с моим другим примером, вот как выделить string array:

И вот как динамически расширять массив без предварительного использования:

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

string контейнер также может конвертировать в/из массивы символов и массивы ячеек.

Нажмите, чтобы узнать подробности

Целью лабораторной работы является получение навыков самостоятельной алгоритмической и программной реализации на компьютерной технике методов обработки строк и текстовых файлов в MatLab.

Определить количество символов в первой строке варианта без учета пробелов.

str = 'Алексеев Сергей 1980 5 4 4 5 3 5';

Первая строка является предложением, в котором слова разделены пробелами. Переставить первое и последнее слово.


strnew1 = [str(10:15) str(9) str(1:8) str(16:32)];

Заменить в первой строке цифры числительными (вместо 1, 2,… — один, два, три,…).


Задана строка (первая строка варианта), содержащая текст и числа, разделенные пробелами, выделить числа в числовой массив.

Записать данные, указанные в соответствующем варианте, в файл inN.txt, где N – номер варианта.


fprintf(f, '%f ', ter);

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

MATLAB – популярный пакет программ для решения технических, математических, статистических задач, вычислений и моделирования. Так же называется и одноимённый язык программирования, который используется в этом пакете. Давайте рассмотрим порядок работы с окном команд и редактором среды MATLAB.

1 Работа с окном команд в среде MATLAB

В среде MATLAB есть несколько режимов работы. Самый простой – это ввод команд непосредственно в окно команд (Command Window).

Использование пакета MATLAB

Окно команд MATLAB

Если оно не видно в интерфейсе программы, откроем его. Найти окно команд можно через меню Desktop Command Window.

Давайте для примера введём в это окно последовательно друг за другом команды

Стрелками клавиатуры вверх и вниз в окне команд мы можем переключаться между введёнными командами, тут же изменять их, а по нажатию Enter отправлять среде MATLAB на исполнение. Стрелками влево и вправо можно перемещаться по введённой команде и редактировать её. Если в конце команды стоит точка с запятой, то результат будет посчитан, но не будет выведен в окно команд; в противном случае результат выполнения команды будет отображён тут же. По любой функции в среде MATLAB есть подробная встроенная справка. Например, чтобы получить справку по команде plot, выделите эту команду, нажмите на неё правой кнопкой мыши, и в открывшемся контекстном меню выберите пункт Help on Selection или нажмите клавишу F1.

Справка по командам MATLAB

Получение справки по командам MATLAB

Удобно? Безусловно. И главное – очень быстро. Все эти действия занимают несколько секунд.

Но что если нужна более сложная организация команд? Если нужно циклическое исполнение каких-то команд? Вводить команды вручную по одной, а потом долго искать их в истории может быть довольно утомительным делом.

2 Работа с редактором в среде MATLAB

Чтобы упростить жизнь учёному, инженеру или студенту, служит окно редактора (Editor). Давайте откроем окно редактора через меню Desktop Editor.

Открытие редактора MATLAB

Открытие редактора MATLAB

В окне редактора можно создавать новые переменные, строить графики, писать программы (скрипты), создавать компоненты для обмена с другими средами, создавать приложения с пользовательским интерфейсом (GUI), а также редактировать имеющиеся.

Нас в данный момент интересует написание программы, содержащей функции для повторного использования в будущем. Поэтому идём в меню File редактора и выбираем New M-File.

Создание нового M-файла в MATLAB

Создание нового M-файла в MATLAB

М-файлами в среде МАТЛАБ называются файлы, содержащие текст программ (скрипты) или определённые пользователем функции.

Давайте напишем в редакторе простую функцию draw_plot:

Ввод текста программы в окне редактора MATLAB

Ввод текста программы в окне редактора MATLAB

Мы добавили вторую функцию и будем выводить сразу два графика рядом друг с другом. Знаком процента обозначаются в среде MATLAB комментарии.

Не забудем сохранить программу. Стандартное расширение файла с программой МАТЛАБ – *.m. Теперь закройте редактор и окно с графиком, который мы построили ранее.

Переходим обратно в окно команд.

Можно очистить историю команд, чтобы лишняя информация нас не отвлекала. Для этого кликните правой кнопкой мыши на поле ввода команд и в открывшемся контекстном меню выберите пункт Clear Command Window.

Переменная X у нас осталась после предыдущего эксперимента, мы её не изменяли и не удаляли. Поэтому в окно команд можно сразу ввести:

Вы увидите, что MATLAB прочитает нашу функцию из файла и выполнит её, нарисовав график.

Результат выполнения скрипта, написанного в редакторе MATLAB

Результат выполнения скрипта, написанного в редакторе MATLAB

Читайте также: