您的位置:首页 > 编程语言 > MATLAB

学习笔记--MATLAB常用函数

2016-09-08 16:17 363 查看
1、pi = 3.1416

2、指数函数:x = 1:10 ;  exp(x)

3、平方根:sqrt ( afr_HR(w)^2 + afr_HI(w)^2 )

     平方:数组平方时。需要 .^2 

4、画图:

(1)、title ()

title(num2str(lenRvp));         %变量名作为图的标题

title(['a=',num2str(a),'。'])

(2)、figure用于生成一个图窗,可单独使用,而hold on是先用figure生成一个图窗后,要把多个数据画进去的时候才用的,且只用在figure后面,若不画多个数据时则不加hold on,因此,hold on不能单独使用

5、arg min f(x,t) 

      arg是元素(变元)的英文缩写。

       arg min 就是使后面这个式子达到最小值时的x,t的取值

       arg max 就是使后面这个式子达到最大值时的x,t的取值

6、记录程序运行时间  的函数 tic、toc

7、巧用TAB键,进行输入补全操作

8、热键F9   运行选中的代码

9、热键F5   运行脚本中所有的代码

10、取余:

       rem(n,m)或mod(n,m) :    n/m的余数 mod模数求余 rem 求余数

11、while、for、if  

       for i = 1:qrsdatasdirnums
     
           while (j <= count)

               qrsdatas(m , n) = f(j); 

               if rem(j,170) == 0

                   m = m+1;

                   n = 1;
               end
           end
       end

12、删除一行或者一列数据

       a=[1,2,2;3,4,4;2,4,4]; a(1,:)=[ ];表示删除第一行a(:,1)=[ ];表示删除第一列

13、

a.向零取整(截尾取整)

fix-向零取整(Round towards zero);

>> fix(3.6)   

ans =

     3

b.向负无穷取整(不超过x 的最大整数-高斯取整)

floor-向负无穷取整(Round towards minus infinity);

>> floor(-3.6)  

ans =

    -4

c.向正无穷取整(大于x 的最小整数)

ceil-向正无穷取整(Round towards plus infinity);

>> ceil(-3.6)   

ans =

    -3

d.向最近整数取整,四舍五入(四舍五入取整)

round-向最近整数取整,四舍五入(Round towards nearest integer);

>> round(3.5)

ans =

     4

14、数组长度可变

       Rdiff = [];

       for i = 1:200                                   

           Rdiff = [Rdiff;diff_s(i),label(i)];

       end

15、归一化

>> [y,ps] = mapminmax(a)

y =

     1     1     1     1

     2     2     2     2

     3     3     3     3

     4     4     4     4

     5     5     5     5

ps = 

         name: 'mapminmax'

        xrows: 5

         xmax: [5x1 double]

         xmin: [5x1 double]

       xrange: [5x1 double]

        yrows: 5

         ymax: 1

         ymin: -1

       yrange: 2

    no_change: 0

>> [y,ps] = mapminmax(a')

y =

   -1.0000   -0.5000         0    0.5000    1.0000

   -1.0000   -0.5000         0    0.5000    1.0000

   -1.0000   -0.5000         0    0.5000    1.0000

   -1.0000   -0.5000         0    0.5000    1.0000

ps = 

         name: 'mapminmax'

        xrows: 4

         xmax: [4x1 double]

         xmin: [4x1 double]

       xrange: [4x1 double]

        yrows: 4

         ymax: 1

         ymin: -1

       yrange: 2

    no_change: 0

       对行向量的数据进行归一化处理

反归一化:

[ap,ps] = mapminmax(y, ps)

16、size函数

       size(a,1)求矩阵的行数

       size(a,2)求矩阵的列数,相当于length(a)

       size(a)同时求矩阵的行和列数

17、打乱数组的顺序

(1)打乱二维数组的行顺序

       size = size(A,1);

       A(randperm(size), :) = A(1:1:size, :);

(1)打乱以维数组的列顺序

       size = size(A,2);

       A(randperm(size)) = A(1:1:size);

18、数组连接

假如Inc与 Qnc是两个已知的一维数组,用下面的语句就可以实现你说的要求。
xn=[Inc Qnc];
xn为Inc 与Qnc的首尾相连的数组了。可以参考matlab基础相关书籍

19、eval()函数





eval()函数的功能就是将括号内的字符串视为语句并运行
比如
eval('y1=sin(2)')和语句y1=sin(2)等价
多在循环中使用,可以对多个名字有规则的变量或文件进行操作,比如
for x=1:5
eval(['y',num2str(x),'=',num2str(x^2),';'])
end

20、均值mean

mean(X,1)为列向量的均值;mean(X,2)为行向量的均值;mean(mean(X))为整个矩阵的均值。

21、均方差

 Matlab中有求数组方差的 函数:var;要注意的是var函数所采用公式中,分母不是length(X) ,而是length(X)-1 。

这是因为var函数实际上求的并不是方差,而是误差理论中“有限次测量数据的标准偏差的估计值”。

var没有求矩阵的方差功能,可使用std先求均方差,再平方得到方差。std,均方差,std(X,0,1)求列向量方差,std(X,0,2)求行向量方差。

eg:

>>X=[1,2,3,4]

>>var(X)=1.6667

>> sum((X(1,:)-mean(X)).^2)/length(X)=1.2500

>> sum((X(1,
4000
:)-mean(X)).^2)/(length(X)-1)=1.6667
22、标准差
即均方差。标准差的平方即为
方差,而协方差矩阵中的对角元素即为方差。

23、cov 协方差函数
http://www.cnblogs.com/chaosimple/p/3182157.html
协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。

cov(x)是对x的列进行协方差计算。

24、矩阵的特征值、特征向量

(1) E=eig(A):求矩阵A的全部特征值,构成向量E。
(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
25、排序sort

sort函数的调用格式:  

sort(X)   功能:返回对向量X中的元素按列升序排列的新向量。

[Y, I] = sort(A, dim, mode) 功能:对矩阵A的各列或各行重新排序,I记录Y中的元素在排序前A中位置,其中dim指明读A的列还是行进行排序。

若dim=1,则按列排序;若dim=2,则按行排序。mode为排序的方式,取值'ascend'为升序,'descend'为降序。

在主成分分析中,需要特征值从大到小排列,可以使用下列方式实现:

X = VDV^(-1);

所以可以这样

[V,D] = eig(X);

[Y,I] = sort(diag(D),'descend') % 降序,默认的是升序

V = V(:,I)
26,求和sum

B=sum(A) 对于矩阵A进行每列求和
B=sum(A,dim) 如果dim = 1 对于矩阵A进行每列求和
             如果dim = 2 对于矩阵A进行每行就和
B=sum(A(:))是对矩阵进行全矩阵数值求和。

27、求最大值max

C = max(A)
返回一个数组各不同维中的最大元素。
如果A是一个向量,max(A)返回A中的最大元素。
如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一行向量包含了每一列的最大元素。

C = max(A,[ ],dim)
返回A中有dim指定的维数范围中的最大值,1是对每列的数据求最大值,2是对每行的数据求最大值。

[val, loc] = max(A,[ ],dim)

返回A中有dim指定的维数范围中的最大值val及其位置loc,1是对每列的数据求最大值,2是对每行的数据求最大值。

28、find 函数

>> class1=2

class1 =

     2

>> class2=3

class2 =

     3

>> y=[1 1 1 2 2 2 2 4 4 4 4 4]

y =

  Columns 1 through 11

     1     1     1     2     2     2     2     4     4     4     4

  Column 12

     4

>> y==class1

ans =

  Columns 1 through 11

     0     0     0     1     1     1     1     0     0     0     0

  Column 12

     0

>> y==class2

ans =

  Columns 1 through 11

     0     0     0     0     0     0     0     0     0     0     0

  Column 12

     0

>> y==class1 | y==class2

ans =

  Columns 1 through 10

     0     0     0     1     1     1     1     0     0     0

  Columns 11 through 12

     0     0

>> find ( y==class1 | y==class2)

ans =RandIndex = randperm( length( a ) ); % 随即打乱数组索引

a = a( RandIndex ); % 用新的索引构造打乱后的数组

二维的数据打乱行序:

RandIndex = randperm( size( a,1 ) ); % 随机的行序

a1 = a1( RandIndex,: ); % 用新的索引构造打乱后的数组

     4     5     6     7

[row,col V] = find(X, ...)  查询满足一定条件的元素的行和列

row 返回满足条件的元素行的位置
col 返回满足条件的元素的列的位置
V   如果X是一个逻辑表达式,则返回一个逻辑数组,一般如果存在满足要求的元素,则返回一个单位列向量。如果不存在满足要求的元素,则返回一个空向量

29、打乱顺序

RandIndex = randperm( length( a ) ); % 随即打乱数组索引

a = a( RandIndex );   % 用新的索引构造打乱后的数组

二维的数据打乱行序:

RandIndex = randperm( size( a,1 ) );  % 随机的行序

a1 = a1( RandIndex,: );   % 用新的索引构造打乱后的数组

30、输出到文件中转行

matlab写入文件时如何换行,真是个麻烦问题?见下面一个例子就解决了,注意打开文件时的参数是'wt'

path='test.txt';

f=fopen(path,'wt');

fprintf(f,'%s\n','test1');

fprintf(f,'%s','test2');

fclose(f);
31、复数的运算

s11=0.761*exp(-151*pi*i/180)

s11 =

  -0.6656 - 0.3689i
需要前面的运算中没有定义 变量 i ,clear清除。

(1)表示

x1=-1+i%实部虚部形式

x2=sqrt(2)*exp(i*(3*pi/4))%复指数形式

(2)取实部、虚部
a=1+2i
shibu=real(a) %实部
xubu=imag(a) %虚部
(3)求复数的模
求复数的模,应用abs()

(4)求共轭复数

conj()

32、MATLAB并行计算   parallel
如果是四核的,进行多核运算前:
matlabpool local 4;

多核运算完以后,要关闭多核运算:
matlabpool close;

33、& 与 &&
&   按位与: 
                 15二进制: (0000 1111) 
                  127二进制: (1111 1111) 

                   按位与自然就是(0000 1111)=15
&&逻辑与:  即为and;
                      具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: