Matlab 学习笔记(三)—— 矩阵运算

一、调用函数运算

1)常见的数学运算函数,例如abs,sin,round,log,可以直接运用到矩阵上,所表示的含义是:对矩阵中的每个元素分别运用这些数学运算函数。

2)还有一些函数是对整个向量/矩阵起作用的:

  • sum:求和函数——(向量V)返回V中所有元素相加的结果;(矩阵A,dim)dim=1,沿行方向进行计算,即计算矩阵每一列的和,返回一个行向量;(矩阵A,dim)dim=2,沿列方向进行计算,即计算矩阵每一行的和,返回一个列向量;PS:如果向量或矩阵里面有NaN值,那么结果也会是NaN,如果想忽略NaN ——>(A,‘omitnan’)
  • prod:求乘积函数 —— 调用参数的方式与sum一致;
  • cumsum:计算累加和,一个向量A使用这个函数之后得到的还是一个向量B,B1=A1,B2=A1+A2,B3=A1+A2+A3..._;如果是一个矩阵A使用这个函数(A,dim)dim=1沿行方向计算,dim=2沿列方向计算;NaN处理同上;
  • diff:计算差分,一阶差分就是数据后一个减去前一个的值,二阶差分就是在一阶差分的基础上再差分一次,以此类推。(向量V,几阶差分num)或者(矩阵A,几阶差分nu,dim指代方向);PS:此函数不支持使用‘omitnan’
  • mean:计算平均值  ——  (向量V)或者(矩阵A,dim)可以使用'omitnan';
  • median:计算中位数  ——  (向量V)或者(矩阵A,dim)可以使用'omitnan';
  • mode:计算众数,即一组数据中出现次数最多的数;如果有多个元素出现的次数相同,该函数会返回其中的最小值;——1)(A,dim);2)会自动忽略NaN,不需要‘omitnan’;3)返回值[M,F],M是A的众数,F是M出现的次数;4)返回值[M,F,C],其中C是一个元胞数组,C只有一个元素,包含A的所有众数;
  • var:计算方差,方差分为总体方差和样本方差,两者区别为总体方差除以n,样本方差除以(n-1);1)(A,w,dim,'omitnan'),w=0可以省略,计算样本方差,w=1计算总体方差,dim同上;
  • std:计算标准差,使用方法与var一致;
  • min:计算最小值,复数为模长——1)求两个矩阵对应元素的较小值,返回一个矩阵(A,B),矩阵A和B的大小可以不一致,只需要可以兼容,即可以以一种方式比较,如B是一行与A列数一致,B是一列与A的行数一致,B是一个实数;2)求向量或者矩阵本身的最小值,(A,[],dim),[]是给不用的B占位用的,不能省略;这里返回值[m,ind],m是最小值,ind是m对应的索引,如果m出现多次,那就是最小索引;—— 不需要对NaN进行单独处理;不支持两个矩阵对比时输出两个返回值;
  • max:计算最大值,使用方法与min一致;

扩展:1)将自然数1到n^2填充到n阶方阵中,使方阵中每行、每列、主对角线、副对角线上的元素之和相等,这样的方阵称为魔方矩阵  ——  magic(n);

           2)mink:前k个最小值——maxk:前k个最大值;—— topkrows(A,k,col,direction)基于col列(可以是向量)比较的结果返回最大/小(取决于direction=descend/ascend)的k行;

二、算术运算

MATLAB基本运算符:+(加号)、-(减号)、*(乘号)、/(右除)、\(左除)、^(乘方)、'(转置) 

两个矩阵兼容运算图示(仅以加法为例)

1)加法:相加的两个矩阵不要求要完全一样,只要兼容就可;

2)减法: 相减的两个矩阵不要求要完全一样,只要兼容就可;

3)乘法:矩阵乘法有两种‘*’就必须满足前一个矩阵的列数等于后一个矩阵的行数这个要求;‘.*’只需要兼容就可以;

4)除法:线性代数中矩阵并不支持除法,MATLAB对矩阵的除法有另外的定义;——/(右除):x=B/A,表示对方程Ax=B求解;\(左除):x=A\B,表示对方程Ax=B求解。——点除A.\B是B的每个元素除以A对应的元素,A./B是A的每个元素除以B对应的元素;

5)乘方:矩阵乘方,和点乘方;

扩展:逆矩阵的求解可以使用A^(-1)或者ver(A);

6)转置:转置和点转置,这两者的区别在于对复数的处理,转置在转置矩阵的时候同时矩阵中的复数会变成共轭复数,点转置不会;

三、关系运算

MATLAB中的关系运算符有六个:==(等于)、~=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于);

关系运算符可以比较两个数组中元素间的逻辑关系,如果比较结果为真,则返回逻辑值1,如果比较结果为假,则返回逻辑值0;(逻辑变量和数值变量在工作空间中的符号不一样是一个勾勾)

注意:1)兼容模式在关系运算中也支持; 2)NaN之间不相等,inf与inf相等;3)逻辑0和逻辑1在计算的时候和数值1和0没区别;

四、逻辑运算

1】逻辑与(&-and(a,b))、逻辑或(|-or(a,b))、逻辑非(~-not(a))、逻辑异或[不同时取1,相同时取0](无运算符-xor(a,b))

注意:1)函数参数a,b为数组; 2)兼容模式在逻辑运算中也支持;3)MATLAB在对数值进行逻辑运算时,会自动对其进行逻辑值转换,所有非零元素都会转换成逻辑值1,手动将数值转换成逻辑值可以用函数logical(),NaN和复数转不了逻辑值不得参与逻辑运算;4)逻辑值矩阵生成函数true(行,列),false(行,列)

2】逻辑与(&&)、逻辑或(||)——  1)与上面的区别在于,只能对单一元素进行逻辑运算;2)优点在于会优化计算,如a&&b,如果a为假不会计算b,而如果使用&则会计算b;

3】利用逻辑索引,引用矩阵的元素;先利用条件,把需要选出的元素置为逻辑1,其余元素置为逻辑0,如L =(A>5),然后取A(L)即可得到满足条件的元素,返回的向量是按照线性索引的顺序排列的  ——  或者可以直接写成A(A<5);

注意:这里面一定要是逻辑1和逻辑0,不能是数值1和数值0(会报错),可以用logical转换;

4】逻辑索引应用:缺失值的识别和填补  ——  A(isnan(A))= 5;

5】扩展

  • all(A):判断A中元素是否全为非零,如果是返回逻辑值1,否则返回逻辑值0;1)(A)其中A是向量;2)(A,dim)其中A是矩阵;3)
  • any(A):判断数组元素是否存在至少一个非零值,如果是返回逻辑值1,否则返回逻辑值0;用法与all函数一致;
  • find(A):查找数组中的非零值,并返回其索引值组成的向量;1)(A)A可以是向量也可以是矩阵;2)(A,n)返回的是前n个非零值对应的索引值;3)返回值“[行,列]”该函数可以返回非零元素的下标;4)(A,n,'last')返回的是最后n个非零值对应的索引值;5)返回值“[行,列,v]”,其中v是所有非零元素组成的向量;
五、数组的集合运算

集合运算:交集、并集、补集、差集等;

  • unique(A):1)对数组A进行去重,并返回去重后的结果,还自动升序排列;2)返回值最多有三个“[C,c2ia,a2ic]”,其中C是去重后的数组,c2ia是C里面的元素在a里面的索引值,a2ic是A中元素在C中的索引值;索引值重复只去第一个;3)如果不希望自动升序排列,(A,‘stable’)即可;4)(A,‘rows’)表示把行看成一个整体,行与行比较,返回唯一行;
  • ismember():1)(A,B)判断数组A的元素是否在数组B内,返回值是一个大小和A相等的数组,元素为逻辑值0/1,1表示存在,0表示不存在;2)返回值‘[h,ib]’,其中h是1中说的,ib是A中元素在B中的最小索引,如没有即为0;3)如果B和A的列数相同,(A,B,'rows')就将一行看做一个整体比较;
  • intersect():1)(A,B)返回数组A和B的共同数据,但不包含重复项,还会默认进行排序,如果不要排序也是加‘stable’,保留A中的顺序;2)同样也有‘rows’作为关键字;3)同样也有三个返回值“[C,c2ia,c2ib]”;
  • union():用法与intersect一致,返回两个数组的并集;
  • setdiff():用法与intersect一致,返回两个数组的差集(A,B)—>(A-B);
  • setxor():用法与intersect一致,返回两个数组的对称差集;

六、线性代数运算
  • det:计算矩阵的行列式;
  • rank:计算矩阵的秩;
  • trace:计算矩阵的迹(对角线元素之和);
  • rref:转化成行最简型矩阵;
  • inv:计算方阵的逆矩阵;
  • transpose:返回转置矩阵,复数虚部的符号保持不变;
  • triu:(A,K)返回矩阵A第K条对角线上方的全部元素,其它部分用0填充(k=0主对角线,k>0往上方走,k<0往下方走);
  • tril:(A,K)返回矩阵A第K条对角线下方的全部元素,其它部分用0填充(k=0主对角线,k>0往上方走,k<0往下方走);
  • eig:1)如果只有一个返回值,则是矩阵特征值组成的向量;2)返回值'[V,D]',V是特征向量构成的矩阵,D是特征值构成的对角矩阵;
  • norm:计算向量和矩阵的范数,(a,p)a是想获得范数的数据,p是指p范数;
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值