Объяснения в разделах, которые следуют, должны помочь обновить ваши навыки для использования матричной алгебры и использования функций MATLAB®.
Кроме того, Макроинвестиционный Анализ Уильямом Шарпом также дает превосходное объяснение использования операций матричной алгебры MATLAB. Это имеется в сети в:
Когда вы настраиваете проблему, она помогает "говорить через" модули и размерности, сопоставленные с каждой матрицей ввода и вывода. В примере в соответствии с Умножающимися Матрицами одна входная матрица имеет цены закрытия пяти дней за три запаса, другая входная матрица имеет доли трех запасов в двух портфелях, и выходная матрица поэтому имеет заключительные значения пяти дней для двух портфелей. Это также помогает назвать переменные, использующие описательные термины.
Матричное сложение и вычитание действуют поэлементно. Две входных матрицы должны иметь те же размерности. Результатом является новая матрица тех же размерностей, где каждый элемент является суммой или различием каждого соответствующего входного элемента. Например, рассмотрите объединяющиеся портфели различных количеств тех же запасов (“доли запасов A, B, и C [строки] в портфелях P и Q [столбцы] плюс доли A, B, и C в портфелях R и S”).
Portfolios_PQ = [100 200 500 400 300 150]; Portfolios_RS = [175 125 200 200 100 500]; NewPortfolios = Portfolios_PQ + Portfolios_RS
NewPortfolios = 275 325 700 600 400 650
Добавление или вычитание скаляра и матрицы позволены и также действуют поэлементно.
SmallerPortf = NewPortfolios-10
SmallerPortf = 265.00 315.00 690.00 590.00 390.00 640.00
Умножение матриц не действует поэлементно. Это действует согласно правилам линейной алгебры. В умножающихся матрицах это помогает помнить это ключевое правило: внутренние размерности должны быть тем же самым. Таким образом, если первая матрица является m-by-3
, вторым должен быть 3
-by-n. Получившаяся матрица является m на n. Это также помогает “говорить через” модули каждой матрицы, как упомянуто в Анализируют Наборы Чисел Используя Матричные Функции.
Умножение матриц также не является коммутативным; то есть, это весьма зависимо из порядка. A*B не равняется B*A. Правило измерения иллюстрирует это свойство. Если A является 1
-by-3
матрица, и B является 3
-by-1
матрица, A*B приводит к скаляру (1
-by-1
) матрица, но B*A приводит к 3
-by-3
матрица.
Векторное умножение следует тем же правилам и помогает проиллюстрировать принципы. Например, портфель запаса имеет три различных запаса, и их цены закрытия сегодня:
ClosePrices = [42.5 15 78.875]
Портфель содержит эти количества долей каждого запаса.
NumShares = [100 500 300]
Чтобы найти значение портфеля, умножьте векторы
PortfValue = ClosePrices * NumShares
который уступает:
PortfValue = 3.5413e+004
Векторами является 1
-by-3
и 3
-by-1
; итоговым вектором является 1
-by-1
, скаляр. Умножение этих векторов таким образом означает умножать каждую цену закрытия на свое соответствующее количество долей и суммировать результат.
Чтобы проиллюстрировать зависимость порядка, переключите порядок векторов
Values = NumShares * ClosePrices
Values = 1.0e+004 * 0.4250 0.1500 0.7887 2.1250 0.7500 3.9438 1.2750 0.4500 2.3663
который показывает заключительные значения 100, 500, и 300 долей каждого запаса, не стоимости портфеля, и бессмысленный для этого примера.
В матричной алгебре, если X и Y являются векторами той же длины
затем скалярное произведение
скалярное произведение этих двух векторов. Это - исключение к коммутативному правилу. Чтобы вычислить скалярное произведение в MATLAB, используйте sum
(X .* Y)
или sum(Y .* X)
. Убедитесь, что эти два вектора имеют те же размерности. Чтобы проиллюстрировать, используйте предыдущие векторы.
Value = sum(NumShares .* ClosePrices')
Value = 3.5413e+004
Value = sum(ClosePrices .* NumShares')
Value = 3.5413e+004
Как ожидалось значение в этих случаях совпадает с PortfValue
, вычисленным ранее.
Умножение векторов и матриц следует правилам умножения матриц и процессу. Например, матрица портфеля содержит цены закрытия в течение недели. Вторая матрица (вектор) содержит количества запаса в портфеле.
WeekClosePr = [42.5 15 78.875 42.125 15.5 78.75 42.125 15.125 79 42.625 15.25 78.875 43 15.25 78.625]; PortQuan = [100 500 300];
Чтобы видеть заключительную стоимость портфеля в течение каждого дня, просто умножьтесь
WeekPortValue = WeekClosePr * PortQuan
WeekPortValue = 1.0e+004 * 3.5412 3.5587 3.5475 3.5550 3.5513
Ценовой матрицей является 5
-by-3
, матрицей количества (вектор) является 3
-by-1
, таким образом, получившейся матрицей (вектор) является 5
-by-1
.
Умножение матриц также следует правилам матричной алгебры. В обозначении матричной алгебры, если A является матрицей m на n и B, n-by-p матрица
затем C = A*B является m-by-p матрицей; и элемент cij в ith строке и jth столбце C
Чтобы проиллюстрировать, примите, что существует два портфеля тех же трех запасов, ранее упомянутых, но с различными количествами.
Portfolios = [100 200 500 400 300 150];
Умножение 5
-by-3
матрица цен закрытия недели 3
-by-2
матрица портфелей приводит к 5
-by-2
матрица, показывающая заключительное значение каждого дня для обоих портфелей.
PortfolioValues = WeekClosePr * Portfolios
PortfolioValues = 1.0e+004 * 3.5412 2.6331 3.5587 2.6437 3.5475 2.6325 3.5550 2.6456 3.5513 2.6494
Результат значений в понедельник умножения каждый понедельник цены закрытия ее соответствующим количеством долей и подведения итогов результата для первого портфеля, затем делая то же самое для второго портфеля. Результат значений во вторник умножения каждый вторник цены закрытия ее соответствующим количеством долей и подведения итогов результата для первого портфеля, затем делая то же самое для второго портфеля. И так далее, через остальную часть недели. С одной простой командой MATLAB быстро выполняет много вычислений.
Умножение матрицы скаляром является исключением к размерности и коммутативным правилам. Это только действует поэлементно.
Portfolios = [100 200 500 400 300 150]; DoublePort = Portfolios * 2
DoublePort = 200 400 1000 800 600 300
Матричное деление полезно, в основном, для решения уравнений, и специально для решения одновременных линейных уравнений (см. Решающие Одновременные Линейные уравнения). Например, вы хотите решить для X в A*X = B.
В обычной алгебре вы разделили бы обе стороны уравнения A, и X будет равняться B/A. Однако, поскольку матричная алгебра не является коммутативной (A*X ≠ X*A), различные процессы применяются. В формальной матричной алгебре решение включает матричную инверсию. MATLAB, однако, упрощает процесс путем обеспечения двух матричных символов деления, левых и правых (\
и /
). В целом,
X = A\B
решает для X
в A
*X = B
и
X = B/A
решает для X
в X
*A = B
.
В целом матричный A
должен быть несингулярной квадратной матрицей; то есть, это должно быть обратимым, и это должно иметь одинаковое число строк и столбцы. (Обычно матрица является обратимой, если матрица, умноженная на её обратную матрицу, равняется единичной матрице. Чтобы понять теорию и доказательства, консультируйтесь с учебником по линейной алгебре, такой как Элементарная Линейная алгебра Выступом, перечисленным в Библиографии.) MATLAB дает предупреждающее сообщение, если матрица сингулярна или почти так.
Матричное деление особенно полезно в решении одновременных линейных уравнений. Рассмотрите эту проблему: Учитывая два портфеля основанных на ипотеке инструментов, каждого с определенными урожаями в зависимости от прайм-рейта, как вы взвешиваете портфели, чтобы достигнуть определенных ежегодных потоков наличности? Ответ включает решение двух линейных уравнений.
Линейное уравнение является любым уравнением формы
где a1, a2, и b являются константами (с a1 и a2 не оба 0), и X и Y являются переменными. (Это - линейное уравнение, потому что это описывает строку в xy-плоскости. Например, уравнение 2x + y = 8 описывает строку, таким образом что если x = 2, то y = 4.)
Система линейных уравнений является набором линейных уравнений, которые вы обычно хотите решить одновременно; то есть, одновременно. Основной принцип для точных ответов в решении одновременных линейных уравнений требует, чтобы было столько же уравнений, сколько существуют неизвестные. Чтобы получить точные ответы для X и Y, должно быть два уравнения. Например, чтобы решить для X и Y в системе линейных уравнений
должно быть два уравнения, которые существует. Матричная алгебра представляет эту систему как уравнение, включающее три матрицы: для констант левой стороны, X для переменных и B для констант правой стороны
где A*X = B.
Решение системы одновременно означает решать для X. Используя MATLAB,
A = [2 1 1 -3]; B = [13 -18];
X = A \ B
решает для X
в A * X = B
.
X = [3 7]
Так x = 3 и y = 7 в этом примере. В целом можно использовать матричную алгебру, чтобы решить любую систему линейных уравнений такой как
путем представления их как матриц
и решение для X в A*X = B.
Чтобы проиллюстрировать, рассмотрите эту ситуацию. Существует два портфеля основанных на ипотеке инструментов, M1 и M2. У них есть текущие ежегодные платежи наличными 100$ и 70$ за модуль, соответственно, на основе сегодняшнего прайм-рейта. Если бы прайм-рейт спускает один процентный пункт, их платежи составили бы 80$ и 40$. Инвестор содержит 10 модулей M1 и 20 модулей M2. Получения инвестора равняются модулям времен платежей наличными или R = C * U, для каждого сценария прайм-рейта. Как уравнения слова:
M1 | M2 | |
Главный плоский: | 100$ * 10 модулей | + 70$ * 20 модулей = получения за 2 400$ |
Главный вниз: | 80$ * 10 модулей | + 40$ * 20 модулей = получения за 1 600$ |
Как матрицы MATLAB:
Cash = [100 70 80 40]; Units = [10 20]; Receipts = Cash * Units
Receipts = 2400 1600
Теперь инвестор задает этот вопрос: Учитывая эти два портфеля и их характеристики, сколько модулей каждого они должны содержать, чтобы получить 7 000$, если прайм-рейт остается фиксированным и 5 000$ если главные отбрасывания один процентный пункт? Найдите ответ путем решения двух линейных уравнений.
M1 | M2 | |
Главный плоский: | 100$ * x модули | + 70$ * y модули = получения за 7 000$ |
Главный вниз: | 80$ * x модули | + 40$ * y модули = получения за 5 000$ |
Другими словами, решите для U (модули) в уравнении R (получения) = C (наличные деньги) * U (модули). Используя MATLAB покинул деление
Cash = [100 70 80 40]; Receipts = [7000 5000]; Units = Cash \ Receipts
Units = 43.7500 37.5000
Инвестор должен содержать 43,75 модуля портфеля M1 и 37,5 модулей портфеля M2, чтобы достигнуть ежегодных желаемых получений.
Наконец, поэлементно арифметические операции называются операциями. Чтобы указать на операцию над массивами MATLAB, предшествуйте оператору с периодом (.
). Сложение и вычитание, и умножение матриц и деление скаляром, уже являются операциями над массивами, таким образом, никакой период не необходим. При использовании операций над массивами на двух матрицах размерности матриц должны быть тем же самым. Например, учитывая векторы дивидендов запаса и цен закрытия
Dividends = [1.90 0.40 1.56 4.50]; Prices = [25.625 17.75 26.125 60.50]; Yields = Dividends ./ Prices
Yields = 0.0741 0.0225 0.0597 0.0744