190 likes | 410 Views
Форматы числовых данных. Задается с помощью команды или функции format Имеются следующие аргументы: short - четыре знака после запятой. long – 15 знаков для double и семь знаков для single Другие аргументы shortG , longG – наиболее удобочитаемый формат числа.
E N D
Форматы числовых данных • Задается с помощью команды или функции format • Имеются следующие аргументы: • short - четыре знака после запятой. • long – 15 знаков для double и семь знаков для single • Другие аргументы • shortG, longG– наиболее удобочитаемый формат числа
Результат выполнения разных форматов
Пакет Financial Toolbox • Основной экономический пакет MatLab. • В этом разделе рассматриваются приемы использования средств FinancialToolbox для решения модельных задач предметной области. Вопросы, связанные с адекватностью моделей, условий их применимости или справедливости гипотез относительно состояния финансовых рынков и аналогичные вопросы выходят за рамки данного раздела. Более того, применение средств пакета в некоторых случаях может приводить к неверным результатам с точки зрения бизнес-приложений. Проблема анализа полученных данных и их дальнейшего применения лежит на пользователе пакета и требует дополнительного экономического образования. • Дополнительные пакеты: Financial Derivative Toolbox, Fixed-Income Toolbox
Работа с датами • MatLabпредставляет даты в своем внутреннем представлении. • Для получения данного представления следует воспользоваться командой now. • Результат вывода такой команды: десятичное число: • Целая часть – номер дня после 01 января 0000 г. (от р. Х.) • Дробная часть – время, отсчитанное от полуночи текущего дня.
Обращение к now >> format longG >> now ans = 734804.871996979 Таким образом в момент создания слайда был 734804 день и 0.871996979 часть 24 часов.
Человеческое представление датТекстовый формат • Представление даты в виде строчки. Строчка может иметь различные представления: • год-месяц-число • год-месяц-число часы-минуты-секунды • квартал-год • и другие • Функция для получения текстового предствления datestr(inner_format, type) • inner_format – внутреннее представление • type – тип представления
>> n=now; >> datestr(n, 0) ans = 28-Oct-2011 21:25:52 >> datestr(n, 1) ans = 28-Oct-2011 >> datestr(n, 2) ans = 10/28/11 >> datestr(n, 17) ans = Q4-11 >> datestr(n, 18) ans = Q4 >> datestr(n, 5) ans = 10 >> datestr(n, 6) ans = 10/28 >> datestr(n, 7) ans = 28 >> datestr(n, 8) ans = Fri >> datestr(n, 9) ans = F >> datestr(n, 10) ans = 2011 >> datestr(n, 11) ans = 11 >> datestr(n, 12) ans = Oct11 >> datestr(n, 13) ans = 21:25:52 >> datestr(n, 14) ans = 9:25:52 PM
Человеческое представление датЧисловой формат • Для получения числовой (или векторной) записи даты используется функция datavec: • Vector_format=datavec(inner_format{/ text_format}) • [yyyy, mmm, dd, hh, mm, ss]=datavec(……) • В первом случае результат будет записан в массив Vector_formatразмерности 6 • Во втором случае результат будет записан в указанные переменные. • Не все текстовые форматы можно привести к числовому.
>> n=now; >> str=datestr(n, 0) str = 28-Oct-2011 21:42:40 >> vec=datevec(n) vec = Columns 1 through 3 2011 10 28 Columns 4 through 6 21 42 40.9400024414063 >> vec=datevec(str) vec = 2011 10 28 21 42 40 >> str=datestr(n, 5) str = 10 >> vec=datevec(str) ??? Error using ==> datevec at 280 Cannot parse date 10. >> str=datestr(n, 2) str = 10/28/11 >> vec=datevec(str) vec = 2011 10 28 0 0 0 >> str=datestr(n, 17) str = Q4-11 >> vec=datevec(str) ??? Error using ==> datevec at 216 Failed to lookup month of year.
>> n=now; >> [year, month, day, hour, minute, second]=datevec(n) year = 2011 month = 10 day = 28 hour = 21 minute = 47 second = 12.0139999389648 >> str=datestr(n, 1) str = 28-Oct-2011 >> [year, month, day, hour, minute, second]=datevec(str) year = 2011 month = 10 day = 28 hour = 0 minute = 0 second = 0
Вычисление интервалов между датами • В MatLab интервалы между датами вычисляются с помощью функции number_of_days=daysdif(start, final, basis) • start – начальная дата • final – конечная дата • basis – базовый период
Базовый период расчета интервала между датами • Количество дней, попадающих между двумя датами зависит от календаря. Базовый период и представляет такие календари. • basis=0 – дней в году фактическое (365 или 366), дней в месяце фактическое (28, 29, 30 или 31) • basis=1 – дней в году 360, дней в месяце 30 • basis=2 – дней в году 360, дней в месяце фактическое • basis=3 – дней в году 365, дней в месяце фактическое • Всего имеется 13 различных вариантов
>> str1=datestr(n, 1) str1 = 28-Oct-2011 >> str2='28-Apr-2011'; >> datenum(str2) ans = 734621 >> number=daysdif(str1, str2, 0) number = -183 >> number=daysdif(str2, str1, 0) number = 183 >> number=daysdif(str2, str1, 1) number = 180 >> str2='01-Jan-2010'; >> str1='01-Jan-2011'; >> number=daysdif(str2, str1, 2) number = 365 >> number=daysdif(str2, str1, 3) number = 365
Выходные дни В файл-функцииholidays.mопределены нерабочие дни с 01 января 1885 года до 31 декабря 2030 года для Нью-Йоркской фондовой биржи.
Элемент листинга holidays.m 734520 ; ... % 17-Jan-2011 Martin Luther King, Jr. Day (Mon) 734555 ; ... % 21-Feb-2011 Washington's Birthday (Mon) 734615 ; ... % 22-Apr-2011 Good Friday (Fri) 734653 ; ... % 30-May-2011 Memorial Day (Mon) 734688 ; ... % 04-Jul-2011 Independence Day (Mon) 734751 ; ... % 05-Sep-2011 Labor Day (Mon) 734831 ; ... % 24-Nov-2011 Thanksgiving (Thu) 734863 ; ... % 26-Dec-2011 Monday after Christmas (Mon) 734870 ; ... % 02-Jan-2012 Monday after New Year's Day (Mon) 734884 ; ... % 16-Jan-2012 Martin Luther King, Jr. Day (Mon)
Вычисление рабочих дней • Вычислив праздники, можно посчитать их количество. • После этого можно воспользоваться функцией wrkdydif(start, final, holiday) для вычисления рабочих дней между двумя датами start и final.
>> str1='28-Oct-2011'; • >> str2='20-Jan-2012'; • >> number=daysdif(str1, str2) • number = • 84 • >> hd=holidays(str1, str2) • hd = • 734831 • 734863 • 734870 • 734884 • >> hd=datestr(holidays(str1, str2)) • hd = • 24-Nov-2011 • 26-Dec-2011 • 02-Jan-2012 • 16-Jan-2012 • >> n=length(hd) • n = • 11 • >> wd=wrkdydif(str1, str2, n) • wd = • 50 • >> hd=holidays(str1, str2) • hd = • 734831 • 734863 • 734870 • 734884 • >> n=length(hd) • n = • 4 • >> wd=wrkdydif(str1, str2, n) • wd = • 57
Последний день в месяце • MatLab позволяет вычислить дату последнего в месяце дня недели. • Для этого используется команда lweekdate(weekday, year, month) • weekday – день, который ищется. Задается целым числом от 1 до 7, начиная с воскресенья и заканчивая субботой. • year –четырех-значное целое число • month – целое число от 1 до 12
>> year=2011; >> month=10; >> day=4; >> date=lweekdate(day, year, month) date = 734802 >> datestr(date) ans = 26-Oct-2011 >> year=[2011, 2012, 2013]; >> date=lweekdate(day, year, month) date = 734802 735173 735537 >> datestr(date) ans = 26-Oct-2011 31-Oct-2012 30-Oct-2013