Рефераты. Система математических расчетов MATLAB

                                 name: 'John Doe'

                                 billing: 127

                                 test: [3x3 double]

patient является массивом, представляющим собой структуру с тремя полями. Для расшире-ния данного массива нужно просто добавить соответствующие индексы после имени струк-туры:


                                patient(2).name = 'Ann Lane';

                                patient(2).billing = 28.50;

                                patient(2).test = [68 70 68; 118 118 119; 172 170 169];

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

                                                Patient

                                  patient =

                                          1x2 struct array with fields:

                                                      name

                                                      billing

                                                      test

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


  • Все структуры в массиве имеют одинаковое число полей.
  • Все соответствующие поля имеют одинаковые имена.

Например, при вводе


                                     patient(3).name = 'Alan Johnson'


структура patient принимает размер 1х3. При это оба поля patient(3).billing и patient(3).test содержат пустые матрицы.

Внимание!  Размеры данных в одноименных полях могут быть различными. В нашем при-мере со структурой patient поля  name могут иметь различную длину, поля  test могут содер-жать массивы числовых данных различных размеров и так далее.


Создание массива структур с использованием функции struct.

Вы можете заранее создать массив структур применив функцию struct. Ее основная форма имеет вид


str_array = struct ('поле1',знач1,'поле2',знач2, ...)


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


 Вы можете использовать различные методы для задания массива структур. Эти методы отличаются способом инициализации полей структуры. В качестве примера расмотрим зада-ние структуры размера 1х3 с именем  weather (погода), имеющую поля temp (температура)

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



Метод

Синтаксис

Задание

Функция struct

weather(3) = struct('temp',72,'rainfall',0.0);

        Структура  weather(3) инициализируется с указан-ными значениями полей. По-ля остальных двух структур в массиве,   weather(1)    и weather(2), содержат в качес-тве данных пустые матрицы.

Сочетание функций struct  и repmat

weather =

repmat (struct ('temp', 72,

'rainfall', 0.0), 1, 3);

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

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

weather =

struct ('temp',{68, 80, 72},

'rainfall', {0.2,0.4,0.0} );

Структуры в массиве weather инициализируются с разными значениями полей, заданных массивом ячеек.

Обращение к данным в массивах структур.

Используя индексацию массива структур, можно осуществить обращение к данным любого поля или любого элемента поля в массиве структуры. Аналогичным образом, вы можете за-дать значение  любого поля или элемента поля структуры. В качестве примера, используемо-го в данном разделе, рассмотрим структуру, представленную на приведенном ниже рисунке.


 


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


                                         mypatients = patient(1:2)

                                        1x2 struct array with fields:

                                        name

                                        billing

                                        test


Первая структура в массиве mypatients совпадает с первой структурой в массиве patient:


                                         mypatients(1)

                                ans =

                                         name: 'John Doe'

                                         billing: 127

                                         test: [3x3 double].


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


                                      str = patient(2) . name

                                     str =

                                               Ann Lane


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

                                     test2b = patient(3).test(2,2)

                                     test2b =

                                                     153


Аналогичную форму записи следует использовать и для задания значений переменных внутри поля, например,


patient(3).test(2,2) = 7

Вы можете также одновременно извлечь данные одноименных полей многомерной структу-ры.  Например, запись ниже создает вектор 1х3, содержащий все значения счетов полей billing fields.


bills = [patient.billing]

                                                    bills =

127.0000   28.5000   504.7000


Аналогично, вы можете создать массив ячеек, содержащий данные температур test для пер-вых двух структур.


tests = {patient(1:2).test}

                                                  tests =

                                                          [3x3 double] [3x3 double]

Обращение к полям структуры с применением функций setfield и getfield

Прямая индексация обычно является наиболее эффективным способом задания или получе-ния значений полей структуры. Если, однако, вы знаете только название поля в виде строки, например, если вы использовали функцию fieldnames для получения имени поля в пределах M-файла – то для указанных операций с данными этих полей можно также применить функ-ции setfield и getfield.

Функция getfield  позволяет получить значение или значения поля или элемента поля и име-ет следующий синтаксис


f = getfield(array,{array_index},'field',{field_index})


где индекс field_index является необязательным , а array_index является необязательным для массива структур размера 1х1. Данный синтаксис соответствует записи


f = array(array_index).field(field_index)


Например, для обращения к полю name во второй структуре массива patient запишем


str = getfield(patient,{2},'name')


Аналогично, функция  setfield  дает возможность задать значения полей используя синтаксис


f = setfield (array,{array_index},'field',{field_index},value)


Определение размера массива структур

Для получения размера массива структур или размера любого поля структуры. можно вос-пользоваться функцией size. При вводе в качестве аргумента функции size имени структуры, данная функция возвращает вектор размерностей массива. Если задать аргумент в форме массив(n).поле, функция  size возвращает размер содержимого поля. Например, для нашей структуры patient размера 1х3, запись size(patient) возвращает вектор [1 3]. Выражение size(patient(1,2).name)  возвращает длину строки имени элемента (1,2) структуры patient.

Добавление полей к структуре

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


patient(2).ssn = '000–00–0000'

 

При этом поле patient(2).ssn второго пациекта имеет заданное значение. Все другие структу-ры в массиве структур также имеют поле ssn, но эти поля содержат пустые матрицы до тех пор, пока вы не зададите в явном виде соответствующие значения.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.