juaner's Blog

千里之行,始于足下。

数值与矩阵

juaner posted @ Thu, 18 Aug 2011 17:11:38 +0800 in matlab , 4185 readers

一、矩阵

1、matlab有两个特殊数值:inf和NaN。matlab中用inf和-inf来表示正无穷大和负无穷大。除法运算中除数为0或者运算结构溢出都会导致inf或者-inf的结果。用NaN表示一个既不是实数也不是复数的数值。是 Not a Number的缩写。类似0/0、inf/inf得到的都是NaN。

2、字符串用单引号来表示。

3、函数句柄是用来提供间接调用函数的数据类型,函数句柄可以传递给其他函数以便该函数句柄所代表的函数可以被调用。函数句柄还可以被存储起来,以便以后利用。用符号@后面跟着函数名来表示。例如:

 fhandle=@sin;fhandle(0);ans=0.

4、matlab的矩阵中分号是用来分隔列的,逗号是用来分隔行的。也就是说行矩阵用逗号分隔,列矩阵用分号分隔。

5、rand()是以机器时间为随机种子的,每次运行的结果都不一样。

6、构造向量的时候,:一般表示步长为1。也可产生任意定义步长的向量。特殊的两个函数是linspace(-6,6,4)和logspace()函数。前者是产生等距向量,后者是创建对数等距的向量。

7、矩阵的合并,表达式C=[A B]在水平方向合并矩阵,C=[A;B]在竖直方向合并矩阵。

8、矩阵合并函数:

  1. cat,在指定的方向合并矩阵,cat(DIM,A,B),cat(2,A,B),cat(1,A,B);
  2. horzcat,在水平方向合并矩阵,格式为horzcat(A,B);
  3. vertcat,在竖直方向合并矩阵,格式为vercat(A,B);
  4. repmat,通过复制矩阵来构造新的矩阵,格式为B=repmat(A,M,N),得到MXN个A的大矩阵。
  5. blkdiag,用已知矩阵来构造块对角化矩阵,格式为Y=blkdiag(A,B,...)。

9、删除矩阵的某一行,使某一行为空即可,使用A(2,:)=[ ]; 同理删除某一列A(:,2)=[ ]。A(1,i)表示第一行的所有元素。

10、引用矩阵元素的时候用的是A(i,j)。引用矩阵元素也可以使用线性方法,已知矩阵的下标可以用函数sub2ind()来得到线性引用的下标。用法如:linearindex=sub2ind(size(A),3,2);反过来为[row col]=ind2sub(size(A),6)。

11、冒号本身可以表示一列或者一行的所有元素,一列元素可以写为:A(:,j)。end表示最后一个元素。

12、矩阵尺寸函数有:n=length(X)表示矩阵最长方向的长度,n=ndims(X)表示矩阵的维数,n=numel(X)表示矩阵的元素个数。d=size(X),返回的大小信息以向量方式存储,[m,n]=size(X)返回的大小信息分开存储,m=size(X,dim)返回某一维的大小信息。

13、获得数据类型的信息:如:ischar(A),isfloat(A)等等。

14、判断矩阵的结构,如:isempty(A),issparse(A)等等。

15、矩阵结构的改变有:旋转,转置等等。

16、稀疏矩阵

  • 创建:S=sparse(A),A为满矩阵,也可以直接用这个函数创建稀疏矩阵,格式为:S=sparse(i,j,s,m,n),其中i和j分别是系数矩阵的非零元素的行和列指标,s为响应的非零元素的值。m和n分别是矩阵的行和列的高度。
  • 例如:S=sparse([1,2,3,4],[3,2,1,3],[1,2,3,4],4,4)
  • 得到的稀疏矩阵如下:
    S =

       (3,1)        3
       (2,2)        2
       (1,3)        1
       (4,3)        4
     
  • A=full(S),把一个稀疏矩阵转化为一个满矩阵,可以用转换函数full();
  • nnz(X)返回非零值的个数,nonzeros(X)返回非零值,nzmax(S)返回用于存储非零值的空间长度。spy()函数是用图形显示矩阵非零值的分布。

二、运算部分

   运算符有算数运算符,关系运算符和逻辑运算符。

   .*表示对应的元素相乘,*表示的是矩阵的乘法,其他的类似。

    要注意的是.'表示矩阵转秩,当矩阵时复数时,不求矩阵的共轭。’表示矩阵转秩,当矩阵是复数时,求矩阵的共轭转秩。

    异或为xor,例如xor(A,B);&,|,~的重载函数为:and(),or(),和not()。

三、字符串处理函数

  • 创建字符数组

    strcat用来连接字符串,但是连接的字符串之间没有空格,如果要保留空格的话,可以用矩阵合并符来实现字符串合并,用法分别为c=strcat(a,b)或者是c=[a b]。

    用户也可以构造二位字符数组,str=['second';'string'];但是要保持每一行具有相同的长度,如果长度不一致的,要在尾部添加空格补齐。

    更简单的使用char('first','second'),不要求长度一致。具有类似功能的函数是strvcat('name','string')。

  • 创建字符串单元数组

   celldata=cellstr(data)逆函数为char(celldata)。

  • 字符串比较函数

    strcmp(S1,S2),比较两个字符串是否相等。

    strncmp(S1,S2,N)比较两个字符串的前N个字符是否相等。

    strcmpi(S2,S2)比较两个字符串是否相等,忽略大小写。

    d strncmpi(S1,S2,N)比较两个字符串的前N个字符是否相等,忽略大小写。

   也可以用关系运算符比较字符串。

  • 字符串查找和替换函数

   str=strrep(str1,str2,str3);把str1中的str2子串替换成str3;

   k=findstr(str1,str2);查找输入中较长的字符串中较短字符串的位置;

   k=strfind(str,pattern)查找str中pattern出现的位置;

   k=strfind(cellstr,pattern)查找单元字符串cellstr中pattern出现的位置;

   token=strtok('str')获得第一个分隔符之前的字符串;空格,制表符和换行符为分隔符;

   token=strtok('str',delimiter)获得第一个分隔符之前的字符串;输入delimiter为指定的分隔符;

   [token,rem]=strtok(...)获得第一个分隔符之前的字符串;返回值rem为第一个分隔符之后的字符串;

   x=strmatch('str',STRS)在字符串数组STRS中匹配字符串str,返回匹配上的字符串所在行的指标;

   x=strmatch('str',STRS,'excat')功能同上,但是要求完全匹配。

  • 数值转换

   num2str:把一个数值类型的数据转换为字符串。

  

  

 

 

 

 

Avatar_small
zchen said:
Thu, 18 Aug 2011 17:41:27 +0800

学过一学期matlab的课...不过很快就还给老师了...

Avatar_small
juaner said:
Thu, 18 Aug 2011 20:32:17 +0800

@zchen: 恩,我也是,现在要用,所以必须捡起来。

Avatar_small
λ said:
Sat, 20 Aug 2011 11:04:11 +0800

只接触过一点 J 语言。(APL/J/K)

Avatar_small
meidir said:
Mon, 29 Jan 2024 06:30:15 +0800

Oh my goodness! an incredible article dude. Thanks Nonetheless I am experiencing problem with ur rss . Don’t know why Unable to subscribe to it. Is there anyone getting equivalent rss drawback? Anyone who is aware of kindly respond. Thnkx 뉴헤븐카지노먹튀


Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter