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

Введение

Объяснения в последующих разделах должны помочь обновить ваши навыки для использования матричной алгебры и использования MATLAB® функций.

В сложение Macro-Investment Analysis Уильяма Шарпа также предоставляет отличное объяснение операций матричной алгебры с использованием 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. Это также помогает «проговорить» модули каждой матрицы, как упомянуто в Analyze Sets of Numbers Using Matrix Functions.

Умножение матрицы также не коммутативно; то есть он не является независимым от порядка. 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 являются векторами одной длины

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-by- 3, количественная матрица (вектор) 3-by- 1, поэтому получившаяся матрица (вектор) 5-by- 1.

Умножение двух матриц

Матричное умножение также следует правилам матричной алгебры. В матричной алгебре обозначения, если A является m-на-n матрицей, а B является n-на-p матрицей

A=[a11a12a1nai1ai2ainam1am2amn],  B=[b11b1jb1pb21b2jb2pbn1bnjbnp]

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

cij=ai1b1j+ai2b12++ainbnj.

Для иллюстрации предположим, что существует два портфеля тех же трех ранее упомянутых запасов, но с различными количествами.

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

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

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

Линейное уравнение является любым уравнением вида

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,

должно быть два уравнения, которые есть. Матричная алгебра представляет эту систему как уравнение с тремя матрицами: A для левых констант, 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 модули = $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

Похожие темы