MATLAB变量
序言
在Matlab中,变量名由A~Z、a~z、数字和下划线组成,且变量的第一个字符必须是字母. 尽管变量名可以是任意长度, 但是Matlab只识别名称的前N=namelengthmax个字符, 这里namelengthmax函数给出Matlab所能考虑的最大变量名长度. Matlab是区分大小写的,如a和A是不同的两个变量,Matlab自带的命令通常都是由小写字母组成,例如abs(A)是计算出A的绝对值.
Matlab中的语法不同于Java、C,其变量的定义和创建可以直接通过赋值来实现,而不需要单独声明,也不需要指定其数据类型. 如果需要使用一个矩阵,可以直接给其元素赋值,不需要指定它的具体维度.
正文
变量赋值
Matlab的基本数据结构是矩阵,矩阵中的元素可以是数、字符、逻辑表达式(logic states)、true或false、甚至是Matlab结构体. 基于这个前提,Mathlab能够处理非常多种类的数据。例如一个单独的数即一个标量在Matlab中是一个1×1的矩阵,一个行向量为1×N的矩阵,一个列向量为N×1的矩阵,一个多项式也是用一个向量来表示等等。Matlab也支持二维以上的矩阵,称为多维数组(arrays),例如一个三维数组的元素可以用三维坐标值来定位.
不管用户使用什么类型的数据(数、字符、逻辑true或false),Matlab都会将这些数据以矩阵或数组的形式存放. 例如字符串’Hello World’是一个1×11的矩阵,其矩阵元素是一个个单独的字符.
1 数值赋给变量
(1) 标量的赋值. 一个1×1的变量a的赋值可以直接用 a=3 这种形式。如果这个赋值语句是写在命令窗口中,则回车之后Matlab会默认将赋值后的结果输出在命令窗口中. 如果不希望它将赋值结果输出,则在赋值语句的末尾添上一个分号.
(2) 行向量的赋值. 对行向量赋值时,用b=[1,2,3] 或 b=[1 2 3] 这种形式,行向量的每个分量值之间用空格或一个逗号分隔,整体分量值被包含在一个方括号里.
(3) 列向量的赋值. 对列向量赋值时,用 c=[1;2;3] 这种形式,列向量的每个分量值之间用回车键或一个分号分隔.
(4) 二维矩阵的赋值. 对二维矩阵赋值时,一般用 d=[1,2,3;4,5,6;7,8,9] 的形式,其行内元素用逗号或空格隔开,行与行之间用分号或回车键分隔.
另外,还可以用指定矩阵下标的方法给矩阵赋值,下标从1开始,如d(1,1)=1; d(2,2)=2 . 对于没有赋值的数组元素,其默认值为0.(ps: 在命令窗口中,一行可以输入多条语句,语句之间用分号隔开,但如果最后一条语句后面也有分号,则运行或赋值结果不输出)
2 变量赋给变量
在编程过程中,一个非常普遍的操作是将一个变量的值赋给另外一个变量,这在Matlab中也是必须支持的,前提是作为值的变量要是预先定义或者使用过的。例如,我们可以先定义两个行向量,然后把这两个行向量作为分量赋值给另一个变量:
这里用到了一个重要的操作符,即冒号算符(colon operator),格式是first:last,它用于生成一个行向量,这个向量的元素默认是一个增量为1的有序数列,其第一个元素为first,最后一个元素为last. 例如 a=10:15相当于a=[10,11,12,13,14,15]. 另外还有一种带步长的冒号操作符,形如first:step:last,它生成的以first开头以last结尾的行向量,且行向量中元素的增量是step,即后一个元素比前一个元素大step. 例如a=3:0.2:3.8相当于a=[3,3.2,3.4,3.6,3.8]. 如果希望生成一个元素递减的行向量,则只须将步长设置为复数.
因此,前面两个向量赋值给一个矩阵的例子中,f(1,:)表示f 矩阵中第一行的所有元素, f(2,:)表示第二行的所有元素.
3 生成单位阵
Matlab提供了eye(n) 函数用以方便地生成一个n×n的单位阵,如
4 生成对角阵
Matlab中可以用diag 函数生成一个对角阵,如
MATLAB预定义变量
Matlab中有一些预定变量,这些预定义变量具有相应的初始值,其中比较常用的包括:
- pi: 返回π,即3.141592653589793.
- i,j: 定义为,虚数单位. 如果用户给这两个变量赋了其他的值,则它们不再是预定义常数.如果赋值之后希望恢复这其虚数单位值,可以通过clear命令恢复.
- inf: 定义为1/0. 当出现被0除时, Matlab就会返回inf,且不中断执行而继续计算.
- NaN: 定义为”Not a Number”,表示不是一个合法的数.
- eps: 返回机器的精度,定义为与1最接近的可代表的浮点数之间的差. 被用户赋值后不能由clear恢复.
删除自定义变量和恢复预定义变量
在Matlab中,可以通过一些命令进行变量的删除和内存的重组,主要包括以下几个命令:
- clear: 删除所有用户自定义变量并恢复除eps外的所有预定义变量.
- clear variable1: 仅删除名为变量variable1的变量.
- clear variable1 variable2 … : 删除变量variable1 variable2 …
- clear a*: 删除所有以a开头的变量.
- pack: 重组和压缩已分配的内存碎块. 当Matlab 的内存满后,可以利用这个命令实现在不清除任何变量的情况下得到更多的空间.
- pack filename: 用名为filename的文件作为临时文件,重组和压缩已分配的内存.
变量类型(作用域)
Matlab中的变量类型(Types of Variables)分为局部变量(Local Variable), 全局变量(Global Variable)和局部静态变量(Persistent Variables).
- 局部变量: 如果一个函数内的变量没有特别声明, 那么这个变量只在函数内部使用, 即为局部变量.
- 全局变量: 全局变量可以被多个不同的函数和基本工作空间(base workspace)共享. 如果一个函数需要使用全局变量a , 则必须在函数中(一般在函数的开始部分)声明该a为global: global a. 如果这个函数包含若干个子函数, 且子函数也需要访问全局变量a, 那么各个子函数中也都要加上global a. 如果某个函数更改了a的值, 那么之后其他所有声明了a的函数都可以得到这个新值. 如果某个函数需要访问Matlab命令行中的一个变量b, 那么需要在命令行中声明b为global.
- 局部静态变量: 局部静态变量只能在某个M文件中声明和使用, 且使用它的函数内需要有声明. 只要包含局部静态变量的函数存在于内存中(没有通过clear命令删除, 没有重新编辑), 该局部静态变量就一直存在.
MATLAB变量的更多相关文章
- Matlab变量、分支语句和循环语句
一.Matlab的变量 1.变量的命名 Matlab的变量名由数字.字母和下划线组成,可是仅仅能由字母开头.大写和小写敏感,最大长度为63个字符.不能使用Matlab的关键字作为变量名,应当避免使用函 ...
- (专题一)03 matlab变量及其操作
给内存单元取名字就可以访问内存单元 变量的命名:变量名区分大小写 标准函数名以及命名方式必须用小写字母 matlab赋值语句有两种表达式 变量的管理 1.预定义变量 ans 是默认赋值变 ...
- Matlab的部分文件操作
Author:Maddock Date:2015-01-20 判断文件是否存在 infilename = [str,'\lena.jpg']; sgc_exist = exist(infilename ...
- Maya 与 Matlab 数据互联插件使用教程
实验室做网格处理方面的算法,写界面很麻烦,所以有了利用maya和matlab进行数据连通的念头,于是有了这个插件. 这个插件可以把maya的网格数据导入matlab之中,完成计算之后重新返回maya. ...
- MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)
振动论坛原版主eight的经典贴http://www.chinavib.com/thread-45622-1-1.html MATLAB对于文本文件(txt)进行数据读取的技巧总结(经典中的经典)由于 ...
- matlab语言基础
(一)常用命令 清空命令窗口:clc 清空工作空间:clear 打开editor:edit 查看函数的帮助信息:help 函数名 让命令窗口信息紧凑显示:format compact (二)变量与常 ...
- matlab安装和入门
下载iso镜像: ISO镜像下载地址链接: http://pan.baidu.com/s/1i31bu5J 密码: obo1 单独破解文件下载链接: http://pan.baidu.com/s/1c ...
- Matlab与外部接口:MAT文件基础
MAT 文件MAT文件是MATLAB使用的一种特有的二进制数据文件.MAT文件可以包含一个或者多个MATLAB 变量.MATLAB通常采用MAT文件把工作空间的变量存储在磁盘里,在MAT文件中不仅保存 ...
- Matlab最新的官方文档中文翻译
文章翻译的是Matlab最新的官方文档R2016b,可能后续如果我还有时间会继续翻译,希望能够帮到大家,翻译的不好请大家不要吐槽. Matlab官方文档地址:http://cn.mathworks.c ...
随机推荐
- d3里的比例尺
// d3中的比例尺也有定义域和值域,分别是domain和range,开发者需要指定domain和range的范围,如此即可以得到一个计算关系: // 线性比例尺:能将一个连续的区间映射到另一区间,要 ...
- k8s yaml说明
k8s yaml # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: ...
- 程序猿必备的10款超炫酷HTML5 Canvas插件
1.超炫酷HTML5 Canvas 3D旋转地球动画 这是一款基于HTML5 Canvas的3D地球模拟动画,动画以太空作为背景,地球在太空中旋转,同时我们也可以拖拽鼠标来从不同的角度观察地球.另外我 ...
- go mod代理和小技巧
代理 go mod的代理比较出名的有微软的athens,可以基于它搭建一个私有的代理,管理内部的私有代码,而且微软提供了一个公共的代理,我们可以直接使用 Linux export GOPROXY=&q ...
- layer 关闭当前弹出层
关闭当前框的弹出层 layer.close(layer.index); 刷新父层 parent.location.reload(); // 父页面刷新 关闭iframe 弹出的全屏层 var inde ...
- 【iCore4 双核心板_uC/OS-II】例程六:信号量——任务同步
一.实验说明: 信号量是一个多任务内核提出的一个协议机构,上一个实验中我们介绍了信号量访问共享资源 的功能,其实信号量最初是用来控制访问共享资源的,它还可以用来同步一个中断服务函数和一个任 务,或者同 ...
- opencv wlsfilter depth refinement demo
参考 https://docs.opencv.org/3.2.0/d3/d14/tutorial_ximgproc_disparity_filtering.html // This file is p ...
- C# WinForm窗体隐藏右上角最小化、最大化、关闭按钮
C# WinForm窗体隐藏右上角最小化.最大化.关闭按钮 如何赢藏WinForm窗体的右上角按钮 设置设置ControlBox = false: 设置ControlBox = false:
- C# windows GDI+仿画图 绘图程序设计
C# windows GDI+仿画图 绘图程序设计 1.介绍 这里分享一个简单的画图程序 原作者:author: ping3108@163.com 2.程序主窗体设计 3.程序设计 本程序工程使用VS ...
- Cookiecutter: 更好的项目模板工具:(2)安装及基础使用
安装 通过python包管理工具 命令行输入 $pip install cookiecutter 或者 # mac os经常会禁止用户全局安装python包 $pip install --user c ...