【VIP专享】R中矩阵的相关运算
总结R语言中矩阵运算的函数

总结R语言中矩阵运算的函数1 创建一个向量在R中可以用函数c()来创建一个向量,例如:> x=c(1,2,3,4)> x[1] 1 2 3 42 创建一个矩阵在R中可以用函数matrix()来创建一个矩阵,应用该函数时需要输入必要的参数值。
> args(matrix)function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) data项为必要的矩阵元素,nrow为行数,ncol为列数,注意nrow与ncol的乘积应为矩阵元素个数,byrow项控制排列元素时是否按行进行,dimnames给定行和列的名称。
例如:> matrix(1:12,nrow=3,ncol=4)[,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12> matrix(1:12,nrow=4,ncol=3)[,1] [,2] [,3][1,] 1 5 9[2,] 2 6 10[3,] 3 7 11[4,] 4 8 12> matrix(1:12,nrow=4,ncol=3,byrow=T)[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6[3,] 7 8 9[4,] 10 11 12> rowname[1] "r1" "r2" "r3"> colname=c("c1","c2","c3","c4")> colname[1] "c1" "c2" "c3" "c4"> matrix(1:12,nrow=3,ncol=4,dimnames=list(rowname,colname))c1 c2 c3 c4r1 1 4 7 10r2 2 5 8 113 矩阵转置A为m×n矩阵,求A'在R中可用函数t(),例如:> A=matrix(1:12,nrow=3,ncol=4)> A[,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12> t(A)[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6[3,] 7 8 9[4,] 10 11 12若将函数t()作用于一个向量x,则R默认x为列向量,返回结果为一个行向量,例如:> x[1] 1 2 3 4 5 6 7 8 9 10> t(x)[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10][1,] 1 2 3 4 5 6 7 8 9 10> class(x)[1] "integer"> class(t(x))[1] "matrix"若想得到一个列向量,可用t(t(x)),例如:> x[1] 1 2 3 4 5 6 7 8 9 10> t(t(x))[,1][1,] 1[2,] 2[3,] 3[4,] 4[5,] 5[6,] 6[7,] 7[8,] 8[9,] 9[10,] 10> y=t(t(x))> t(t(y))[,1][1,] 1[2,] 2[3,] 3[4,] 4[5,] 5[6,] 6[7,] 7[8,] 8[9,] 9[10,] 104 矩阵相加减在R中对同行同列矩阵相加减,可用符号:“+”、“-”,例如:> A=B=matrix(1:12,nrow=3,ncol=4)> A+B[,1] [,2] [,3] [,4][1,] 2 8 14 20[2,] 4 10 16 22[3,] 6 12 18 24> A-B[,1] [,2] [,3] [,4][1,] 0 0 0 0[2,] 0 0 0 0[3,] 0 0 0 05数与矩阵相乘A为m×n矩阵,c>0,在R中求cA可用符号:“*”,例如:> c=2> c*A[,1] [,2] [,3] [,4][1,] 2 8 14 20[2,] 4 10 16 22[3,] 6 12 18 246 矩阵相乘A为m×n矩阵,B为n×k矩阵,在R中求AB可用符号:“%*%”,例如:> A=matrix(1:12,nrow=3,ncol=4)> B=matrix(1:12,nrow=4,ncol=3)> A%*%B[,1] [,2] [,3][1,] 70 158 246[2,] 80 184 288[3,] 90 210 330若A为n×m矩阵,要得到A'B,可用函数crossprod(),该函数计算结果与t(A)%*%B相同,但是效率更高。
r语言求矩阵的行列式

r语言求矩阵的行列式矩阵的行列式是一项在线性代数中常常会遇到的重要概念。
它不仅仅是一个数值,更是一个有着深刻意义的数学量。
本文将从理论和实践两个方面,以人类的视角,来探讨矩阵的行列式。
一、理论基础在开始讨论矩阵的行列式之前,我们先来了解一下矩阵的基本概念。
矩阵是由一组数按照矩形排列所组成的数表,其中每个数称为矩阵的元素。
矩阵可以表示为一个m行n列的数组,用大写字母表示,如A。
行列式是一个方阵(行数等于列数)所对应的一个数值。
对于一个2x2的矩阵A = |a11 a12||a21 a22|其行列式的计算公式为:det(A) = a11 * a22 - a12 * a21。
对于一个3x3的矩阵A = |a11 a12 a13||a21 a22 a23||a31 a32 a33|其行列式的计算公式为:det(A) = a11 * a22 * a33 + a12 * a23 * a31 + a13 * a21 * a32 - a13 * a22 * a31 - a12 * a21 * a33 - a11 * a23 * a32。
行列式在线性代数中有着重要的地位和作用。
它可以判断矩阵是否可逆,即行列式不等于0时矩阵可逆,等于0时矩阵不可逆。
行列式还可以用来求解线性方程组的解,以及计算矩阵的逆、转置等。
二、实践应用除了理论上的重要性,矩阵的行列式在实际应用中也有着广泛的应用。
以下是一些常见的实际应用场景:1. 统计学:在统计学中,矩阵的行列式被用于多元线性回归分析中的变量选择和模型比较。
2. 电路分析:在电路分析中,矩阵的行列式被用于求解线性电路中的节点电压和电流。
3. 机器学习:在机器学习中,矩阵的行列式被用于求解特征值和特征向量,以及判断矩阵是否正定。
4. 金融学:在金融学中,矩阵的行列式被用于求解资产组合的风险和收益,以及判断资产之间的相关性。
5. 图像处理:在图像处理中,矩阵的行列式被用于图像的变换和滤波操作。
R语言中矩阵常用的操作(笔记)

R语言中矩阵常用的操作(笔记)发现好久没有更新微信文了, 所谓才思枯竭, 黔驴技穷就是我现在的状态. 记得看过这样一句话: "如果你不知道写什么东西, 那就写不知道写什么事情这件事吧". 深得我心.分享一篇我CSND博客里面的R语言矩阵操作, 可以通过编程理解很多线性代数的概念. 这篇文章阅读量2万+, 而我的CSND博客阅读量才10万+, 可以看出博客的阅读量分布不是正态的, 符合马太效应.1.1 矩阵的生成生成一个4行4列的矩阵,这里用1~16数字。
1.2.14.65.6.117.8.161.3 生成对角线为1的对角矩阵1.4 提取矩阵的下三角1.2.23.4.36.47.8.79.10.811.12.121.5 提取矩阵上三角1.2.53.4.95.6.107.8.139.10.1411.12.151.6 以矩阵下三角构建对角矩阵原矩阵mat:变换后的对角矩阵原矩阵,生成三列:行,列,值相关代码1.8 将三列形式转化为矩阵1.9 将矩阵转置2.1 矩阵相加减2.2 数与矩阵相乘3.3 矩阵相乘A 为m × n矩阵,B为n× k矩阵,用符合“%*%”3.4 计算t(A)%*%B的方法第一种,直接计算第二种方法,用crossprod函数,数据量大时效率更高3.5 矩阵求逆矩阵与其逆矩阵的乘积为对角矩阵对于奇异阵,并不存在逆矩阵,但是可以计算其广义逆矩阵显示矩阵奇异,这里可以使用MASS包的ginv计算其广义逆矩阵3.7 矩阵的直积(Kronecker,克罗内克积),使用函数kronecker 计算A 与B的直积:LaT ex写作“A \bigotimes B”假设A为2X2矩阵假设B为3X3矩阵则A和B的直积就是6X6的矩阵3.8 矩阵的直和(direct sum)公式:$ A\oplus B$,在LaTex中是“A \oplus B “。
矩阵的运算及其运算规则

矩阵基本运算及应用201700060牛晨晖在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。
矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。
在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。
矩阵的运算是数值分析领域的重要问题。
将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。
在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。
1矩阵的运算及其运算规则1.1矩阵的加法与减法1.1.1运算规则设矩阵,,则简言之,两个矩阵相加减,即它们相同位置的元素相加减!注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的.1.1.2运算性质满足交换律和结合律交换律;结合律.1.2矩阵与数的乘法1.2.1运算规则数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或.特别地,称称为的负矩阵.1.2.2运算性质满足结合律和分配律结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA.分配律:λ(A+B)=λA+λB.已知两个矩阵满足矩阵方程,求未知矩阵.解由已知条件知1.3矩阵与矩阵的乘法1.3.1运算规则设,,则A与B的乘积是这样一个矩阵:(1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即.(2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和.设矩阵计算解是的矩阵.设它为可得结论1:只有在下列情况下,两个矩阵的乘法才有意义,或说乘法运算是可行的:左矩阵的列数=右矩阵的行数;结论2在矩阵的乘法中,必须注意相乘的顺序.即使在与均有意义时,也未必有=成立.可见矩阵乘法不满足交换律;结论3方阵A和它同阶的单位阵作乘积,结果仍为A,即.1.3.3运算性质(假设运算都是可行的)(1) 结合律.(2) 分配律(左分配律);(右分配律).(3) .1.3.4方阵的幂定义:设A是方阵,是一个正整数,规定,显然,记号表示个A的连乘积.1.4矩阵的转置1.4.1定义定义:将矩阵A的行换成同序号的列所得到的新矩阵称为矩阵A的转置矩阵,记作或.例如,矩阵的转置矩阵为.1.4.2运算性质(假设运算都是可行的)(1)(2)(3)(4) ,是常数.1.4.3典型例题利用矩阵验证运算性质:解;而所以.定义:如果方阵满足,即,则称A为对称矩阵.对称矩阵的特点是:它的元素以主对角线为对称轴对应相等.1.5方阵的行列式1.5.1定义定义:由方阵A的元素所构成的行列式(各元素的位置不变),称为方阵A的行列式,记作或.1.5.2运算性质(1) (行列式的性质)(2) ,特别地:(3) (是常数,A的阶数为n)思考:设A为阶方阵,那么的行列式与A的行列式之间的关系为什么不是,而是?不妨自行设计一个二阶方阵,计算一下和.例如,则.于是,而2光伏逆变器的建模光伏并网逆变器是将光伏组件输出的直流电转化为符合电网要求的交流点再输入电网的关键设备,是光伏系统并网环节中能量转换与控制的核心。
矩阵的运算及其运算规则

矩阵基本运算及应用201700060牛晨晖在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。
矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。
在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。
矩阵的运算是数值分析领域的重要问题。
将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。
在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。
1矩阵的运算及其运算规则1.1矩阵的加法与减法1.1.1运算规则设矩阵,,则简言之,两个矩阵相加减,即它们相同位置的元素相加减!注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的.1.1.2运算性质满足交换律和结合律交换律;结合律.1.2矩阵与数的乘法1.2.1运算规则数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或.特别地,称称为的负矩阵.1.2.2运算性质满足结合律和分配律结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA.分配律:λ(A+B)=λA+λB.1.2.3典型举例已知两个矩阵满足矩阵方程,求未知矩阵.解由已知条件知1.3矩阵与矩阵的乘法1.3.1运算规则设,,则A与B的乘积是这样一个矩阵:(1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即.(2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和.1.3.2典型例题设矩阵计算解是的矩阵.设它为可得结论1:只有在下列情况下,两个矩阵的乘法才有意义,或说乘法运算是可行的:左矩阵的列数=右矩阵的行数;结论2在矩阵的乘法中,必须注意相乘的顺序.即使在与均有意义时,也未必有=成立.可见矩阵乘法不满足交换律;结论3方阵A和它同阶的单位阵作乘积,结果仍为A,即.1.3.3运算性质(假设运算都是可行的)(1) 结合律.(2) 分配律(左分配律);(右分配律).(3) .1.3.4方阵的幂定义:设A是方阵,是一个正整数,规定,显然,记号表示个A的连乘积.1.4矩阵的转置1.4.1定义定义:将矩阵A的行换成同序号的列所得到的新矩阵称为矩阵A的转置矩阵,记作或.例如,矩阵的转置矩阵为.1.4.2运算性质(假设运算都是可行的)(1)(2)(3)(4) ,是常数.1.4.3典型例题利用矩阵验证运算性质:解;而所以.定义:如果方阵满足,即,则称A为对称矩阵.对称矩阵的特点是:它的元素以主对角线为对称轴对应相等.1.5方阵的行列式1.5.1定义定义:由方阵A的元素所构成的行列式(各元素的位置不变),称为方阵A的行列式,记作或.1.5.2运算性质(1) (行列式的性质)(2) ,特别地:(3) (是常数,A的阶数为n)思考:设A为阶方阵,那么的行列式与A的行列式之间的关系为什么不是,而是?不妨自行设计一个二阶方阵,计算一下和.例如,则.于是,而2光伏逆变器的建模光伏并网逆变器是将光伏组件输出的直流电转化为符合电网要求的交流点再输入电网的关键设备,是光伏系统并网环节中能量转换与控制的核心。
R语言中矩阵运算

R语言中矩阵运算目录:矩阵的生成,矩阵的四则运算,矩阵的矩阵运算,矩阵的分解。
1.矩阵的生成1_1将向量定义成数组向量只有定义了维数向量(dim属性)后才能被看作是数组.比如:> z=1:12;> dim(z)=c(3,4);AA> z;[,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12注意:生成矩阵是按列排列的。
1_2用array ( )函数构造多维数组用法为:array(data=NA,dim=length(data),dimnames=NULL)参数描述:data:是一个向量数据。
dim:是数组各维的长度,缺省时为原向量的长度。
dimname:是数组维的名字,缺省时为空。
例子:> x=array(1:20,dim=c(4,5))> x[,1] [,2] [,3] [,4] [,5][1,] 1 5 9 13 17[2,] 2 6 10 14 18[3,] 3 7 11 15 19[4,] 4 8 12 16 201_3用matrix()函数构造矩阵函数matrix)是构造矩阵(二维数组)的函数,其构造形式为matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)其中data是一个向量数据,nrow是矩阵的行数,ncol是矩阵的列数.当byrow=TRUE 时,生成矩阵的数据按行放置,缺省时相当于byrow=t,数据按列放置.dimname。
是数组维的名字,缺省时为空.A如构造一个3x5阶的矩阵> A=matrix(1:15,nrow=3,byrow=TRUE)> A[,1] [,2] [,3] [,4] [,5][1,] 1 2 3 4 5[2,] 6 7 8 9 10[3,] 11 12 13 14 152.矩阵的四则运算可以对数组之间进行四则运算(+、一、*、/),这时进行的是数组对应元素的四则运算。
矩阵的基本运算法则

矩阵的基本运算法则矩阵的基本运算法则1、矩阵的加法矩阵加法满足下列运算规律(设A 、B 、C 都是m n ?矩阵,其中m 和n 均为已知的正整数):(1)交换律:+=+A B B A(2)结合律:()()++++A B C =A B C注意:只有当两个矩阵为同型矩阵(两个矩阵的行数和列数分别相等)时,这两个矩阵才能进行加法运算。
2、数与矩阵相乘数乘矩阵满足下列运算规律(设A 、B 是m n ?矩阵,λ和μ为数):(1)结合律:()λμλμ=A A(2)分配律:()λμλμ+=+A A A(3)分配律:()λλλ+=+A B A B注意:矩阵相加与数乘矩阵合起来,统称为矩阵的线性运算。
3、矩阵与矩阵相乘矩阵与矩阵的乘法不满足交换律、但是满足结合律和分配率(假设运算都是可行的):(1)交换律:≠AB BA (不满足)(2)结合律:()()=AB C A BC(3)结合律:()()()λλλλ==其中为数AB A B A B(4)分配律:()(),+=++=+A B C AB AC B C A BA CA4、矩阵的转置矩阵的转置满足下述运算规律(假设运算都是可行的,符号()T g 表示转置):(1)()T T =A A(2)()T T T +=+A B A B(3)()TT λλ=A A(4)()T T T =AB B A 5、方阵的行列式由A 确定A 这个运算满足下述运算法则(设A 、B 是n 阶方阵,λ为数):(1)T =A A(2)n λλ=A A(3)=AB A B6、共轭矩阵共轭矩阵满足下述运算法则(设A 、B 是复矩阵,λ为复数,且运算都是可行的):(1)+=+A B A B(2)λλ=A A(3)=AB AB7、逆矩阵方阵的逆矩阵满足下述运算规律:(1)若A 可逆,则1-A 亦可逆,且()11--=A A(2)若A 可逆,数0λ≠,则λA 可逆,且()111λλ--=A A(3)若A 、B 为同阶矩阵且均可逆,则AB 亦可逆,且()111---=AB B A参考文献:【1】线性代数(第五版),同济大学。
R语言矩阵运算

[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
[7,] 7
[8,] 8
[9,] 9
[10,] 10
4 矩阵相加减
在R中对同行同列矩阵相加减,可用符号:“+”、“-”,例如:
> A=B=matrix(1:12,nrow=3,ncol=4)
[4,] 0 0 0 16
对一个正整数z应用diag()函数将产生以z维单位矩阵,例如:
> diag(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
8 矩阵求逆
矩阵求逆可用函数solve(),应用solve(a, b)运算结果是解线性方程组ax = b,若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆,例如:
[转载]R语言矩阵运算
已有 1804 次阅读 2010-5-8 09:50 |个人分类:未分类|系统分类:教学心得|关键词:R语言
主要包括以下内容:
创建矩阵向量;矩阵加减,乘积;矩阵的逆;行列式的值;特征值与特征向量;QR分解;奇异值分解;广义逆;backsolve与fowardsolve函数;取矩阵的上下三角元素;向量化算子等.
> colname=c("c1","c2","c3","c4")
> colname
[1] "c1" "c2" "c3" "c4"
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录:1_矩阵的申城2_矩阵的四则运算3_矩阵的矩阵运算4_矩阵的分解1_1将向量定义成数组向量只有定义了维数向量(dim属性)才能被看做是数组,比如z<-1:12dim(z)<-c(3,4)z[,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12注意:生成的矩阵时按列排列的2_2用array()函数构造多维数组用法array(data=Na,dim=lenth(data),dimnames=NULL)参数描述:data:是一个向量数据dim:是数组各维的长度,缺省值为原向量的长度dimname:是数组维的名字,缺省值为空。
Example:x<-array(1:20,dim=c(4,5))x[,1] [,2] [,3] [,4] [,5][1,] 1 5 9 13 17[2,] 2 6 10 14 18[3,] 3 7 11 15 19[4,] 4 8 12 16 201_3用matrix()函数构造矩阵函数matrix是构造矩阵(二维数组)的函数,其构造形式为matrix(data=NA,nrow=m,ncol=n,byrow=false,dimnames=NULL)其中data是一个向量数据,nrow是矩阵的行数,ncol是矩阵的列数,当byrow=true 时,生成的矩阵的数据是按行放置,缺省值相当于byrow=false,数据按列放置。
Dimn,是数组维德名字,缺省值为空。
Example:A=matrix(1:15,nrow=3,ncol=5,byrow=TRUE)A[,1] [,2] [,3] [,4] [,5][1,] 1 2 3 4 5[2,] 6 7 8 9 10[3,] 11 12 13 14 15> A=matrix(1:15,nrow=3,ncol=5)> A[,1] [,2] [,3] [,4] [,5][1,] 1 4 7 10 13[2,] 2 5 8 11 14[3,] 3 6 9 12 152_矩阵的四则运算可以对数组直接进行四则运算(加减乘除),这时进行的数组对应元素的四则运算。
一般情况下参加运算的矩阵或者数组的维数是相通的,但也可以计算不同维的,这时要将对应的元素补足。
3_1转置运算对于矩阵A,函数t(A)表示矩阵A的转置,如:> A<-matrix(1:15,nrow=3)> A[,1] [,2] [,3] [,4] [,5][1,] 1 4 7 10 13[2,] 2 5 8 11 14[3,] 3 6 9 12 15> t(A)[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6[3,] 7 8 9[4,] 10 11 12[5,] 13 14 153_2求方阵的行列式函数det()是求矩阵行列式的值,如det(matrix(1:4,nrow<-2))[1] -23_3向量的内积向量的内积对于n维向量x,可以看成nxl阶矩阵或lxn阶矩阵。
若x与y是相同维数的向量,则x%*%Y表示x与y作内积.例如,>x=1:5; Y=2*1:5>x%*%y[,1][1,]110函数crossprod()是内积运算函数(表示交叉乘积),crossprod(x,y)计算向量x与y的内积,即t(x) %*% y'。
crossprod(x)表示x与x的内积.类似地,tcrossprod(x,y)表示’x%*%t(Y)’,即x与y的外积,也称为叉积。
tcrossprod(x)表示x与x作外积.如:> x=1:5; y=2*1:5;> crossprod(x);[,1][1,] 55> crossprod(x,y);[,1][1,] 110> tcrossprod(x);[,1] [,2] [,3] [,4] [,5][1,] 1 2 3 4 5[2,] 2 4 6 8 10[3,] 3 6 9 12 15[4,] 4 8 12 16 20[5,] 5 10 15 20 25> tcrossprod(x,y);[,1] [,2] [,3] [,4] [,5][1,] 2 4 6 8 10[2,] 4 8 12 16 20[3,] 6 12 18 24 30[4,] 8 16 24 32 40[5,] 10 20 30 40 504.向量的外积(叉积)设x和y是n维向量,则x%o%y表示x与y作外积.例如> x%o%y;[,1] [,2] [,3] [,4] [,5][1,] 2 4 6 8 10[2,] 4 8 12 16 20[3,] 6 12 18 24 30[4,] 8 16 24 32 40[5,] 10 20 30 40 50outer()是更为强大的外积运算函数,outer(x,y)计算向量二与y的外积,它等价于x%o%y函数。
outer()的一般调用格式为outer(x,y,fun=”*”)其中x, y矩阵(或向量),fun是作外积运算函数,缺省值为乘法运算。
函数outer()在绘制三维曲面时非常有用,它可生成一个x和y的网格。
5.矩阵的乘法设A和B为两个矩阵,通常意义下的矩阵乘法是通过A%*%B来完成,crossprod(A,B)表示的是t(A)%*%B,而tcrossprod(A,B)表示的是A%*%t(B)。
最后我们通过运算知道x%*%A%*%x为二次型。
例子:> A=array(1:9,dim=(c(3,3)))> B=array(9:1,dim=(c(3,3)))> A%*%B;[,1] [,2] [,3][1,] 90 54 18[2,] 114 69 24[3,] 138 84 30> crossprod(A,B)==t(A)%*%B;[,1] [,2] [,3][1,] TRUE TRUE TRUE[2,] TRUE TRUE TRUE[3,] TRUE TRUE TRUE> tcrossprod(A,B)==A%*%t(B);[,1] [,2] [,3][1,] TRUE TRUE TRUE[2,] TRUE TRUE TRUE[3,] TRUE TRUE TRUE6.生成对角阵和矩阵取对角运算函数diag()依赖于它的变量,当v是一个向量时,diag(v)表示以v的元素为对角线元素的对角阵.当M是一个矩阵时,则diag(M)表示的是取M对角线上的元素的向量.如> v=c(1,4,5);> diag(v);[,1] [,2] [,3][1,] 1 0 0[2,] 0 4 0[3,] 0 0 5> M=array(1:9,dim=c(3,3));> diag(M);[1] 1 5 97.解线性方程组和求矩阵的逆矩阵若求解线性方程组Ax=b,其命令形式为solve(A,b),求矩阵A的逆,其命令形式为solve(A).设矩阵A=t(array(c(1:8,10),dim=c(3,3))),b<-c(1,1,1),则解方程组Ax=b的解x和求矩阵A的逆矩阵的命令如下:> A=t(array(c(1:8,10),dim=c(3,3)));> b=c(1,1,1);> x=solve(A,b);> x;[1] -1.000000e+00 1.000000e+00 3.806634e-16> solve(A);[,1] [,2] [,3][1,] -0.6666667 -1.333333 1[2,] -0.6666667 3.666667 -2[3,] 1.0000000 -2.000000 18.求矩阵的特征值与特征向量函数eigen(Sm)是求对称矩阵Sm的特征值与特征向量,其命令形式为:ev=eigen(Sm),则ev存放着对称矩阵Sm特征值和特征向量,是由列表形式给出的,其中ev$values是Sm 的特征值构成的向量,ev$vectors是Sm的特征向量构成的矩阵.如> Sm=crossprod(A,A);> ev=eigen(Sm);> ev;$values[1] 303.19533618 0.76590739 0.03875643$vectors[,1] [,2] [,3][1,] -0.4646675 0.833286355 0.2995295[2,] -0.5537546 -0.009499485 -0.8326258[3,] -0.6909703 -0.552759994 0.4658502(补充:函数eigen(Sm) 计算矩阵A的特征值和特征向量,函数的结果包括两个成分,特征值和特征向量,表达式ev<-eigen(A)结果会返回特征值和特征向量,ev$values是矩阵A 的特征值,ev$vectors是矩阵A的对应特征值的特征向量,如果我们仅仅需要计算特征值,只需要用,evals<-eigen(A)$values, 这时仅仅显示特征值而忽略了特征向量的显示,对于维数比较高的矩阵,如果不需要特征向量,则可采用下面的表达式evals<-eigen(A,only.values=TRUE)$values去避免特征向量的计算。
)4_1特征值分解(1)定义对N阶方阵A,x为标量,v是非零的N维列向量,且满足Av=xv,则称为x为矩阵A特征值,v是相对应于x的特征向量,特征值的全体成为A的谱(2)在R中的实现:在R中利用哈桉树eigen(A)来求矩阵的特征值和特征向量,具体调用格式为Example:> A=array(c(1,1,1,4,2,1,1,9,3),dim<-c(3,3))> A[,1] [,2] [,3][1,] 1 4 1[2,] 1 2 9[3,] 1 1 3> det(A)[1] 20> D=eigen(A)> D$values[1] 6.861946+0.000000i -0.430973+1.651934i -0.430973-1.651934i$vectors[,1] [,2] [,3][1,] 0.5688541+0i 0.8556153+0.0000000i 0.8556153+0.0000000i[2,] 0.7483780+0i -0.2834343+0.3928919i -0.2834343-0.3928919i[3,] 0.3410799+0i -0.0906251-0.1581472i -0.0906251+0.1581472i(3),特征值分解的性质:我们知道当所求的特征向量构成的矩阵可逆时,会满足,J 的对角线即为上述Values 的值,我们验证一下:1X AX J -=> solve(D$vectors)%*%A%*%D$vectors[,1] [,2] [,3][1,]6.861946e+00+0.000000e+00i 0.000000e+00+4.440892e-16i 0.000000e+00-4.440892e-16i[2,] -7.771561e-16-3.386180e-15i -4.309729e-01+1.651934e+00i 2.775558e-16-3.330669e-16i[3,] -3.330669e-16+2.720046e-15i 2.775558e-16+5.828671e-16i -4.309729e-01-1.651934e+00i 计算的精度还是比较高的。