由于课程实验需要学习使用了MATLAB,在此记录一下MATLAB的基本操作和命令,供参考与查阅。

  学习过程中的资料也链接如下:

  MATLAB矩阵运算:https://wenku.baidu.com/view/82b2d36fb84ae45c3b358ca0.html

  MATLAB常用命令:https://wenku.baidu.com/view/a08c425f001ca300a6c30c22590102020740f2a7.html

基础操作命令

 help 命令名  //查询命令/函数的用法
  clc      //清除命令行窗口
  clf      //清除图像
  clear (all) //清除内存变量和函数
  who(s)    //列出内存变量 s 的信息
  dir      //显示当前目录下的文件
  cd path   //切换至path指定的目录
  save(filename,vars...)  //将 vars 指定的变量存放在 filename.mat 文件中
  load(filename,vars...)  //将指定的变量加载至内存中
  get( var ) //返回句柄 var 对应的结构体的信息

  tips:

  (1)通过 cd 命令转换至需要执行操作的目录,从而可以直接键入文件名而不是完整路径来处理文件。也可通过图形界面进行转换;

  (2)MATLAB命令的尾部添加 ';',则命令执行过后不会在命令窗口显示的输出命令执行的结果(并不像一般的程序语言将 ; 作为语句结束的标志);

  (3)通过 clc 清空命令行窗口,使用 clear 来清除某个变量;

  (4) MATLAB 显示某些结构体时,只会给出其句柄,如 fopen 只返回一个数字,而不是具体的句柄的可见信息结构体,可以通过 get( handle ) 命令获得 handle 所对应的句柄的结构体的信息。 

元素类型

  MATLAB中的元素类型包括整型、浮点型、字符型、逻辑型和函数句柄等常用类型。

  整型:包括有符号类型和无符号类型。有符号类型包括 int8、int16、int32、int64。无符号类型包括 uint8、uint16、uint32、uint64。上述类型后面数字代表该类型占用的bit数,占用的 bit 数越多,则能表示的范围越大;

  浮点型:包括单精度浮点型 single 和双精度浮点型 double;

  字符型:MATLAB中的字符和字符串均使用 ‘ ’ 进行标注,每个元素占用两个字节;

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

  tips:

  (1)对于变量的类型,可以通过命令 who 或 whos 查看其类型;

  (2)可以通过 类型名(变量名) 的方式对变量/标量类型进行类型转换,如 int8( n )将变量 n 转换为类型 int8;

  (3)只有同类型的数据或其他类型与双精度标量之间可以进行运算; 

矩阵基础及操作

  MATLAB中数据元素均以矩阵形式存在,如常量可视为 1×1规格的矩阵,n维向量可以视为 1×n的矩阵。故而其中的运算操作与矩阵运算的性质一致。

  同样,MATLAB中的变量均可以视为矩阵类型,但矩阵的元素有各自的类型。如下A = [ 1 2 3] ,A为矩阵类型变量,而其中的元素为int8类型。

  MATLAB中的变量不需要先定义即可使用,若没有指明被赋值的变量,如上述的A,则矩阵被赋值给默认的变量ans。   

矩阵运算

  默认情况下算数运算 + 、 - 、 *、/ 遵循矩阵运算的规则。可以使用点乘( .* )与点除( ./ )运算,运算规则为对应位置上元素进行乘法操作,而不是常规的矩阵乘/除。

  如对于矩阵 A = { 1 2 ; 3  4 },和B = { 1 2 ; 3 4 },A*B = { 7 10 ; 15 22 },而 A .* B = { 1 4 ; 9 16 }。

矩阵特征

  (1)矩阵元素在 " [ " 和 " ] "之间;

  (2)同行元素之间使用空格或 " , " 隔开,不同行元素之间使用回车符或 " ; " 隔开; 

  (3)MATLAB中矩阵元素以列优先的顺序进行访问和存储;

建立矩阵

  (1)直接输入

  根据上述矩阵特征直接从键盘输入矩阵,如 A = [ 1 2 3 ; 4 5 6 ; 7 8 9] 建立了一个 3×3 的矩阵A。

  利用冒号表达式 a:b:c 建立一个行向量,其中a为初始值,b为递加量,c为终结值(或不需b,默认以1递增)。如 A = 1:1:3 与 A = 1:3均建立一个矩阵A = [1 2 3]

  使用 linespace 函数,用法为 linespace(a,b,c),其作用与冒号表达式相同。

  (2)利用MATLAB提供的函数,以下函数均返回一个矩阵,可以指定一个变量存储

  常用的基础矩阵:

  zeros(m,n)   //m×n的全零矩阵(参数取值可以有多个,一个参数 n 时,生成 n 阶方阵。下同)

  eye(n)     //n阶单位矩阵

  ones(m,n)   //m×n的全 1 矩阵

  常用的矩阵操作:

  reshape(A,m,n)    //将矩阵A重排列为m×n的矩阵(列优先)

  inv(A)         //逆矩阵

  ,A           //转置矩阵

  常用的随机矩阵:

   rand(m,n)       //产生一个元素在0-1之间且满足正态分布的m×n随机矩阵,单个参数时产生方阵

  randn(m,n)      //产生一个元素均值为0,方差为1的正态分布的m×n随机矩阵,单个参数时产生方阵

  randi(max,m,n)   //产生一个元素值为0 - max-1的m×n随机整数矩阵

  对矩阵的翻转操作(较常用于图像操作):

    fliplr(A)          //矩阵元素左右翻转
flipud(A) //矩阵元素上下翻转
rot90(A,n) //矩阵元素逆时针旋转90°的n倍,n是可选参数,默认为1

  元素取整操作

  fix(X)                //向零取整
  floor(X)   //向小取整
  round(X)    //四舍五入
  ceil(X) //向大取整

获得矩阵行列数

  [ row  col ] = size(A)     //获得二维矩阵 A 的行数和列数,返回值同样为矩阵形式

访问矩阵元素的方式

  访问单个矩阵元素:(  Matlab 的索引从 1 开始 )

  索引方式:A( n )           //取矩阵的第 n 个元素(MATLAB中以列序优先存储)

  坐标方式:A( i , j )        //取矩阵 i 行 j 列的元素

  访问子矩阵:

  使用 ':' 来指定需要访问的行数和列数。

  A( i , : )               //取矩阵 i 行所有的元素

  A( i : j , m : n)          //取矩阵 i 到 j 行上的 m 到 n 列的元素(返回的数据包括 j 行的元素)

   注意:通过 [ ] 来定义矩阵,通过 ( )来访问矩阵元素。

脚本程序

  脚本是一系列MALTAB语句的集合,MATLAB脚本加入了循环、判断等控制结构,是一种简单的程序设计语言·。

  脚本存放在后缀为 .m 的脚本文件中。对于名为 file1.m 的脚本文件(当前目录下),通过控制台键入 file1 按回车键,会执行其中包含的语句。也可以在编辑窗口选中部分语句,通过右键 -> 运行 或 F9运行脚本中的部分语句。脚本的运行结果相当于将脚本中的每条语句分别在命令行中键入执行的结果。

注释

  MATLAB中添加注释的方法主要有两种:

  (1)通过符号 % ,符号 % 会将该符号所在行作为注释(仅将出现在 % 后面的命令或字符视为注释) ;

  (2)选中需要注释的部分,通过快捷键 Ctrl + R 添加注释,通过快捷键 Ctrl + T 取消注释;

循环结构

  脚本中的循环结构以关键字 for、while等关键字开始,以end作为结束标志

  for循环

  for 表达式                    //如形如 循环变量 = 矩阵表达式 的结构,将矩阵表达式的中的矩阵元素依次赋值给循环变量,执行循环语句
    循环语句            //合法的MATLAB的语句集合
  end                //循环结束的标志

  while循环

  while 表示式               //表达式结果为真时,执行循环语句
    循环语句          //合法的MATLAB的语句集合
  end              //循环结束的标志

  可以使用continue来跳过本次循环(进行下一次循环),break来跳出循环语句的执行。

条件判断

  条件判断语句使用 if / switch 等作为开始关键字,使用 end 作为结束关键字。

  if语句

  if 逻辑表达式
    执行语句
  end

  对于多重条件判断,使用 elseif 关键字。

    if 逻辑表达式
执行语句
elseif 逻辑表达式
执行语句
end

  switch语句

  switch  switch_expression
    case  case_expression    //不同于很多程序设计语言,case后面不需要加':'
        执行语句1
    case  case_expression    //MATLAB中switch结构执行一个分支后会直接跳出switch不再顺序执行,故不需要额外的break语句
        执行语句2
      ...
    otherwise
        执行语句
  end 

  以上逻辑表达式中,可以使用关系运算符,包括 < (小于), <=(小于等于) , >(大于) , >=(大于等于) , ~=(不等于)等;逻辑运算符,包括 &(与),|(或),~(非)等。

函数

  MATLAB中函数为执行某一特定功能的MATLAB语句的集合,函数同样存储在后缀为 .m 的文件中。

  函数与脚本的主要区别如下:

  (1)函数可以有输入参数和返回值,但脚本没有;

  (2)脚本中的变量是是存放在MATLAB基本工作空间的,而函数中的变量存放在函数工作空间(除特别声明)。前者在脚本运行结束后仍然存在,可通过clear清除,后者在函数执行结束后则失去空间。

函数定义

  函数定义借助关键字 function

  function 返回变量 = function_name(函数参数)
    函数体    //函数体为类似于脚本文件的MATLAB的执行语句集合

  简单的重排矩阵的函数:reshape_matrix

  function  newMatrix = reshape_matrix(A , row , col )

  newMatrix = reshape( A , row, col );

  可以通过 A = reshape_matrix( A , row , col )来调用函数。

静态变量与全局变量 

  MATLAB中的静态变量与全局变量作用效果略有区别。

特殊数据结构

字符串

  MATLAB中的字符串常量通过 ' ' 进行标志。字符串变量同样相当于矩阵,可以视为一个行向量,每个字符都是行向量的元素。通过上述矩阵元素的访问方法访问。

  

结构体变量

  结构体变量 = struct(元素名1,元素值1,元素名2,元素值2,...)

  结构体变量的成员通过 结构体变量 . 元素名 进行访问。这里元素名作为字符串标志符,需要用 ' ' 标志。

  

单元型变量

  可视为多种不同数据集合在一起的 '多维数组'.借助 { } 声明。

  

  可以看到A包含了不同的成员类型,对A成员类型的引用同样借助{},如访问第一个成员,则使用A{1}即可。

其他 

绘制图像

  plot( x , y ,option)    //x为向量时,则以x为横坐标,y中元素为纵坐标显示,若x与y为同维矩阵,则将x和y对应位置上的元素作为横纵坐标绘制图像
  subplot(m,n,p)        //绘制 m×n个子图像,p为当前使用的子图区域
  imshow(X)           //显示图像的函数,X为读入的矩阵值
  title('name')        //标识图像的名字
  xlabel('string')      //标识横坐标
  text(x,y,options)     //在(x,y)处标志图像说明,用于图像上一点的描述
  axis on/off //开启/关闭坐标轴
  hold on           //保持现有的图像,可继续绘制另一个图形
  hold off           //重置hold状态至默认行为,即再次当用plot时,会清空原有的图像和其他状态

  最后两个命令用于将多个图像绘制在一个界面上。hold on相当于开启保持状态,后续绘制图像时不会清空前面的图像,而hold off 关闭这个状态。

文件操作

  打开文件

  fileID = fopen( filename , permission) //以permission权限打开文件(可选),返回与文件对应的文件标识符,文件标识符为整数且值大于或等于3.若不能打开文件,则返回-1.

  fopen( 'all')            //返回一个文件标识符组成的矩阵

  filename = fopen( fileID)      //以fileID调用fopen函数时,返回文件路径名

  [ fileID , errmsg] = fopen(xx)     //errmsg为字符串类型,用来返回可能的错误信息

  读取文件

  A = fread( fileID,sizeA,precision)   //从fileID指定的文件中读取数据,填入A矩阵中,sizeA指定A的维数,precision指定解释输入的方式

                    //precision默认为 'uint8=>double' ,表示读入的值为uint8类型,并将结果以double类型输出

  [ A , msg_len ] = fread(xxx)      //meg_len返回读入矩阵A中的元素个数

图像操作

  A = imread( filename,format)      //filename指定图片路径名,format指定文件格式(系统可自行识别),用于读取图像。对于RGB图像,读取获得的图像为 H * W * C 的数据格式

  imwrite(A,filename,format)       //filename指定图像名称,A为待保存矩阵,format为保存格式,用于保存图像。

  对于RGB图像,可以提取特定的色彩分量

  

  R = A( : , : , 1)             //得到RGB图像的红色分量

  图像分量合并

  A = cat(dim,A,B,...)           //将矩阵A、B、...按照dim指定的维数进行连接

  I = cat( 3 , A , B )             //第1、2维长度为A、B矩阵的长度,第3维长度为用于矩阵连接的矩阵的个数,这里为2

                         //A[ 0 , 0 , 0]即表示第0行 第0列 矩阵A的元素

  图像转换:

  Image = im2bw(X , level)    //根据level将彩色图像转换为二值图像,将 亮度(luninance)>level 的像素值赋值为1,其余为0.

  Image = rgb2gray( X )      //将图像 X 转换为灰度图像 

  Image = rgb2ycbcr( X )       //RGB转YCbCr

  Image = ycbcr2rgb( X )       //YCbCr转RGB

  

  图像采样

  image = imresize( A , scalar )      //返回一个大小为原图像 scalar 倍的采样图像

  image = imresize( A , scalar , 'bicubic')  //指定进行采样的方法,可以使用包括 'bicubic','nearest','bilinear' 等方法   

  分块操作

  blkproc(A , [m,n] , fun , p1 , p2 , ...)  //A为操作对象,[m,n]规定分块的子矩阵的长度,fun为对子矩阵进行的函数操作,p1、p2等为fun函数使用的参数

生成伪随机数

  伪随机数是以某个特定种子为起点产生的随机数序列。在种子值一定时,随机数函数在每次程序运行时产生的随机数序列总是固定的,故称为伪随机。

  较新版本的MATLAB可以通过函数 rng 设置伪随机数生成的种子,再使用随机数生成函数如randi等生成随机数序列。如 rng(8),则后续的randi函数生成以8为种子的伪随机序列。

  较早版本的MATLAB中,设置随机数种子的操作借助rand等函数实现。

  rand('seed' , seed_value)

  randn('seed' , seed_value)    //通过seed_value来设置随机数种子

  rand('state' , state_value)

  randn('state',state_value)      //通过stata_value来设置随机数种子

  上述写均能设置随机数种子,不过 'seed' 和 'state'字段调用了不同的随机数生成器(生成随机数的算法不同)。

misc

  1.在 Matlab 脚本中引用其他目录下的脚本等

  Matlab 脚本默认只能调用与脚本同一目录下的其他脚本,为了使用其他不同目录结构下的脚本功能,可以在脚本开始处通过 addpath 命令添加欲使用的脚本的目录路径,进而进行调用。

    addpath /path/to/folder        //添加欲调用的其他脚本的目录

  2.批量读取图片的常用做法

    filepaths = dir( fullfile( folder , '*.png') );    

    for  i  =   : length( filepaths )
image = imread( fullfile( folder , filepaths(i).name) );
...other operations...

MATLAB基础指令操作的更多相关文章

  1. Linux基础(03)、常用基础指令和操作

    目录 一.什么是Linux 二.常用基础指令 2.1.vi编辑 2.2.Linux文件类型 2.3.常用指令:增.删.改.查.其他 三.Linux的目录和权限 3.1.目录 3.2.权限 3.3.修改 ...

  2. Matlab - 基础知识

    Matlab R2016a完全自学一本通 记在前面: (1)函数中:dim=1 按列:dim=2 按行 (2)这本书很垃圾,不建议买. (3)在数据库连接中,用两个单引号表示字符串,千万不能用双引号 ...

  3. 信号与系统实验序章0——MATLAB基础命令入门

    本次开启新的系列,关于用Matlab实现常见信号和函数的生成和变换. 同时如果没有MATLAB基础,那么可以跟着本文一步一步学习Matlab的相关操作,本文旨在记录在信号与系统课程中MATLAB的学习 ...

  4. 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)

    博主快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 本人能力有限,文中难免有错误和纰漏之处,请大佬们不吝赐教 创作不易,如果本文帮到了您: 请帮忙点个赞

  5. matlab基础教程——根据Andrew Ng的machine learning整理

    matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...

  6. Matlab基础

    基本运算: 一,矩阵的生成 clc ; clear all; close all; 1.直接输入 A = [ 1 ,2 ,3,4;2,3,4,5;3,4,5,6] A = 1 2 3 4 2 3 4 ...

  7. Linux基础指令

    Linux基础指令 只写了最简单的一些文件操作,基本没有带参数 查看当前目录 pwd 跳转到某路径 cd 查看当前目录下的文件 ls ls -l // -l 查看详细信息 打开当前所在文件夹 open ...

  8. Vue的介绍及基础指令

    一.什么是Vue Vue.js是一个渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 为什么要学习Vue 三 ...

  9. SIMD指令集——一条指令操作多个数,SSE,AVX都是,例如:乘累加,Shuffle等

    SIMD指令集 from:https://zhuanlan.zhihu.com/p/31271788 SIMD,即Single Instruction, Multiple Data,一条指令操作多个数 ...

随机推荐

  1. ES6学习准备

    ES6学习准备 选择运行环境 ES6的语法,nodeJs.浏览器不一定都支持,不同版本的支持情况不一样.在学习过程中,如何确定是自己写的代码有问题,还是运行环境不支持呢? 首先,浏览器端一般支持的特性 ...

  2. PostgreSQL Entity Framework 自动迁移

    1.依次添加NuGet包 EntityFramework.Npgsql.EntityFramework6.Npgsql,会自动生成一些配置文件,不过缺少数据库驱动的配置节点: <system.d ...

  3. 面向对象 OOP

    [面向对象编程OOP]   1 语言的分类 面向机器 :汇编语言 面向过程 :c语言 面向对象 :c++ Java PHP等   2 面向过程与面向对象 面向过程:专注于如何去解决一个问题的过程,编程 ...

  4. Java - 用builder代替构造器

    静态工厂和够构造器有一个共同的局限性:遇到大量的参数时无法很好的扩展. 先说说构造器. 其实field不多时重叠构造器(telescoping constructor)是个不错的方法,易于编写也易于调 ...

  5. 阿里云服务器(ECS)购买及配置总结

    云服务器是一种简单高效.安全可靠.处理能力可弹性伸缩的计算服务.其管理方式比物理服务器更简单高效.用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器. 目前比较知名的与服务器提供商有:阿里云.百 ...

  6. Tidb 离线Ansible方式部署实践

    1.最近浏览到一个比较新的分布式数据库Tidb,开源看起来比较牛的样子,一时手痒就动手试试部署 2.参考官方 Ansible 离线方式部署 :https://pingcap.com/docs-cn/o ...

  7. 模仿jquery的data

    jquery中,有这个方法 var obj = {}; $.data(obj,'name','jake'); console.info($.data(obj,'name')); console.inf ...

  8. JavaScript 二维数组排列组合

    <html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...

  9. 前端学习之路之CSS (一)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 简介:    CSS 指层叠样式表 (Cascading Style Sheets)    样式定义如何显示 HT ...

  10. table中的td自动换行

    总有那么几个时候会觉得,table的td不能自适应换行真坑,凭什么只能用tr来换行,经常数据都是连在一起的呀,你叫我怎么把它拆分放到tr里...... 那能不能用ul和li来替换?可以是可以,不过有时 ...