Python金融数据分析(原书第2版)
上QQ阅读APP看书,第一时间看更新

2.5 使用矩阵解线性方程组

上一节,我们学习了不等式约束条件下线性方程组的求解。如果一个系统的线性方程组约束条件是确定的,可以将其视为矩阵问题,应用矩阵代数求解。矩阵法应用现有的矩阵库函数将多元线性方程以简洁的方式表示。

假设我们要建立一个包含三种证券的投资组合,分别为证券a、证券b和证券c。该投资组合有如下限制:投资1倍的证券a的数量等于6个单位多头头寸;投资2倍的证券a的数量、1倍证券b的数量与1倍证券c的数量之和等于4个单位多头头寸;投资1倍证券a的数量、3倍的证券b的数量与2倍的证券c的数量之和等于5个单位多头头寸。

我们将本题用如下数学表达式描述:

2a + b + c = 4

a + 3b + 2c = 5

a = 6

写出所有系数,将上述表达式改写为:

2a + 1b + 1c = 4

1a + 3b + 2c = 5

1a + 0b + 0c = 6

将方程式系数用矩阵形式表示如下:

049-01

我们可以将线性方程表示为:

Ax = B

向量x包含每种证券的投资数量,为求出x,我们写出矩阵A的逆矩阵:

x = A–1B

使用NumPy数组建立AB两个矩阵:

050-01

利用NumPy中的linalg.solve函数求解线性标量方程组:

050-02

结果显示,该投资组合需要6倍证券a的多头头寸,15倍证券b的多头头寸和23倍证券c的空头头寸。

在投资组合管理中,我们可以利用矩阵方程组求解约束条件下有价证券的最优权重分配问题。随着投资组合证券数量的增加,逆矩阵的计算愈发复杂。我们可以使用Cholesky分解、LU分解、QR分解、Jacobi迭代和Gauss-Seidel迭代等方法将矩阵A分解为更简单的矩阵进行分析。