exponenta event banner

Обновление матричной алгебры

Введение

Пояснения в следующих разделах помогут обновить навыки использования матричной алгебры и функций 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около-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 являются векторами одинаковой длины

Y = [y1, y2,..., yn] X = [x1, x2,..., xn]

затем скалярное произведение

X· Y = x1y1 + x2y2 +... + 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

A=[a11a12⋯a1n⋮⋮⋮ai1ai2⋯ain⋮⋮⋮am1am2⋯amn],  B=[b11⋯b1j⋯b1pb21⋯b2j⋯b2p⋮⋮⋮bn1⋯bnj⋯bnp]

тогда C = A * B является матрицей m-by-p; и элемент cij в i-м ряду и j-м столбце C имеет значение

cij = ai1b1j + ai2b12 +... + 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 * 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 выдает предупреждающее сообщение, если матрица является сингулярной или почти такой.

Решение одновременных линейных уравнений

Матричное деление особенно полезно при решении одновременных линейных уравнений. Рассмотрим эту проблему: Учитывая два портфеля ипотечных инструментов, каждый с определенной доходностью в зависимости от основной ставки, как вы взвешиваете портфели для достижения определенных годовых денежных потоков? Ответ включает в себя решение двух линейных уравнений.

Линейное уравнение - любое уравнение вида

a1x + a2y = b,

где a1, a2 и b - константы (с a1 и a2 не оба 0), а x и y - переменные. (Это линейное уравнение, потому что оно описывает прямую в плоскости xy. Например, уравнение 2x + y = 8 описывает такую строку, что если x = 2, то y = 4.)

Система линейных уравнений - это набор линейных уравнений, которые обычно нужно решать одновременно; то есть одновременно. Основной принцип для точных ответов в решении одновременных линейных уравнений требует, чтобы было столько уравнений, сколько есть неизвестных. Чтобы получить точные ответы для x и y, должно быть два уравнения. Например, для решения для x и y в системе линейных уравнений

2x + y = 13x 3y = − 18,

должно быть два уравнения, которые есть. Матричная алгебра представляет эту систему как уравнение, включающее три матрицы: A для левых констант, X для переменных и B для правых констант

A = [211 −  3 ] , X = [xy ] ,  B = [13 18],

где 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 в этом примере. В целом, можно использовать матричную алгебру для решения любой системы линейных уравнений, таких как

a11x1 + a12x2 +... + a1nxn = b1a21x1 + a22x2 +... +a2nxn=b2⋮am1x1+am2x2+... + amnxn = bm

путем представления их в виде матриц

A=[a11a12⋯a1na21a22⋯a2n⋮⋮⋮am1am2⋯amn],     X=[x1x2⋮xn],      B=[b1b2⋮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 * Units
Receipts =

       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

Связанные темы