1章 Matlab概述
  1. matlabMathworks公司推出的一套高性能数值计算和可视化软件,集数值分析,矩阵运算,信号处理和图形显示与一体。同时Matlab也是一种编程语言,被称为第四代编程语言。
    全称:Matrix  Laboratory(矩阵实验室),matlab出现在20世纪70年代,由Fortran编写,到了90年代,其内核由C语言编写.

  2. Matlab常见的交互界面
    Command  window(命令窗口):在这个窗口中,可以输入各种matlab命令,函数和表达式。所有操作和运算的结果也会在该窗口中出现(图形结果会单独显示)
    Command History(历史命令窗口):记录了用户已经操作过的各种命令,函数和表达式。主要功能:方便用户回忆之前的操作,也可以方便用户对这些历史信息进行编辑(如复制,充运行等)
    Current Folder(当前目录窗口):在这个窗口中,可以设置当前目录,展示目录中的M文件或者MAT文件等。
    Workspace(工作空间):在这个窗口中,可以查看工作空间中所有变量的类别,名称,大小等。可以在这个窗口中观察,编辑和提取这些变量。

  3. 默认情况下,命令窗口的数值结果都以format short g 的格式结果显示,这只是matlab数值结果的显示方式,而不是数值计算的精度,在实际存储和计算过程中,使用的都是双精度。

  4. 命令窗口标点符号
    ●空格,逗号”,”1.输入变量的间隔  2.数组/矩阵元素的分隔符。
    ●分号”;”1.命令的结束表示,同时不显示结果。2.数组/矩阵元素的行间分隔符。
    ●冒号”:” 1.用于生成一维数值数组,表示一维数组的全部元素或者多维数值某一维的全部元素。详细用法见链接
    其他见链接

  5. Matlab变量命名规则与C++/C#中差不多,由字母,数字,下划线组成。但matlab中变量名第一个字符必须是英文字符C++/C#中可以是英文和下划线。

  6. Matlab中预定义变量:
    ans:
    计算结果的默认名称
    eps:
    计算机的零阈值
    inf(Inf):
    无穷大,-Inf为负无穷大
    pi:
    圆周率
    NaN(nan):
    表示结果或变量不是数值,无法定义的一个数
    虽然matlab没有限制用户使用预定义变量,即可以再matlab的任何文件中将这些预定义变量重新定义,复制。但建议,不要使用matlab预先定义的变量名称。

  7. Matlab的搜索路径(沿这个路径查找相应的文件,函数或具体数据)
    搜索过程:如用户在命令窗口中输入命令myMatlab
              
    ●是否是内存中的变量
              
    ●是否是内置函数

          ●是否是当前目录下的M文件
          
●是否是搜索路径下其他M文件
搜索路径的设置方法:
          
●输入pathtool命令或path命令

          matlab界面HOME->set path

使用path修改的信息只在当前matlab环境中有效,重启matlab后,就无效了。

  1. 查看变量:1.命令whos  2.workspace窗口

  2. 删除变量:1.命令clear A; 2.workspace窗口

  3. .mat文件是matlab数据文件,保存工作空间的变量。

  4. Matlab区分大小写。

  5. Matlab中的变量不用声明,不用定义,拿来即用。

  6. 输入一条命令,回车,就表示一条命令结束。

  7. Matlab是解释性语言,在存储结构和计算语句完全相同的情况下,matlab效率比C++慢。

1.1 M文件

M文件分为1.M脚本文件 2.M函数文件

M文件必须在搜索路径中才能运行。

1.1.1  M 脚本文件

1.M脚本文件由一组matlab指令构成,其中的语句可以访问matlab工作空间中的所有变量与数据。脚本文件中所有的变量都是全局的,可以被其他脚本文件与函数文件访问,这些全局变量一直保存在内存中。脚本文件中的语句与直接在命令窗口中输入的命令是一样的,只不过封装起来了。

2.M脚本文件执行是直接输入脚本文件名就可以了。

1.1.2 M函数文件

格式:

         funtion[输出变量1,输出变量2…]=函数名(输入变量)

                          语句;

1.M函数文件的文件名必须与出现在文件第一行的函数名相同,系统根据文件名调用该函数

2.M函数文件的组成部分:

组成部分

描述

函数定义行

定义函数名和输入输出变量

H1

描述函数功能,可以用lookfor命令搜索到

帮助文本(帮助文档)

跟在H1行后,help命令调出,详细描述函数功能

函数体

实现函数功能的代码

注释


function [ output_args ] = myfun( x,y )


H1

H1后的帮助信息

%caculate

%  if y does not exist,return x

% if y exists,return sqrt(x.^2+y.^2)

if(~exist('y','var'))

    output_args=x;%y不存在

else

    output_args=sqrt(x.^2+y.^2);

 

end

命令窗口:

>> myfun(9)

 

ans =

 

     9

 

>> myfun(3,4)

 

ans =

 

     5

>> help myfun  %帮助信息

 caculate

   if y does not exist,return x

  if y exists,return sqrt(x.^2+y.^2)

函数体中的语句如果不想输出结果,一般最后加上”;”

3.函数文件的变量时局部变量,运行期间有效,运行完就自动被清除,而脚本文件的变量时全局的。

4.M函数文件能够被其他M函数调用或被其他M脚本文件调用。

 

 


2  Matlab语言基础

 

  1. MatlabC开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。

关于数组

  1. Matlab的变量和运算是以数组(矩阵)为基础
    数组分为
             
    ●向量:一维数组
             
    ●矩阵:二维/多维数组
             
    ●标量:11列数组

  2. 数组的创建:1.”[]”操作符直接创建   2.用函数创建       

  3. 数组元素的访问(matlab中数组所有下标都从1开始)
    而且matlab中,下标都是从1开始的
    3中方式
             
    ●全下标:a(m,n…)—m行,第n
             
    ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。
             
    ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。

如:

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

>> a(2,1)          %2行第1

 

ans =

 

     4

 

>> a(2)              %2个元素

 

ans =


该维数中的第几

  

     4

 

>> a(2,[1,3])   %2行的第1和第3列元素

 

ans =

 

     4     6

>> a(:,2)    %2

 

ans =

 

     2

     5

 

>> a(2,:)   %2

 

ans =

 

     4     5     6

 

>> a([1,2],[1,3])  %1,2行中的第1,3行的数据(就是交点的位置的数据)

 

ans =

 

     1     3

     4     6

 

>> a(2,2:end)           %2行中第2列到最后

 

ans =

 

     5     6

2.1数据类型

2.1.1整型
整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) intmin(‘int8’)返回int8所能表示的最大值127-128.

2.1.2浮点型
浮点型包括单精度single和双精度浮点数double.realmax(‘double’)realmax(‘single’)分别返回两者能表示的最大值。
常数数字默认类型是double
>>class(pi)
ans=double
>>class(2)
ans=double

2.1.3字符型
1
string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。
2
、字符串常用操作:

  • 字符串与数值的互换:str2num,num2str
    a=str2num(‘1234’)
    结果为a=1234

  • 获取字符ASCII值:double函数或abs()函数
    double(‘a’)
    输出97

  • ASCII转为字符输出:char()
    char(97)
    则输出ans=a

  • eval(‘t=1’);’t=1’作为命令执行,结果是将1赋值为t

2.1.4逻辑型

逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。

2.1.5结构体(类似于C语言中的结构体)

  • 创建的两种方式:1.直接创建  2.利用struct函数创建

例如:

第一种:

>> book.name='matlab';

>> book.price=20;

>> book.pubtime='2011';

>> book

 

book =

 


字段

字段所对应的值

       name: 'matlab'

      price: 20

    pubtime: '2011'

第二种:

>> book2=struct('name','matlab','price',20,'pubtime','2011');

>> book2

 

book2 =

 

       name: 'matlab'

      price: 20

    pubtime: '2011'

  • 对结构体中字段的访问用操作符”.”

创建结构体数组
for i=1:10

    books2(i).name=strcat('book',num2str(i));

    books2(i).price=20+i;

    books2(i).pubtime='2011';

end

  •  

2.1.6元胞数组(类似于C#中非泛型集合)

元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。

2.1.7函数句柄(取函数地址)

声明:1.’@’符号直接声明

           2.str2func函数声明

  • 函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。
    >>ha=@sum;
    >>hb=str2func(‘sum’);
    >>functions(ha)       %
    函数句柄包含的信息
             ans=
                      function:’sum’
                      type:’simple’
                      file:’’

  • 函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。 

  • 使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。

  • 函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式
    声明方法:变量名=@(输入参数列表)函数表达式
    >>hd=@(x,y)x.^2+y.^2;

2.1  matlab运算符

2.1.1 算术运算符

分为矩阵的运算符和数组的运算符两大类

其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算

  • 矩阵运算符

1-:加减  2*:矩阵相乘  3/:相除

4\:矩阵左除,左边为除数  5^:矩阵的乘方  6.’ :转置

  • 数组运算中(点运算)
    1
    .*:对应元素相乘  2.^:对应元素乘方  3./:对应元素相除   4.\:对应元素左除
    标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。

2.2  matlab流程控制语句

注意:不要忘了最后的end

1if表达式
         
语句;

   end

2if 表达式
          
语句1

   else

          语句2

   end

3switch 表达式

                  Case 表达式1

                          语句1

                  Case 表达式2

                          语句2
                  …

                  Otherwise

                          语句n

  end

4、★
  for  i=
表达式

                  语句

   end
//
能够遍历表达式中所有的元素
   
如:for i={‘abc’,’xyz’}  %i为元胞数组

                          disp(i{1});

        end

                  输出:abc

                            xyz

5while 表达式

                  语句

   end


3  文件I/O

1MAT格式文件是matlab数据存储的标准格式

load/save

load/save命令主要用于MAT格式或以空格为分隔符的文本文件。

语法

load(filename,variables)

save(filename,variables)

>>save  abc.mat  a   b     %将变量a,b保存在abc.mat

>>load  abc.mat  %加载文件