По проекту MATLAB®программное обеспечение может эффективно выполнять повторные операции над наборами данных, хранящихся в векторах и матрицах. Код MATLAB, который записывается для работы одновременно с различными массивами, называется векторизированным. Векторизованный код не только чистый и краткий, но и эффективно обрабатывается MATLAB.
Поскольку MATLAB оптимизирован для обработки векторизованного кода, многие функции Financial 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
-by- 9
вектор. Если вы создаете вектор или матрицу из векторов символов, каждый вектор символов должен иметь одинаковую длину. Использование вектора-столбца для создания вектора векторов символов может позволить вам визуально проверить, что все векторы символов имеют одинаковую длину. Если ваши векторы символов не совпадают по длине, используйте пространства или нули, чтобы сделать их такой же длиной, как в следующем коде.
DateFields = ['01/12/2017' '02/14/2017' '03/03/2017' '06/14/2017' '12/01/2017'];
DateFields
является 5
-by- 10
массив векторов символов.
Вы не можете смешивать числа и векторы символов в векторе или матрице. Если вы вводите вектор или матрицу, которая содержит смесь чисел и векторов символов, MATLAB рассматривает каждую запись как символ. В качестве примера введите следующий код
Item = [83 90 99 '14-Sep-1999']
Item = SZc14-Sep-1999
Программа понимает вход не как 1
-by- 4
вектор, но как 1
-by- 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
невозможно принять один входной вектор со значениями для каждого актива в наборе.