Пояснения в следующих разделах помогут обновить навыки использования матричной алгебры и функций 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_RSNewPortfolios =
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около-3 матрица и B - 3около-1 матрица, A * B дает скаляр (1около-1) матрица, но B * A дает 3около-3 матрица.
Векторное умножение следует тем же правилам и помогает проиллюстрировать принципы. Например, портфель акций имеет три различных запаса, и их цены закрытия сегодня:
ClosePrices = [42.5 15 78.875]
Портфель содержит эти количества акций каждой акции.
NumShares = [100
500
300]
Чтобы найти стоимость портфеля, умножьте векторы
PortfValue = ClosePrices * NumShares
который дает:
PortfValue =
3.5413e+004Векторы: 1около-3 и 3около-1; результирующий вектор 1около-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 являются векторами одинаковой длины
, x2,..., xn]
затем скалярное произведение
... + xnyn
- скалярное произведение двух векторов. Это исключение из коммутативного правила. Чтобы вычислить скалярное произведение в 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около-3, количественная матрица (вектор) 3около-1, таким образом, результирующая матрица (вектор) 5около-1.
Матричное умножение также следует правилам матричной алгебры. В матричной алгебре, если A является матрицей m-by-n и B является матрицей n-by-p
тогда C = A * B является матрицей m-by-p; и элемент cij в i-м ряду и j-м столбце C имеет значение
+ ainbnj.
Для иллюстрации предположим, что существуют два портфеля из тех же трех ранее упомянутых запасов, но с разными количествами.
Portfolios = [100 200
500 400
300 150];
Умножение 5около-3 матрица цен закрытия недели 3около-2 матрица портфелей дает 5около-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 * 2DoublePort =
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 выдает предупреждающее сообщение, если матрица является сингулярной или почти такой.
Матричное деление особенно полезно при решении одновременных линейных уравнений. Рассмотрим эту проблему: Учитывая два портфеля ипотечных инструментов, каждый с определенной доходностью в зависимости от основной ставки, как вы взвешиваете портфели для достижения определенных годовых денежных потоков? Ответ включает в себя решение двух линейных уравнений.
Линейное уравнение - любое уравнение вида
= b,
где a1, a2 и b - константы (с a1 и a2 не оба 0), а x и y - переменные. (Это линейное уравнение, потому что оно описывает прямую в плоскости xy. Например, уравнение 2x + y = 8 описывает такую строку, что если x = 2, то y = 4.)
Система линейных уравнений - это набор линейных уравнений, которые обычно нужно решать одновременно; то есть одновременно. Основной принцип для точных ответов в решении одновременных линейных уравнений требует, чтобы было столько уравнений, сколько есть неизвестных. Чтобы получить точные ответы для x и y, должно быть два уравнения. Например, для решения для x и y в системе линейных уравнений
3y = − 18,
должно быть два уравнения, которые есть. Матричная алгебра представляет эту систему как уравнение, включающее три матрицы: A для левых констант, 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 в этом примере. В целом, можно использовать матричную алгебру для решения любой системы линейных уравнений, таких как
+a2nxn=b2⋮am1x1+am2x2+... + amnxn = bm
путем представления их в виде матриц
и решение для X в A * X = B.
Рассмотрим эту ситуацию. Существует два портфеля ипотечных инструментов: M1 и M2. Они имеют текущие ежегодные денежные выплаты в размере $100 и $70 за единицу, соответственно, исходя из сегодняшнего прайм-курса. Если прайм-курс снизится на один процентный пункт, их платежи составят 80 и 40 долларов. Инвестор держит 10 единиц M1 и 20 единиц M2. Поступления инвестора равны денежным платежам за единицу, или R = C * U, для каждого сценария начальной ставки. В качестве словосочетаний:
M1 | M2 | |
Простая плоская: | $100 * 10 единиц | + $70 * 20 единиц = $2400 поступлений |
Прайм-даун: | $80 * 10 единиц | + $40 * 20 единиц = $1600 поступлений |
В качестве матриц MATLAB:
Cash = [100 70
80 40];
Units = [10
20];
Receipts = Cash * UnitsReceipts =
2400
1600
Теперь инвестор задает вопрос: Учитывая эти два портфеля и их характеристики, сколько единиц каждого из них они должны удерживать, чтобы получить $7000, если прайм-курс остается на прежнем уровне, и $5000, если прайм падает на один процентный пункт? Найдите ответ, решив два линейных уравнения.
M1 | M2 | |
Простая плоская: | $100 * x единиц | + $70 * y единиц = $7000 поступлений |
Прайм-даун: | $80 * x единиц | + $40 * y единиц = $5000 поступлений |
Другими словами, решить для 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