MATLAB 新手上路

%%%%%%2015-6-19%%%%%%%%%%%%%

写在2015端午节时

matlab逗号的:1可以作为数组元素的分隔符;2申明函数变量的间隔符

今天遇到 int([noc(:),nol(:)]);%冒号,逗号,中括号,小括号的混用,自己还看了半天才会过神。

noc(:) 大小30*17,nol(:)大小 30*17;

那么【(510),(510)】;

size([noc(:),nol(:)]) 

>> ans=510  2

matlab还是要天天练,paper也还是要天天看。

%%%%%%%%%%%%%%%%%%%%%%%

在编写matlab代码前,一般从以下思路出发,会快速高效的得到很好的结果,

1.清晰陈述所要解决的问题;

2.确定程序所需的输入量和所产生的输出量;

3.为程序设计算法;

4.将算法转化为MATLAB语句;

5.调试MATLAB程序


以下是个人在初始学习时遇到的一些函数的问题的note:


A.数值和字符串

>>in1=input('enter data:')

Enter data:1.23  %把数值1.23存储到in1中

>>in2=input('enter data:','s')

Enter data:1.23 %把字符创1.23存储到in1中


B.多维数组的创建

  • 自定义数组如下:

>>c(:,:,1)=[1,2,3;4,5,6];

>>c1(:,:,2)=[7,8,9;10,11,12];
>>

c(:,:,1)=1 2 3

              4 5 6

c1(:,:,1)=0 0 0

                0 0 0

c1(:,:,2)=7    8    9

              10 11 12
  • 此外,还可以用size( )对数组进行描述

>> c(:,:,1)=[1,2,3;4,5,6]

c =

     1     2     3
     4     5     6

>> size(c)

ans =

     2     3

  • 子数组的描述,即数组中某一部分的元素值:

>> c(1,:)

ans =

     1     2     3

>> c(:,2)

ans =

     2
     5

  • 用 冒号 “:”对数组进行操作,它将数组转化为一维列向量.

>> X=c(:);disp(X)
     1
     4
     2
     5
     3
     6



C.MATLAB以列主导顺序分配数组中的元素:即,内存先分配第一列的元素,然后第二列,第三列,......直到所有列被分配完。


D.画图

1.plot函数的x y均用线性尺度,一般描述为plot(x,y,'propertyName',value,...);

2.semilog函数x轴用对数尺度,y轴将用线性尺度;

3.Semiloge函数x轴用线性尺度,y轴将用对数尺度;

4.loglog函数两坐标都用对数尺度;

5.subplot(m,n,p) %创建m*n个子图像,p是当前图像.eg: subplot(2,3,4);创建6个子图像,subplot 4是当前子图像.


E.MATLAB中结构体使用方法

http://blog.csdn.net/littlestonelj/article/details/7564711


F.一些常用函数表达式的意思集锦

1. cumsum()  :若未给特殊说明,则数组里的向量按列相加;

    cumsum(X,1):X按列相加;

    cumsum(X,2):X按行相加;

Example: If X = [0 1 2
                           3 4 5]
 
    then cumsum(X,1) is [0 1 2  and cumsum(X,2) is [0 1  3
                                           3 5 7]                     3                  7 12]

2.diff()函数

diff(x):若x是向量,则返回值为[x(2)-x(1)  x(3)-x(2)  x(4)-x(3) ...x(n)-x(n-1)];若x是矩阵,则返回值为[x(2:n,:)-x(1:n-1,:)],这里注意虽然是行行相减,但是返回值按列计算并存储。

diff(x,N,dim) 沿着维数dim做N次减法。dim=1,按行相减。dim=2,按列相减法。N与X 的大小相关,若N>size(N,dim)则返回0。

Example: If X = [0 1 2
                           3 4 5]

then diff(x,1)=[3 3 3] and diff(x,2)=[0 0]  % diff(x,2)对diff(x,1)的结果进一步操作,做列相减;

diff(x,1,1)=[3 3 3]   % 沿着行做一次减法;

and diff(x,1,2)=[1 1;1 1]  %沿着列做一次减法;

and diff(x,2,1)=[  ]   %对diff(x,1,1)=[3 3 3] 继续做行相减,返回 empty值;

and diff(x,2,2)=[0 0]%对diff(x,1,2)=[1 1;1 1] 继续做列相减法 ,有返回值。

G.对角矩阵的创建

>>X=[2;3;4;5;6;7;8;9]

ans=2

         3

         4

         5

         6

         7

         8

         9

>>A=diag(X)

  A=  2 0 0 0 0 0 0 0

         0 3 0 0 0 0 0 0

         0 0 4 0 0 0 0 0

         0 0 0 5 0 0 0 0

         0 0 0 0 6 0 0 0

         0 0 0 0 0 7 0 0

         0 0 0 0 0 0 8 0

         0 0 0 0 0 0 0 9

>>B=diag(A)

B=2

     3

     4

     5

     6

     7

     8

     9

注意:diag(向量):会根据向量值构造一个对角矩阵;

          diag(矩阵):提取矩阵对角线上的元素组成一个向量。


H.MATLAB 快捷键         ctrl+f   弹出“Find&Replace”对话框,方便查找上下文出现的相同的变量。类似于word下的查找键。

I .善于运用 Variable Editor      即用变量编辑器查看结构体的设置以及变量存储方式又或是存储的变量的值

J.一些MATLAB错误句子总结

Error: An array for multiple LHS assignment cannot contain numeric value

解析:LHS assignment =left hand side assignment =等式左边毋须输入这么多值(等式左边不需要这么多值的输入);

K.函数seed()的作用

采用seed(),如rand('seed',0),则每次运行rand 产生的随机数都是一样的;如果没有设置seed,每次运行rand或randn产生的随机数都不一样;

>>rand(1,5)

ans =

    0.8147    0.9058    0.1270    0.9134    0.6324

>> rand(1,5)

ans =

    0.0975    0.2785    0.5469    0.9575    0.9649

>>rand('seed',1);
rand(1,5)

ans =

    0.5129    0.4605    0.3504    0.0950    0.4337

>> rand('seed',1);rand(1,5)

ans =

    0.5129    0.4605    0.3504    0.0950    0.4337


L.常用函数解析(针对个人遇到的常用函数)

  • [M,c]=normalize(A):将输入A矩阵归一化,使所有的输入组成的一个向量的和为1.M 是A归一化后的新矩阵(变体),c为常数;
  • [x,y]=meshgrid(x,y)  %将向量x ,y转为行列相同的数组X 和 Y,它用以估计两数组之间的函数关系和3D绘图.x先做转置变换,行数转化为新矩阵的列数,新的行数以y为标注,y的行数仍为矩阵的行数,但列数发生改变。简言之,就是新矩阵的SIZE=y的行数*x的列数。
    >> x=rand(2,1)
    x =

        0.7092
        0.1160

    >> y=rand(3,1)

    y =

        0.0781
        0.3693
        0.0336

    >> [X,Y]=meshgrid(x,y)

    X =

        0.7092    0.1160
        0.7092    0.1160
        0.7092    0.1160


    Y =

        0.0781    0.0781
        0.3693    0.3693
        0.0336    0.0336
  • ‘end函数’。当用到一个函数的下标时,end函数将返回下标的最大值。

    arr1=[1 2 3 4;5 6 7 8;9 10 11 12]  那么表达式arr1(2:end,2:end)将会返回【6 7 8

                                                                                                                                         10 11 12】

    第一个end返回3.第二个end返回4.

  • repmat(A,M,N)  %不管A为矩阵,数组或向量, 将A 看作一个整体,复制A 变成 一个M*N的大矩阵。
  1. >>A=magic(2);
  1. B=repmat(A,2,3);
  2. B= 1     3     1     3     1     3
  3.      4     2     4     2     4     2
         1     3     1     3     1     3
         4     2     4     2     4     2        %B=[A A A;A A A];

M.数据保存格式

最常用的命令形式:save filename var1 var2 var3

如果保存数据需要在其他程序中也能应用的话,必须用-ascii进行说明,这样数据值被当做ASCII字符串被储存进文档中。

>> x=[1.23  3.14  6.28 ;-5.17 7.00 0];
          save x.dat x -ascii
>> whos
  Name      Size            Bytes  Class     Attributes

  x         2x3                48  double

最后,推荐一个较好的学习MATLAB 的博客(作者来自上海 交 大--- 白途思):http://www.cnblogs.com/begtostudy/category/257766.html







你可能感兴趣的:(MATLAB 新手上路)