MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Основы работы в Curve Fitting Toolbox \ Curve Fitting Toolbox

В оглавление книги \ К предыдущему разделу \ К следующему разделу

Основы работы в Curve Fitting Toolbox

1.3. Основные этапы работы в приложении cftool

1.3.1. Импорт данных в MATLAB

В приложении cftool возможно приближать данные, записанные в глобальные массивы (вектора) рабочей среды MATLAB. Если данные хранятся в файле, то сначала требуется считать их в вектора, являющимися переменными рабочей среды MATLAB. Вполне возможно, что пользователь Curve Fitting Toolbox не владеет способами и функциями MATLAB для считывания данных, хранящихся в файлах, поэтому мы сначала обсудим, как считать данные из текстового или двоичного файла, или книги Excel и записать их в глобальные переменные. Если данные уже записаны в вектора, то этот раздел можно пропустить и перейти сразу к разделу Окно приложения cftool. Импорт данных в приложение cftool, в котором разбирается назначение окна приложения, перечисляются основные этапы работы и говорится о импорте тех данных в приложение cftool, которые уже находятся в рабочей среде MATLAB.

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

1.25 0.8973
1.44 1.2398
1.54 2.0019

Для записи столбцов файла в вектора MATLAB можно воспользоваться Мастером импорта (Import Wizard), для чего следует в меню File основного окна MATLAB выбрать пункт Import Data и в появившемся диалоговом окне открытия файла указать нужный файл. После нажатия в этом окне на кнопку Open появляется окно Мастера импорта (это второй шаг Мастера импорта), в котором можно указать:

  1. разделитель чисел в строке (пробел, табуляция, точка с запятой, запятая или произвольный символ-разделитель);
  2. сколько первых текстовых строк требуется пропустить при считывании данных из файла, если они есть;
  3. посмотреть на содержимое текстового файла и массивов, которые будут созданы в MATLAB.
  4. перейти на первый шаг Мастера импорта (кнопка Back), на котором можно выбрать другой файл с данными или получить доступ к системному буферу обмена.

После нажатия кнопки Next появляется окно последнего шага мастера

На последнем шаге можно

  1. посмотреть содержимое массива с данными, для чего нужно выделить его имя щелчком мыши;
  2. переименовать массив, для чего нужно сделать повторный щелчок мышью по его имени и ввести в появившееся поле новое имя.

После нажатия на кнопку Finish в рабочей среде окажется двумерный массив (с двумя столбцами) с выбранным именем. В нашем примере массив будет называться data (или так, как было задано на последнем шаге мастера).

Для последующей работы в приложении cftool следует создать два вектора x и y, содержащие, соответственно, первый и второй столбец массива data. Для этого следует ввести в командной строке MATLAB две команды, в которых производится индексация: для обращения ко всем элементам первого и второго столбцов массива data использовано двоеточие (индексация двоеточием), а номер выделяемого в вектор столбца задается числом:

>> x=data(:,1);
>> y=data(:,2);

Массивы данных x и y созданы в рабочей среде MATLAB (см., например, содержимое окна Workspace).

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

XData  YData
1.25   0.8973
1.44   1.2398
1.54   2.0019

то на последнем шаге мастера установка переключателя Create vectors from each column using column names позволит сразу создать в рабочей среде два вектора XData и YData, содержащих, соответственно, первый и второй столбец данных.

Если данные находятся в книге Excel, содержащей один лист, то Мастер импорта также способен создать массив, в который будут записаны эти данные. Если между столбцами данных на листе Excel есть пустые столбцы, то в MATLAB получится массив, содержащий NaN (не числа - Not a Number) в ячейках этих столбцов. Т.е., например, данные Excel, содержащиеся в книге data.xls,

преобразуются в массив data среды MATLAB (имя, как и в предыдущем примере, можно изменить на последнем шаге мастера)

1.25	0.8973
1.44	1.2398
1.54	2.0019

а данные Excel

преобразуются в массив data

1.25	NaN	NaN	0.8973
1.44	NaN	NaN	1.2398
1.54	NaN	NaN	2.0019

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

>> x=data(:,1);
>> y=data(:,4);

Для удаления столбцов из массива можно присвоить столбцам пустой массив, задаваемый в MATLAB при помощи квадратных скобок, причем можно указать диапазон столбцов (в нашем примере со второго по третий):

>> A(:,2:3)=[]
A =
    1.2500    0.8973
    1.4400    1.2398
    1.5400    2.0019

Так же, как и в случае простых текстовых файлов, если столбцы с данными на листе книги Excel снабжены заголовками

то в Мастере импорта появляется возможность создать вектора данных, имена которых совпадают с именами заголовков столбцов, т.е. массивы XData и YData. Для запуска Мастера импорта из командной строки в MATLAB есть функция uiimport. Обращение к ней без входных аргументов

>> uiimport

приводит к появлению диалогового окна с первым шагом Мастера импорта, в котором кнопка Browse предназначена для открытия файла. Далее все шаги выполняются аналогично вышеизложенному. Входным аргументом функции uiimport может быть и имя файла, заключенное в апострофы (надо указывать либо полное имя, либо только имя с расширением, но тогда файл будет искаться в текущем каталоге MATLAB и каталогах, установленных в путях поиска MATLAB):

>> uiimport('data.txt')

После такого обращения к функции uiimport появляется диалоговое окно со вторым шагом Мастера импорта, работа с которым описана выше.

Для чтения числовых данных из текстовых файлов, имеющих табличную структуру, подходит функция load. Символы-разделители (пробел, точка, точка с запятой, табуляция) интерпретируются как разделители элементов строки. Например, если текстовый файл data.txt содержит

1.25; 0.8973
1.44; 1.2398
1.54; 2.0019

то результатом выполнения команды

>> A=load('data.txt')

будет двумерный массив

A =
    1.2500    0.8973
    1.4400    1.2398
    1.5400    2.0019

Запись содержимого его столбцов в вектора x и y мы уже рассматривали выше, она производится при помощи простых команд

>> x=data(:,1);
>> y=data(:,2);

Функция load считает, что файл является текстовым, если его расширение отлично от mat. Если файл имеет расширение mat, то он считается двоичным. Про считывание данных из двоичного файла говорится чуть ниже.

Для считывания данных из Excel в MATLAB есть специальная функция xlsread, которая допускает несколько способов вызова. Рассмотрим основные из них.

Указание имени книги Excel в апострофах в качестве входного аргумента функции xlsread приводит к считыванию данных с первого листа книги. Если первый лист не содержит данных, то функция xlsread вернет пустой массив. При считывании данных с листа книги Excel игнорируются верхние строки и правые столбцы, содержащие текст. Числовые данные, полученные в ячейках листа в результате вычисления по формулам, считываются функцией xlsread как обычные числовые константы, введенные в ячейки.

Если, например, книга ExpData.xls содержит три листа, которые называются Experiment1, Experiment2, Experiment3 и первый лист такой, как на рисунке

то команда

>> A=xlsread('ExpData.xls')

приведет к появлению в рабочей среде следующего массива

A =
    0.1000    0.5670
    0.2000    0.9470
    0.3000    0.1230

(выделение значений из столбцов в вектора для импорта в приложение cftool было рассмотрено выше).

Если диапазон значений на первом листе содержит текст и пустые ячейки, то вместо них в возвращаемом функцией xlsread массиве будет находиться NaN (не числа - Not a Number). Например, если содержимое первого листа книги такое

то результатом работы функции xlsread будет массив с четырьмя столбцами и тремя строками

>> A=xlsread('ExpData.xls')
A =
    0.1000       NaN       NaN    0.5670
    0.2000       NaN       NaN    0.9470
    0.3000       NaN       NaN    0.1230

Для считывания данных из книги Excel не только с первого, а с произвольного листа, достаточно указать номер листа или его имя (в апострофах) в качестве второго входного аргумента. Если в книге ExpData.xls на втором листе с именем Experiment2 находятся такие данные

то следующие команды приводят к одинаковым результатам

>> A=xlsread('ExpData.xls',2)
A =
   11.0000    1.5670   12.5670
   12.0000    4.9470   16.9470
   13.0000    5.1230   18.1230
>> A=xlsread('ExpData.xls','Experiment2')
A =
   11.0000    1.5670   12.5670
   12.0000    4.9470   16.9470
   13.0000    5.1230   18.1230

Функция xlsread позволяет указать диапазон данных, которые требуется считать. Если диапазон данных указан в качестве ее второго входного аргумента, то происходит считывание данных из этого диапазона на первом листе книги Ecxel, а если во втором входном аргументе xlsread указать имя листа, а диапазон данных - в третьем, то будет производиться считывание данных из заданного диапазона этого листа. В предыдущем примере данные на листе Experiment2 расположены в диапазоне B2:C4, поэтому для их считывания следует применить:

>> A=xlsread('ExpData.xls','Experiment2','B2:C4')
A =
   11.0000    1.5670
   12.0000    4.9470
   13.0000    5.1230

Функция xlsread предоставляет удобную возможность интерактивного выделения диапазона считываемых данных. Если в качестве ее второго входного аргумента указать -1, то в Excel откроется книга, имя которой задано в первом входном аргументе функции xlsread, и появится диалоговое окно. Осталось выбрать лист, на листе выделить диапазон данных и нажать на кнопку OK в этом окне. Данные из выбранного диапазона вернутся в выходном аргументе функции xlsread.

Если требуется считать данные со всех листов книги Excel в рабочую среду MATLAB, то удобно занести их в структуру, поля которой будут совпадать с названиями листов книги, а их содержимое будет массивами числовых данных, расположенных на соответствующих листах книги. Перед считыванием данных из книги Excel следует узнать количество и названия листов. Эту информацию возвращает функция xlsinfo. Ее входным аргументом является имя книги, а в выходных возвращается строка с информацией "Microsoft Excel Spreadsheet" и массив ячеек, содержащий имена листов.

>> [type, sheets] = xlsfinfo('ExpData.xls')
type =
Microsoft Excel Spreadsheet
sheets = 
    'Experiment1'    'Experiment2'    'Experiment3'

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

function S=readxls(fname);
% Считывание данных из книги в структуру с полями, 
% являющимися названиями листов

[type, sheets] = xlsfinfo(fname); % получаем количество листов и их названия
S=[]; % сначала структура - пустой массив
% в цикле проходим по листам
for k=1:length(sheets) 
    sheetname=sheets{k}; % получаем название текущего листа
    data=xlsread(fname, sheetname); % считываем с него данные в числовой массив
    S=setfield(S,sheetname,data); % делаем числовой массив содержимым поля структуры
end

Для приведенной выше книги ExpData.xls с листами Experiment1, Experiment2 и Experiment3 наша функция readxls будет работать следующим образом

>> S=readxls('ExpData.xls')
S = 
    Experiment1: [3x4 double]
    Experiment2: [3x2 double]
    Experiment3: []

Поле Experiment1 содержит данные из листа Experiment1 книги ExpData.xls. Для доступа к содержимому поля следует указать его имя после имени структуры и разделить их точкой.

>> A=S.Experiment1
A =
    0.1000       NaN       NaN    0.5670
    0.2000       NaN       NaN    0.9470
    0.3000       NaN       NaN    0.1230

Рассмотрим еще импорт данных, заданных в двоичном файле. Файлы с данными в двоичном формате имеют расширение mat. Такие примеры, в которых данные читаются из файла в двоичном формате, приводятся в справочной системе, в том числе и по Curve Fitting Toolbox), например, в подкаталоге toolbox\matlab\demos\ содержится файл census.mat, в котором записаны два вектора cdate и pop. Для считывания данных из двоичного файла используется команда load, после нее ставится пробел и задается имя файла (двоичный файл с данными должен быть в текущем каталоге или в каталоге, имя которого записано в пути поиска MATLAB). Имя файла можно указывать без расширения.

>> load census

После этого в рабочей среде создаются два массива cdate и pop, содержащих записанные в файле данные. Т.е. в двоичном файле хранятся как имена переменных, так и их содержимое.

Для считывания значений только некоторых переменных из двоичного файла в рабочую среду MATLAB достаточно указать имена соответствующих переменных после имени файла. Например, если в рабочую среде требовалось создать только переменную cdate, содержащую данные из двоичного файла census.mat, то достаточно было выполнить следующую команду

>> load census cdate

Команда load, как и многие команды MATLAB, допускает функциональную форму вызова, но тогда все имена как файла, так и переменных следует задавать в апострофах, т.е. вместо

>> load census

можно писать

>> load('census')

Аналогично, команда

>> load census cdate

эквивалентна следующей функциональной форме

>> load('census', 'cdate')

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

>> S=load('census')
S = 
    cdate: [21x1 double]
      pop: [21x1 double]

Еще один способ открытия двоичных файлов заключается в использовании Мастера импорта, работа с которым разбиралась выше. При выборе двоичного файла Мастер импорта открывается для последнего шага, на котором можно посмотреть переменные, записанные в двоичный файл, их размеры и указать имена тех переменных, которые следует загрузить в рабочую среду MATLAB.

Для открытия двоичных файлов можно также выбрать в меню File рабочей среды MATLAB пункт Open, при этом появляется стандартное диалоговое окно открытия файла, в котором выбирается нужный файл. При таком способе открытия двоичного файла все записанные в него переменные автоматически загружаются в рабочую среду.

Далее мы рассмотрим импорт данных в приложение cftool, предназначенное для решения задачи о подборе параметров.

В оглавление книги \ К предыдущему разделу \ К следующему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика