48968 (597417), страница 14

Файл №597417 48968 (Система математических расчетов MATLAB) 14 страница48968 (597417) страница 142016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 14)

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;

Организация данных в массиве структур

Ключ к организации массива структур состоит в выборе способа, которым вы хотите обра-щаться к подмассивам данных или отдельным данным структуры. Это, в свою очередь, оп-ределяет как вы дольжны построить массив, содержащий структуры и как выбирать поля структуры. Например, рассмотрим RGB изображение размера 128х128, запомненное в трех различных массивах : RED, GREEN и BLUE.

Имеются по меньшей мере две возможности для организации таких данных в массив струк-

тур.

Плоская организация Поэлементная организация

Плоская организация

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

A.r = RED;

A.g = GREEN;

A.b = BLUE;

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

red_plane = A.r;

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

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

red_sub = A.r (2:12, 13:30);

grn_sub = A.g (2:12, 13:30);

blue_sub = A.b (2:12, 13:30);

Поэлементная организация

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

for i = 1:size(RED,1)

for j = 1:size(RED,2)

B(i,j) .r = RED(i,j);

B(i,j) .g = GREEN(i,j);

B(i,j) .b = BLUE(i,j);

end

end

При поэлементной организации, вы можете осуществить обращение к подмножествам дан-ных при помощи единственного выражения:

Bsub = B(1:10, 1:10);

Однако, обращение к полной плоскости изображения при поэлементом методе требуется цикл :

red_plane = zeros(128,128);

for i = 1 : (128*128)

red_plane(i) = B(i).r;

end

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

Пример - Простая база данных

Рассмотрим организацию простой базы данных.

А Плоская организация В Поэлементная организация

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

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

а) При плоской организации

avg = mean(A.amount);

б) При поэлементной организации

avg = mean([B.amount]);

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

function client(name,address, amount)

disp(name)

disp(address)

disp(amount)

Для вызова функции client для второго клиента записываем,

client(A.name(2,:),A.address(2,:), A. amount (2,:))

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

function client(B)

disp(B)

Для вызова функции client для второго клиента при этом просто записываем,

client(B(2))

  • Поэлементная организация позволяет более просто расширять поля массивов строк. Если вы заранее не знаете максимальную длину строки при плоской организации, вам может потребоваться часто корректировать поля name или address , чтобы ввести более длинные строки.

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

Вложенные структуры

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

Создание вложенных структур при помощи функции struct

Для создания вложенных структур вы можете применить функцию struct . Например, создадим массив структур размера 1х1 со вложенной в поле nest структурой:

A = struct('data',[3 4 7; 8 0 1],'nest',struct('testnum','Test 1', 'xdata',[4 2 8],'ydata',[7 1 6]));

Применим теперь операторы присваивания для добавления сторого элемента к массиву А:

A(2).data = [9 3 2; 7 6 5];

A(2).nest.testnum = 'Test 2';

A(2).nest.xdata = [3 4 2];

A(2).nest.ydata = [5 0 9];

Индексация вложенных структур

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

  • Для обращения к вложенной структуре внутри А(1) запишем A(1).nest.

  • Для обращения к полю xdata во вложенной структуре в A(2) запишем A(2).nest.xdata.

  • Для обращения к элементу 2 поля ydata в A(1), запишем A(1).nest.ydata(2).

МАССИВЫ ЯЧЕЕК

Массивы ячеек это массивы данных системы MATLAB элементы которых являются ячейка-ми и могут служить «хранилищами» для других массивов данных. Например, одна ячейка массива ячеек может содержать матрицу действительных чисел, другая ячейка – массив тек-стовых строк, а третья – вектор комплексных значений.

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

Создание массивов ячеек

Вы можете создавать массивы ячеек двумя способами:

  • Используя операторы присваивания.

  • Используя функцию cell, а затем назначая данные созданных ячеек.

Применение операторов присваивания

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

  • Индексация ячеек

Заключите индексы ячейки в обычные скобки с использованием стандартной индексации массивов. Заключите содержимое ячейки в правой стороне оператора присваивания в фигур-ные скобки “{}”. Например, создадим массив ячеек А размера 2х2.

A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};

A(1,2) = {'Anne Smith'};

A(2,1) = {3+7i};

A(2,2) = {–pi:pi/10:pi};

Внимание! Запись “{}” обозначает пустой массив ячеек, точно так же как “[ ]” обозначает пустую матрицу для числовых массивов. Вы можете использовать пустой массив ячеек в лю-бых выражениях с массивами ячеек.

  • Индексация содержимого ячеек

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

A{1,1} = [1 4 3; 0 5 8; 7 2 9];

A{1,2} = 'Anne Smith';

A{2,1} = 3+7i;

A{2,2} = –pi:pi/10:pi;

Различные примеры, приведенные ниже, используют оба приведенных синтаксиса. Обе фор-мы записи являются вполне взаимозаменяемыми.

Внимание! Если вы уже имеете числовой массив с заданным именем, не пытайтесь создать массив ячеек с помощью операторов присваивания, не уничтожив предаврительно числовой массив. Если вы не очистите числовой массив, MATLAB примет, что вы пытаетесь «сме-шать» синтаксисы ячеек и числовых массивов и выдаст сообщение об ошибке.

MATLAB выводит содержимое массива ячеек на дисплей в сжатой форме. Для нашего мас-сива А мы получим.

A =

[3x3 double] 'Anne Smith'

[3.0000+ 7.0000i] [1x21 double]

Для вывода полного содержания ячеек, нужно воспользоваться функцией celldisp. Для гра-фического вывода на дисплей архитектуры ячейки служит функция cellplot. Если вы назна-чаете данные ячейке, которая находится вне размерности имеющегося массива ячеек, MATLAB автоматически расширяет массив, чтобы включить заданный вами элемент. При этом промежуточные ячейки заполняются пустыми матрицами. Например, приведенный ни-же оператор присваивания превращает массив ячеек А размера 2х2 в массив размера 3х3.

A(3,3) = {5};

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

Использование фигурных скобок для построения массивов ячеек

Фигурные скобки, “{}”, являются такими же конструктурами массивов ячеек, как квадрат-ные скобки являются конструкторами числовых массивов. Фигурные скобки используются совершенно аналогично квадратным скобкам, за тем исключением, что их можно использо-вать для вложения массивов ячеек (см. ниже).

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

C = {[1 2], [3 4]; [5 6], [7 8]};

приводит к следующему массиву ячеек размера 2х2

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

Задание массивов ячеек при помощи функции cell

Функция cell позволяет создавать пустые массивы ячеек заданного размера. Например, сле-дующее выражение создает пустоймассив ячеек размера 2х2.

B = cell(2, 3);

Для заполнения ячеек массива В нужно прменить операторы присваивания:

B(1,3) = {1:3};

Доступ к данным массивов ячеек

Вы можете извлекать данные из массивов ячеек или же запоминать данные в имеющемся или вновь созданном массиве ячеек двумя способами:

  • Использованием индексации содержимого ячеек при помощи обычных индексов.

  • Использованием индексов, заключенных в фигурные скобки.

Доступ к данным массивов ячеек с использованием фигурных скобок

Вы можете использовать индексирование содержимого в правой части выражения для обра-щения ко всем данным в какой-либо отдельной ячейке. Для этого в левой части выражения следует задать переменную для записи содержимого ячейки. Заключите индексы ячеек в фигурные скобки. Это означает, что вы обращаетесь к содержимому ячейки. Рассмотрим следующий массив N размера 2х2:

N{1,1} = [1 2; 4 5];

N{1,2} = 'Name';

N{2,1} = 2 – 4i;

N{2,2} = 7;

Вы можете получить строку в N{1,2} записав

c = N{1,2}

При вводе данной строки MATLAB выдаст

c =

Name

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

Характеристики

Тип файла
Документ
Размер
9,13 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6548
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее