Благодаря своей конструкции программное обеспечение MATLAB ® может эффективно выполнять повторные операции с коллекциями данных, хранящихся в векторах и матрицах. Говорят, что векторизируется код MATLAB, который записывается для одновременной работы в различных массивах. Векторизированный код не только чистый и лаконичный, но и эффективно обрабатывается MATLAB.
Поскольку MATLAB оптимизирован для обработки векторизованного кода, многие функции финансового Toolbox™ принимают либо векторные, либо матричные входные аргументы, а не одиночные (скалярные) значения.
Одним из примеров такой функции является irr функция, которая вычисляет внутреннюю норму доходности потока денежных потоков. Если ввести вектор денежных потоков из одного потока денежных потоков, то irr возвращает скалярную скорость возврата. Если ввести матрицу денежных потоков из нескольких потоков денежных потоков, где каждый столбец матрицы представляет отдельный поток, то irr возвращает вектор внутренней нормы доходности, где столбцы соответствуют столбцам входной матрицы. Многие другие функции Financial Toolbox работают аналогично.
Например, предположим, что вы производите первоначальные инвестиции в размере 100 долларов США, из которых вы получаете серию ежегодных денежных поступлений в размере 10, 20, 30, 40 и 50 долларов США. Этот поток денежных потоков хранится в векторе.
CashFlows = [-100 10 20 30 40 50]'
CashFlows =
-100
10
20
30
40
50
Используйте irr функция для вычисления внутренней нормы доходности потока денежных средств.
Rate = irr(CashFlows)
Rate =
0.1201
Для одного потока денежных средств CashFlows, функция возвращает скалярную скорость возврата 0.1201, или 12,01%.
Теперь используйте irr функция для вычисления внутренних норм доходности для множества потоков денежных потоков.
Rate = irr([CashFlows CashFlows CashFlows])
Rate =
0.1201 0.1201 0.1201
MATLAB выполняет одинаковые вычисления для всех активов одновременно. Для трех потоков денежных потоков: irr функция возвращает вектор из трех внутренних коэффициентов доходности.
В контексте Financial Toolbox векторизированное программирование полезно в управлении портфелем. Можно упорядочить несколько основных средств в один набор путем размещения данных по каждому основному средству в отдельном столбце или строке матрицы, а затем передать матрицу функции Financial Toolbox.
Введите векторы символов MATLAB, окруженные одиночными кавычками ('character vector').
Символьный вектор хранится как символьный массив, по одному ASCII-символу на элемент. Таким образом, вектор символов даты равен
DateCharacterVector = '9/16/2017'
Этот вектор символов даты фактически является 1около-9 вектор. При создании вектора или матрицы символьных векторов каждый символьный вектор должен иметь одинаковую длину. Использование вектора столбца для создания вектора символьных векторов позволяет визуально проверить, что все символьные векторы имеют одинаковую длину. Если векторы символов не имеют одинаковой длины, используйте пробелы или нули, чтобы сделать их такой же длиной, как в следующем коде.
DateFields = ['01/12/2017'
'02/14/2017'
'03/03/2017'
'06/14/2017'
'12/01/2017'];
DateFields является 5около-10 массив векторов символов.
Нельзя смешивать числа и векторы символов в векторе или матрице. При вводе вектора или матрицы, содержащей комбинацию чисел и символьных векторов, MATLAB рассматривает каждую запись как символ. В качестве примера введите следующий код
Item = [83 90 99 '14-Sep-1999']
Item = SZc14-Sep-1999
Программное обеспечение понимает входные данные не как 1около-4 вектор, но как 1около-14 символьный массив со значением SZc14-Sep-1999.
Некоторые функции не возвращают аргументов, некоторые возвращают только один, а некоторые возвращают несколько аргументов. Функции, возвращающие несколько аргументов, используют синтаксис
[A, B, C] = function(input_arguments...)
для возврата аргументов A, B, и C. Если опустить все, кроме одного, функция возвращает первый аргумент. Таким образом, для этого примера используется синтаксис
X = function(input_arguments...)
function возвращает значение для A, но не для B или C.
Некоторые функции, возвращающие векторы, принимают только скаляры в качестве аргументов. Такие функции не могут принимать векторы в качестве аргументов и возвращаемых матриц, где каждый столбец в выходной матрице соответствует записи на входе. Выходные векторы могут иметь переменную длину.
Например, большинство функций, которым требуется срок службы актива в качестве входных данных и возвращаемые значения, соответствующие различным периодам в течение срока службы актива, не могут обрабатывать векторы или матрицы в качестве входных аргументов. Эти функции включают amortize, depfixdb, depgendb, и depsoyd. Например, рассмотрим автомобиль, для которого требуется рассчитать график амортизации. Используйте depfixdb функция для вычисления потока значений амортизации с уменьшающимся балансом для основного средства. Установка начальной стоимости основного средства и срока его службы. Следует отметить, что в возвращенном векторе время жизни актива определяет количество строк. Теперь рассмотрим коллекцию автомобилей с разным временем жизни. Поскольку depfixdb невозможно вывести матрицу с неравным числом строк в каждом столбце, depfixdb не может принять один входной вектор со значениями для каждого актива в коллекции.