matlab中一些函数用法

这篇博客详细介绍了MATLAB中的一些关键函数,包括diag函数的多种用法,eye函数生成单位矩阵,如何使用@创建句柄,nargin/nargout检查输入输出参数,length函数获取数组长度,矩阵转置,hist函数实现频数直方图,逆矩阵inv和伪逆pinv的使用,以及sort函数的排序功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、diag函数

diag函数功能:矩阵对角元素的提取和创建对角阵

设以下X为方阵,v为向量

1、X = diag(v,k)

当v是一个含有n个元素的向量时,返回一个n+abs(k)阶方阵X,向量v在矩阵X中的第k个对角线上

k=0表示主对角线;k>0表示在主对角线上方;k<0表示在主对角线下方。

例1:

v=[1 2 3];
diag(v, 3)

ans =

     0     0     0     1     0     0
     0     0     0     0     2     0
     0     0     0     0     0     3
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0

注:从主对角矩阵上方的第三个位置开始按对角线方向产生数据的

例2:

v=[1 2 3];
diag(v, -1)
ans =
      0 0 0 0
      1 0 0 0
      0 2 0 0
      0 0 3 0

注:从主对角矩阵下方的第一个位置开始按对角线方向产生数据的

 

2、X = diag(v)

向量v在方阵X的主对角线上,类似于diag(v,k),k=0的情况。

例3:

v=[1 2 3];
diag(v)

ans =

1 0 0
0 2 0
0 0 3

注:写成了对角矩阵的形式

 

 3、v = diag(X,k)   第一个变量是矩阵的情况下

返回列向量v,v由矩阵X的第k个对角线上的元素形成

例4:

 v=[1 0 3;2 3 1;4 5 3];
diag(v,1)

ans =

     0
     1

注:把主对角线上方的第一个数据作为起始数据,按对角线顺序取出写成列向量形式

4、v = diag(X)返回矩阵X的主对角线上的元素,类似于diag(X,k),k=0的情况例5:

v=[1 0 0;0 3 0;0 0 3];
diag(v)

ans =

1
3
3

或改为:

v=[1 0 3;2 3 1;4 5 3];
diag(v)

ans =

1
3
3

注:把主对角线的数据取出写成列向量形式

5、diag(diag(X))

取出X矩阵的对角元,然后构建一个以X对角元为对角的对角矩阵。
例6:

 X=[1 2;3 4]       
 diag(diag(X))

X =

     1     2
     3     4

 

ans =

     1     0
     0     4

 

二、eye(M,N)

eye()函数常用的两种调用方式:

eye(N) 生成一个N行N列的单位矩阵。

例1:

>> eye(3)

ans =

     1     0     0
     0     1     0
     0     0     1

eye(M,N) 生成一个M行N列的"单位"矩阵,主对角线元素为1,其余元素为0。

例2:

>> eye(3,2)

ans =

     1     0
     0     1
     0     0

三、 @ 创建句柄

其中使用@ 来创建函数的句柄:

一般的定义方式为 function_handle = @function_name ,则创建一个函数句柄,句柄可以视为函数的别名,如 func = @sin,则 sin(x) 也可通过 func( x )实现;

举例:

f_func = @ukf_ins_f;
h_func = @uwb_h;

 

四、nargin / nargout

nargin为“number of input arguments”的缩写。 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入参数变量个数的函数。在matlab命令窗口中输入help nargin或者doc nargin即可获得该函数的帮助信息。

例1.函数文件 examp.m

function fout=examp(a,b,c)

if nargin==1

fout=a;

else if nargin==2

fout=a+b;

else if nargin==3

fout=(a*b*c)/2;

end

end

end

nargout:   在matlab中定义一个函数时, 在函数体内部, nargout是用来判断输出参数变量个数的函数

 

五、length 函数

1、size

获取数组的行数和列数

2、length

数组长度,即行数和列数中的较大值,相当于max(size(a))

3、numel

返回元素总数

六、矩阵的转置

A.'是一般转置,A'是共轭转置,顾名思义是对矩阵先做共轭运算,再进行转置,在A是实数矩阵时,两者没有区别,但是当A是复矩阵时,就有区别了,示例如下:
 A=[1 2 3;4 5 6]

A =

     1     2     3
     4     5     6

>> A.'

ans =

     1     4
     2     5
     3     6

>> A'

ans =

     1     4
     2     5
     3     6

>> a=[1+i 2+2i 3+3i;4+4i 5+5i 6+6i]

a =

   1.0000 + 1.0000i   2.0000 + 2.0000i   3.0000 + 3.0000i
   4.0000 + 4.0000i   5.0000 + 5.0000i   6.0000 + 6.0000i

>> a.'

ans =

   1.0000 + 1.0000i   4.0000 + 4.0000i
   2.0000 + 2.0000i   5.0000 + 5.0000i
   3.0000 + 3.0000i   6.0000 + 6.0000i

>> a'

ans =

   1.0000 - 1.0000i   4.0000 - 4.0000i
   2.0000 - 2.0000i   5.0000 - 5.0000i
   3.0000 - 3.0000i   6.0000 - 6.0000i 
另外补充一个conj(a)是求a的共轭矩阵,示例如下:
conj(a)

ans =

   1.0000 - 1.0000i   2.0000 - 2.0000i   3.0000 - 3.0000i
   4.0000 - 4.0000i   5.0000 - 5.0000i   6.0000 - 6.0000i

七、MATLAB实现频数直方图——hist的使用

"hist" is short for "Histogram(直方图、柱状图)"。

1.N = hist(Y)

bins the elements of Y into 10 equally spaced containers and returns the number of elements in each container.  If Y is a matrix, hist works down the columns.

(将向量Y的元素平均分到十个等间隔的容器中,并且返回每个容器的元素个数。如果Y是一个矩阵,hist指令逐列元素操作。Y为向量的情形见例1和2,为矩阵的情形见例3.)

例1.执行指令

>> Y = [1:10];
>> hist(Y)

得到

10个蓝色方条,每个方条对应一个容器,其长度代表容器中数据的多少。由图知,容器中的数据量均为1。这个例子不够典型,见例2.

例2.执行指令

>>  Y = [1, 2, 2, 5, 6, 6, 8, 11];
>> hist(Y)

得到

Y最大为11,最小为1,故而将区间[1,11]均分为10分,分别为[1, 2], (2,3], (3,4], (4,5], (5,6], (6,7], (7,8], (8,9], (9,10], (10,11].

例3.当Y是矩阵时的情况。

执行指令:

>>  Y = [1,2.5,2.1;3,3.5,6];
>> hist(Y)

注意,Y为矩阵:

    1.0000    2.5000    2.1000
    3.0000    3.5000    6.0000

Y有三列元素,逐列元素产生对应的直方图。得到

观察此图和矩阵Y,由于Y的元素最大为1,最小为6,故而将区间[1,6]以0.5的间隔划分为10个等长的子区间作为10个容器去容纳数据。图中有三种颜色的方条:蓝色,绿色和红色,分别对应Y中的第1,2,3列元素。如第一列元素为1和3,故而区间[1,1.5]和(2.5,3]中有蓝色方条。

2.N = hist(Y,M)

where M is a scalar, uses M bins.(M是一个标量,表明使用M个箱子)

例1.执行指令

>> Y = [1, 1, 1.3, 2.6, 3, 3.4, 5, 5.9, 6, 6,1, 7, 7,2];

>>  hist(Y, 6)

得到

3.N = hist(Y,X)

where X is a vector, returns the distribution of Y among bins with centers specified by X.(X是向量,以X中的元素为区间中心可获得一系列区间,执行命令可获得Y在这些区间中的分布情况。) The first bin includes data between -inf and the first center and the last bin includes data between the last bin and inf. Note: Use HISTC if it is more natural to specify bin edges instead. 

 

八、逆(inv)与伪逆(pinv)

对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆

先搞清楚什么是伪逆。
对于方阵A,若有方阵B,使得:A·B=B·A=I,则称B为A的逆矩阵。
如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A'同型的矩阵B,使得:
      A·B·A=A        
      B·A·B=B
此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。因此伪逆阵与原阵相乘不一定是单位阵。


当A可逆时,B就是A的逆矩阵,否则就是广义逆。

满足上面关系的A,B矩阵,有很多和逆矩阵相似的性质。


如果A为非奇异矩阵的话,虽然计算结果相同,但是pinv会消耗大量的计算时间。

在其他情况下,pinv具有inv的部分特性,但是不完全相同。

 

九、sort排序

sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。sort(A)是默认的升序,而sort(A,'descend')是降序排序。
sort(A)若A是矩阵,默认对A的各列进行升序排列
sort(A,dim)
dim=1时等效sort(A)
dim=2时表示对A中的各行元素升序排列

'descend'即降序,'ascend'即升序


看下面的例子

>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2

>> sort(A)
ans =
3 1 2
4 5 6
8 9 7

>> sort(A,1)
ans =
3 1 2
4 5 6
8 9 7

>> sort(A,2)
ans =
1 6 8
3 5 7
2 4 9

>> sort(A,1,'descend')

% 1 表示按照列排序;2表示按照 行 进行排序; 'descend'即降序,'ascend'即升序

ans =

     8     9     7
     4     5     6
     3     1     2

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值