Напоминание матричной алгебры

Введение

Объяснения в разделах, которые следуют, должны помочь обновить ваши навыки для использования матричной алгебры и использования функций 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- 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 на n и B, n-by-p матрица

A=[a11a12a1nai1ai2ainam1am2amn],  B=[b11b1jb1pb21b2jb2pbn1bnjbnp]

затем 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=13x3y=18,

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

A=[2113],     X=[xy],     B=[1318],

где 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=b2am1x1+am2x2++amnxn=bm

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

A=[a11a12a1na21a22a2nam1am2amn],     X=[x1x2xn],     B=[b1b2bm]

и решение для 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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте