美文网首页
PH525x series - 矩阵代数方程

PH525x series - 矩阵代数方程

作者: 3between7 | 来源:发表于2019-11-25 17:42 被阅读0次

矩阵方程

无论是在数学上还是在R语言中,线性代数方程都可以起到简化描述与操作的作用,本篇的主要内容是对这种矩阵方程进行简单介绍。

  • 方程组求解
    线性代数当初被发明出来是为了解决如下的线性方程组求解的问题:
    a +b + c = 6 3a - 2b + c = 2 2a + b -c =1
    现在也确实证明在一般情况下线性代数确实可以很好地解决这一问题,接下来我们便将一起学习如何用矩阵代数方程进行如下求解:

\left\{\begin{matrix}1 & 1 & 1 \\3 & -2 & 1 \\2 & 1 & -1\end{matrix}\right\} \left\{\begin{matrix}a \\ b\\ c\end{matrix}\right\} =\left\{\begin{matrix}6 \\ 2 \\ 1\end{matrix}\right\} \Rightarrow \left\{\begin{matrix}a \\ b\\ c\end{matrix}\right\} = \left\{\begin{matrix}1 & 1 & 1 \\3 & -2 & 1 \\2 & 1 & -1\end{matrix}\right\}^{-1} \left\{\begin{matrix}6 \\ 2 \\ 1\end{matrix}\right\}

向量、矩阵和标量

在代数上,我们使用如下方式来表示向量,且该向量可默认为是一个N行1列的矩阵:

Y = \left\{\begin{matrix}Y_1 \\ Y_2 \\ \vdots \\ Y_N\end{matrix}\right\}

而协方差或自变量使用如下方式表示:
X_1 = \left\{\begin{matrix}X_{1,1} \\ \vdots \\ X_{N,1}\end{matrix}\right\} , X_2 = \left\{\begin{matrix}X_{1,2} \\ \vdots \\ X_{N,2}\end{matrix}\right\}

两个向量相乘的表示方法:
X = X_1X_2 = \left\{\begin{matrix}X_{1,1} & X_{1,2} \\ \vdots & \vdots \\ X_{N,1}&X_{N,2}\end{matrix}\right\}

在R中,向上方N行两列的矩阵用cbind()函数就可以生成:

n <- 25
tt <- seq(0,3.4,len=n) ##time in secs, t is a base function
X <- cbind(X1=tt,X2=tt^2)
head(X)

##             X1         X2
## [1,] 0.0000000 0.00000000
## [2,] 0.1416667 0.02006944
## [3,] 0.2833333 0.08027778
## [4,] 0.4250000 0.18062500
## [5,] 0.5666667 0.32111111
## [6,] 0.7083333 0.50173611

N * p列的矩阵表示方法如下:
X = X_1X_2 = \left\{\begin{matrix}X_{1,1} & \cdots & X_{1,p} \\ X_{2,1} & \cdots & X_{2,p} \\ & \vdots & \\ X_{N,1}&\cdots&X_{N,p}\end{matrix}\right\}
而相应的在R中,可以使用matrix()函数生成:

N <- 100; p <- 5
X <- matrix(1:(N*p),N,p)
head(X)

##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1  101  201  301  401
## [2,]    2  102  202  302  402
## [3,]    3  103  203  303  403
## [4,]    4  104  204  304  404
## [5,]    5  105  205  305  405
## [6,]    6  106  206  306  406

dim(X)
## [1] 100   5

默认情况下,矩阵是一列一列的进行数字进行填充的,添加参数byrow=TRUE即可变为按行填充。

而标量就是一个数字,使用小写非黑体符号表示。

矩阵与常量相乘

如果a是一个常量,X是一个矩阵,那么:
X = \left\{\begin{matrix}X_{1,1} & \cdots & X_{1,p} \\ X_{2,1} & \cdots & X_{2,p} \\ & \vdots & \\ X_{N,1}&\cdots&X_{N,p}\end{matrix}\right\} \Rightarrow aX = \left\{\begin{matrix}aX_{1,1} & \cdots & aX_{1,p} \\ aX_{2,1} & \cdots & aX_{2,p} \\ & \vdots & \\ aX_{N,1}&\cdots&aX_{N,p}\end{matrix}\right\}

R中矩阵的乘法也很容易实现,使用*号即可:

X <- matrix(1:12,4,3)
print(X)

##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

a <- 2
print(a*X)

##      [,1] [,2] [,3]
## [1,]    2   10   18
## [2,]    4   12   20
## [3,]    6   14   22
## [4,]    8   16   24

矩阵转置

矩阵转置就是把行与列的内容进行交换,在R中使用t()函数即可实现,转换后矩阵的维度为p * N
X = \left\{\begin{matrix}X_{1,1} & \cdots & X_{1,p} \\ X_{2,1} & \cdots & X_{2,p} \\ & \vdots & \\ X_{N,1}&\cdots&X_{N,p}\end{matrix}\right\} \Rightarrow X^T = \left\{\begin{matrix}X_{1,1} & \cdots & X_{p,1} \\ X_{1,2} & \cdots & X_{p,2} \\ & \vdots & \\ X_{1,N}&\cdots&X_{p,N}\end{matrix}\right\}

X <- matrix(1:12,4,3)
X

##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

t(X)

##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

矩阵乘法

仍以本文一开始的方程组为例:
a +b + c = 6 3a - 2b + c = 2 2a + b -c =1
若使用矩阵代数去计算的话,其实就是先用第一个矩阵第一行中的每一个元素分别与第二个矩阵的第一列的相应位置上的元素相乘,然后求和,其数值就是结果矩阵的第一行第一列的内容。后面以此类推。。。因为第二个矩阵只有一列,所以上述方程组的计算可如下表示:
\left\{\begin{matrix}1 & 1 & 1 \\3 & -2 & 1 \\2 & 1 & -1\end{matrix}\right\} \left\{\begin{matrix}a \\ b\\ c\end{matrix}\right\} = \left\{\begin{matrix}a + b + c \\3a - 2b + c\\2a + b -c \end{matrix}\right\}

在R中可以使用solve()函数进行求解:

X <- matrix(c(1,3,2,1,-2,1,1,1,-1),3,3)
y <- matrix(c(6,2,1),3,1)
solve(X)%*%y #equivalent to solve(X,y)

##      [,1]
## [1,]    1
## [2,]    2
## [3,]    3

Please note that solve is a function that should be used with caution as it is not generally numerically stable

相关文章

  • PH525x series - 矩阵代数方程

    矩阵方程 无论是在数学上还是在R语言中,线性代数方程都可以起到简化描述与操作的作用,本篇的主要内容是对这种矩阵方程...

  • PH525x series - Exercises - Line

    本篇文章是PH525x series课程中Linear models and randomness的练习章节,下面...

  • 线性回归模型

    在学习PH525x series - Chapter 5 - Linear Models时,觉得有些地方理解起来有...

  • PH525x series - Hierarchical Mod

    在上一篇文章PH525x series - Bayesian Statistics中是将层次模型应用到了棒球运动当...

  • PH525x series - Collinearity

    共线性 当自变量之间存在共线性时,线性回归得到的最小二乘估计的值并不唯一。共线性简单点说就是,设计矩阵中的某几列存...

  • PH525x series - Introduction to

    本章会对线性模型做一个大致的介绍,还是举例说明吧: 例1:自由落体问题 想象自己是16世纪的伽利略,正在研究自由落...

  • PH525x series - Projections

    前面的章节学的是降维、奇异值分解以及主成分分析的大致内容,本篇文章则开始更加详细的介绍这背后的数学原理,首先要学的...

  • Day17 - 2018-04-19

    pandas的dataFrame可以与series直接做矩阵运算 series的每一项与dataFrame对应的列...

  • PH525x series - Linear Algebra E

    本章节将通过举例说明在进行数据分析时矩阵代数所起到的作用,以及如何利用矩阵代数方程构建线性模型、计算最小二乘估计。...

  • PH525x series - Running PCA and

    在PCA相关的章节最后,系列教程的作者又专门写了一章“在R中运行PCA和SVD”,使用的还是tissuesGene...

网友评论

      本文标题:PH525x series - 矩阵代数方程

      本文链接:https://www.haomeiwen.com/subject/rfzdwctx.html