Раздел: Документация
0 ... 136 137 138 139 140 141 142 ... 365 I 1.57ц 1.00001 I 3.1421 0.00001 I 4.7121 1.00001 I 6.2831 0.00001 Простые структуры Структура представляет собой элемент данных, содержащий разнотипные поля, например, числа, массивы и строки. Вам уже приходилось иметь дело со структурами при чтении главы 6, в которой была описана генерация структуры options специальными функциями optimset и odeset с целью управления процессом вычислений. Решение уравнений при помощи fzero потребовало задания значений полей Tolx, ToiFun, Display, причем сами значения были как числами, так и строками. Научимся теперь создавать собственные структуры и оперировать данными, хранящимися в их полях. Создание простой структуры осуществляется командой struct, имеющей формат: имя структуры = struct(имя поля1,значение1,имя поля2,значение2,...] где именами полей являются строки или строковые переменные, а значениями — данные любых типов, включая числовые массивы, строки, массивы строк и структуры. Следующая команда создает структуру transaction, содержащую параметры сделки по ценным бумагам (можно набирать в одну строку без символа переноса строки ..., используемого в MATLAB): » transaction = struct{1 time, [10,20,46], stock, EESR, volume,... 10000, price1, 0.23, currency, USD, bid, 0.21, ask, 0.27) Результат сразу же вывелся в командное окно в форме таблицы, каждая строка которой содержит название поля и его значение: transaction = time:[10 20 46] stock:EESR1 volume:10ООО price:0.2300 currency:USD Поля стуктуры transaction имеют следующий смысл: time— время совершения сделки, stock — код ценной бумаги, volume — объем сделки, price — цена исполнения сделки, currency — код валюты расчетов по сделке, bid — цена спроса на момент совершения сделки, ask — цена предложения на мо- bid: 0.2100 ask: 0.2700 мент совершения сделки. В рассматриваемой структуре значениями полей являются числа, строки и массив чисел. Значения полей можно посмотреть и в окне Workspace. Примечание До глоеы 20, где будут детально рассмотрены способы представления даты и времени и функции для работы с ними, мы будем записывать эти данные в собственном формате. В данном случае время задается массивом из трех чисел: часы (от 0 до 24), минуты и секунды (от 0 до 60). Обращение к значению поля обеспечивается идентификатором, состоящим из имени структуры и имени поля, разделенных точкой. Такое составное имя всегда интерпретируется как обращение к полю структуры. Сумма сделки в рублях может быть вычислена с использованием содержимого полей структуры и курса ЦБ РФ на дату совершения сделки exchange: » exchange = 28.5214,- >> format bank >> settlement = exchange * transaction.price * transaction.volume settlement = 65599.22 Изменение формата вывода результата желательно для получения ответа в форме, удобной при проведении финансовых вычислений. Полями структуры могут быть другие структуры. В структуре transaction имеются три однотипых поля — это цена исполнения, цена предложения и цена спроса. Все они связаны с валютой. Изменим структуру transaction, выделив эти поля в одну новую структуру strike: » transaction = struct(time, [10,20,46],stock, EESR1, volume, ... 10000, "strike", struct(currency, USD, price,0.23, bid", 0.21, ... ask, 0.27)) transaction - time: [10 20 46] stock: 1EESR volume: 10000 strike: [lxl struct] Для доступа к полю второй структуры следует использовать составное имя, включающее имя основной структуры, имя вложенной структуры и имя поля, разделенные точкой. Цена сделки теперь вычисляется по формуле: >> settlement = exchange*transaction.strike.price*transaction.volume Выражения для задания вложенной структуры можно (и нужно для упрощения) разбить на части, результат получится тот же самый >> ft = struct(currency", USD, price, 0.23, bid, 0.21, ... 1 ask 1, 0 .27); >> transaction = struct(time, [10, 20, 46], stock, EESR,... volume1, 10000, strike, A) transaction = time: [10 20 46] stock: 1EESR volume: 10000, strike: [lxl struct] Обратите внимание, что при выводе структуры transaction в командное окно поля вложенной структуры strike не отображаются. Для того чтобы посмотреть значения полей вложенной структуры, следует обратиться именно к ней: » transaction.strike ans = currency: USD1 price: 0.2300 bid: 0.2100 ask: 0.2700 Существующая структура может быть изменена, если добавить или удалить поле. Добавление поля происходит при присвоении некоторого значения ранее не существовавшему полю. Примечание J Присвоение полю значения позволяет создавать структуры. Например, если в рабочей среде нет переменной S, или она есть, но не является структурой, то оператор присваивания S.h = 17 приводит к созданию структуры S с полем h, в котором записано число 17 Добавим поле exchange в структуру а. » A.exchange= 28.5214 а = currency:USD1 price:0.23 bid:0.21 ask:0.27 exchange:28.5214 0 ... 136 137 138 139 140 141 142 ... 365
|