一、R语言
构造矩阵
a=matrix(c(1,2,3,4),ncol=2,byrow=T)
b=matrix(c(5,6,7,8),ncol=2,byrow=T)
c=matrix(c(1,2,3,4),ncol=2,byrow=F)
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
data项为必要的矩阵元素,nrow为行数,ncol为列数,注意nrow与ncol的乘积应为矩阵元素个数,byrow项控制排列元素时是否按行进行,dimnames给定行和列的名称。
> 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 c4
r1 1 4 7 10
r2 2 5 8 11
矩阵线性运算
a+b:对应元素相加
a-b:对应元素相减
2*a:数与每个元素相乘
a*b: 简单的对应元素相乘,注意不是矩阵相乘矩阵乘法
- a%*%b:矩阵乘法(不懂矩阵乘法的百度)
- 若A为n×m矩阵,要得到A'B,可用函数crossprod(),该函数计算结果与t(A)%*%B相同,但是效率更高。
> A=matrix(1:12,nrow=4,ncol=3)
> B=matrix(1:12,nrow=4,ncol=3)
> t(A)%*%B
[,1] [,2] [,3]
[1,] 30 70 110
[2,] 70 174 278
[3,] 110 278 446
> crossprod(A,B)
[,1] [,2] [,3]
[1,] 30 70 110
[2,] 70 174 278
[3,] 110 278 446
矩阵转置
t(a)、t(b)
取方阵的对角线元素
diag(a)
求方阵的迹
在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A)。
命令:sum(diag(a))构造对角矩阵
c=diag(c(1,2,3,4))
> diag(diag(A)) [,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 0 6 0 0 [3,] 0 0 11 0 [4,] 0 0 0 16
矩阵求逆
solve(a)
矩阵求逆可用函数solve(),应用solve(a, b)运算结果是解线性方程组ax = b,若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆,> a=matrix(rnorm(16),4,4) > a [,1] [,2] [,3] [,4] [1,] 1.6986019 0.5239738 0.2332094 0.3174184 [2,] -0.2010667 1.0913013 -1.2093734 0.8096514 [3,] -0.1797628 -0.7573283 0.2864535 1.3679963 [4,] -0.2217916 -0.3754700 0.1696771 -1.2424030 > solve(a) [,1] [,2] [,3] [,4] [1,] 0.9096360 0.54057479 0.7234861 1.3813059 [2,] -0.6464172 -0.91849017 -1.7546836 -2.6957775 [3,] -0.7841661 -1.78780083 -1.5795262 -3.1046207 [4,] -0.0741260 -0.06308603 0.1854137 -0.6607851 > solve (a) %*%a [,1] [,2] [,3] [,4] [1,] 1.000000e+00 2.748453e-17 -2.787755e-17 -8.023096e-17 [2,] 1.626303e-19 1.000000e+00 -4.960225e-18 6.977925e-16 [3,] 2.135878e-17 -4.629543e-17 1.000000e+00 6.201636e-17 [4,] 1.866183e-17 1.563962e-17 1.183813e-17 1.000000e+00
矩阵的行列式
- det(a)
det(b)
det(c)
二、Excel(复杂不常用)
- 定义矩阵名称
- 矩阵加法
- 矩阵减法
- 矩阵数乘
- 矩阵转置
transpose
Shift+Ctrl+Enter - 矩阵对应元素相乘
- 矩阵乘法
mmult - 矩阵的逆
minverse - 矩阵的行列式
mdeterm - 计算矩阵对应元素乘积之和
sumproduct
Shift+Ctrl+Enter
由于Excel矩阵操作比较复杂,描述起来比较麻烦,大家可以百度一下
三、Matlab
MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的商业数学软件。 MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C++和FORTRAN)编写的程序。
MATLAB的意思是“矩阵实验室” ,因此它提供了许多创建矢量,矩阵和多维数组的便捷的方式。在MATLAB自己的语言中,一个矢量(vector)指的是一维(1×N或N×1)矩阵,在其他语言中通常被叫做数组(array)。 矩阵(matrix)通常指的是2-维数组,例如m×n数组其中m和n大于或等于1。多维数组通常指的是维数大于2的数组。
- 第一个必须是英文字母,其组成可以是任意字母、数字、下划线,中间不可留空格、标点符号。
- 最多只能有 63个字母,关键字和标准函数名不能用作变量。
- 使用变量时,不需预先经过变量声明,而且所有数值变量均以预设的 double (双精度)形式储存。
- MATLAB标准函数名必须用小写字母,所以建议定义变量、自编函数名时用小写字母。
- 在matlab中,变量名是区分大小写的。
特别提醒:在编程时,变量的命名是很有学问的,不要随便命名,养成变量命名的好习惯。
变量命名:
Matlab的系统预定义变量(Predefined variable),定义变量时,不要使用这些名称!
- Ans 计算结果默认赋值变量
- pi:圆周率(pi只能用小写字母)
- Inf,inf:无穷大,如1/0
- I,j 虚数单位
- NaN,nan: not a number 非数,如0/0
- eps:浮点运算相对精度 eps是一个函数,eps在matlab中叫做“浮点零”,也叫matlab中的零值 ,是一个非常非常小的数,但不是0。 在程序中的应用是防止分母为零。
矩阵创建
在MATLAB中创建矩阵有以下规则:
a、矩阵元素必须在”[ ]“内;
b、矩阵的同行元素之间用空格(或”,” )隔开;
c、矩阵的行与行之间用”;” (或回车符)隔开;
d、矩阵的元素可以是数值、变量、表达式或函数;
e、矩阵的尺寸不必预先定义。
1. 直接输入法
a=[1,2,3;4,5,6;7,8,9]
b=[1:1:3;4:1:6;7:1:9]
第一个值为起始值,中间为公差,最后为尾值
c=[linspace(1,3,3); linspace(4,6,3); linspace(7,9,3)]
第一个值为起始值,中间为尾值,最后为列数要保持一样不然会报错
例子如下:
2.利用MATLAB函数创建矩阵
(1)ones()函数:产生全为1的矩阵
ones(3)
ones(3,4)
(2) zeros()函数:产生全为0的矩阵;
zeros(3)
zeros(3,4)
(3) rand()函数:产生在(0,1)区间均匀分布的随机阵;
rand(3)
rand(3,4)
(4) eye()函数:产生单位阵;
eye(3)
(5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。
randn(3)
randn(3,4)
(6)生成对角矩阵
diag([1,2,3,4])
diag([1,2,3,4],1)
3.利用M文件来创建矩阵
4.大矩阵的建立
5.利用小矩阵构建大矩阵
e=[a;b]
f=[a,b]
矩阵拆分
矩阵运算
- a+d
- a-d
- 3*a
- a*d
- a^2
- b=a^0.5
部分命令运行:
注意这里的矩阵乘法与R语言不通,牢记
- 求矩阵的逆
a=[5,7,1;6,8,9;1,9,7]
inv(a) - 矩阵除法:
- 求行列式
det(a) - 求对角线元素
diag(a)
diag(a,1) (1为偏移量,向右上角偏移的位数,-便是向左下角) - 矩阵转置
a’ - 矩阵开方
sqrt(a)
a.^0.5
矩阵点运算
在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算,如:.*、 ./、 .\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
- a.*b
- a.\b
- a./b
- a.^2
- a.^0.5
矩阵关系运算
<(小于)、 <=(小于或等于)、 >(大于)、 >=(大于或等于)、 ==(等于)、~=(不等于)
- a<b
- a<=b
- a>b
- a>=b
- a==b
- a~=b
- a>5
- a>=5
- a==5
例子:
找出a中大于5的元素位置
find(b>5)
按列算1 2 3 。。。找到相应的位置
产生3阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。
A=fix((90-10+1)*rand(3)+10)
P=rem(A,3)==0
其他矩阵函数
- 改变维数
a=[1:12]
reshape(a,3,4) - 旋转90度
rot90(b) - 左右翻转
fliplr(b) ; flipdim(b,2) - 上下翻转
flipud(b) ; flipdim(b,1) - 上三角元素
tril(c)
tril(c,1) - 下三角元素
triu(c)
triu(c,-1) - 确定矩阵的维数
size(b) - 求矩阵的迹
trace(c)
备注:尊重知识原创,转载请标明出处:http://blog.esouti.com/2018_02_04_562.html