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

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 6. Массивы записей

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

6.3. Обработка структур

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

Пример.
Вычислить среднее арифметическое строк массива test для записи patient(2):

       patient(2).test

Поле patient(2).test содержит следующий массив

        ans =

68 70 68
118 118 119
172 170 169

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

           mean((patient(1,2).test)')
            ans = 68.6667          118.3333           170.3333

Существует несколько способов применения функций и операторов системы MATLAB для работы с полями структуры:

  • использование циклов;
  • заключение обозначения поля в квадратные скобки [<имя_структуры>.<имя_поля>].

Пример.
Рассмотрим операцию суммирования полей billing в структуре patient:

        использование цикла:
       total = 0;
        for j = 1:length(patient)
               total = total + patient(j).billing;
        end
        total

        total =    [ ]

Проверим длину записи patient и содержимое поля patient.billing

        [patient.billing]
        ans = 127.0000       28.5000
        length(patient)
        ans =    3

Таким образом, одно из значений поля patient.billing оказывается неприсвоенным и поэтому результат total оказывается пустым.

             Использование квадратных скобок для полей:
                    total = sum ([patient.billing])
                     total = 155.5000

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

Суммирование значений некоторого поля эквивалентно оператору

           total = sum([patient(1).billing, patient(2).billing...]);

Написание функций для работы со структурами. Для обработки структур со специфической архитектурой полей могут понадобиться специальные функции обработки полей и их элементов. При написании М-файлов для обработки структур необходимо помнить, что пользователь должен сам выполнить анализ возникновения возможных ошибок, связанных с обработкой полей.

Пример.
Рассмотрим набор данных, связанных с замером в разные моменты времени токсинов в воде. Данные состоят из 15 отдельных наблюдений, где каждое наблюдение содержит три измерения. Можно объединить эти данные в массив из 15 записей, каждая из которых имеет 3 поля, по одному на каждое измерение.

Приведенная ниже функция concen оперирует со специфическими харктеристиками структуры, содержащей поля lead, mercury и chromium, которым соответствуют концентрации свинца, ртути и хрома.

               function [r1,r2] = concen(toxtest);
               k = length(toxtest);
               % Вычислить 2 вектора:
               % r1 - отношение концентраций ртути к свинцу
               % r2 - отношение концентраций свинцу к хрому.
               for i = 1:k
                    r1 = [toxtest.mercury]./[toxtest.lead];
                    r2 = [toxtest.lead]./[toxtest.chromium];
               end
               % Графики концентраций свинца, ртути и хрома
               for j = 1:k
                    lead = [toxtest.lead];
                    mercury = [toxtest.mercury];
                    chromium = [toxtest.chromium];
               end
               plot(lead, 'r'); hold on
               plot(mercury, 'b')
               plot(chromium, 'g'); hold off

Проверим эту функцию на примере структуры test:

test(1).lead = .007; test(2).lead = .031; test(3).lead = .019;
test(1).mercury = .0021; test(2).mercury = .0009; test(3).mercury = .0013;
test(1).chromium = .025; test(2).chromium = .017; test(3).chromium = .10;

      [r1, r2] = concen(test)
      r1 = 0.3000   0.0290   0.0684
      r2 = 0.2800   1.8235   0.1900

ris603.jpg (15315 bytes)

Рис. 6.3

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

 


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

Система Orphus

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