matlab是Mathworks公司推出的一套高性能数值计算和可视化软件,集数值分析,矩阵运算,信号处理和图形显示与一体。同时Matlab也是一种编程语言,被称为第四代编程语言。
全称:Matrix Laboratory(矩阵实验室),matlab出现在20世纪70年代,由Fortran编写,到了90年代,其内核由C语言编写.
Matlab常见的交互界面
●Command window(命令窗口):在这个窗口中,可以输入各种matlab命令,函数和表达式。所有操作和运算的结果也会在该窗口中出现(图形结果会单独显示)。
●Command History(历史命令窗口):记录了用户已经操作过的各种命令,函数和表达式。主要功能:方便用户回忆之前的操作,也可以方便用户对这些历史信息进行编辑(如复制,充运行等)。
●Current Folder(当前目录窗口):在这个窗口中,可以设置当前目录,展示目录中的M文件或者MAT文件等。
●Workspace(工作空间):在这个窗口中,可以查看工作空间中所有变量的类别,名称,大小等。可以在这个窗口中观察,编辑和提取这些变量。
默认情况下,命令窗口的数值结果都以format short g 的格式结果显示,这只是matlab数值结果的显示方式,而不是数值计算的精度,在实际存储和计算过程中,使用的都是双精度。
命令窗口标点符号
●空格,逗号”,”:1.输入变量的间隔 2.数组/矩阵元素的分隔符。
●分号”;”:1.命令的结束表示,同时不显示结果。2.数组/矩阵元素的行间分隔符。
●冒号”:” :1.用于生成一维数值数组,表示一维数组的全部元素或者多维数值某一维的全部元素。详细用法见链接
●其他见链接
Matlab变量命名规则与C++/C#中差不多,由字母,数字,下划线组成。但matlab中变量名第一个字符必须是英文字符,C++/C#中可以是英文和下划线。
Matlab中预定义变量:
ans:计算结果的默认名称
eps:计算机的零阈值
inf(Inf):无穷大,-Inf为负无穷大
pi:圆周率
NaN(nan):表示结果或变量不是数值,无法定义的一个数
虽然matlab没有限制用户使用预定义变量,即可以再matlab的任何文件中将这些预定义变量重新定义,复制。但建议,不要使用matlab预先定义的变量名称。
Matlab的搜索路径(沿这个路径查找相应的文件,函数或具体数据)
搜索过程:如用户在命令窗口中输入命令myMatlab
●是否是内存中的变量
●是否是内置函数
●是否是当前目录下的M文件
●是否是搜索路径下其他M文件
搜索路径的设置方法:
●输入pathtool命令或path命令
●matlab界面HOME->set path
使用path修改的信息只在当前matlab环境中有效,重启matlab后,就无效了。
查看变量:1.命令whos 2.用workspace窗口
删除变量:1.命令clear A; 2.用workspace窗口
.mat文件是matlab数据文件,保存工作空间的变量。
Matlab区分大小写。
Matlab中的变量不用声明,不用定义,拿来即用。
输入一条命令,回车,就表示一条命令结束。
Matlab是解释性语言,在存储结构和计算语句完全相同的情况下,matlab效率比C++慢。
M文件分为1.M脚本文件 2.M函数文件
M文件必须在搜索路径中才能运行。
1.M脚本文件由一组matlab指令构成,其中的语句可以访问matlab工作空间中的所有变量与数据。脚本文件中所有的变量都是全局的,可以被其他脚本文件与函数文件访问,这些全局变量一直保存在内存中。脚本文件中的语句与直接在命令窗口中输入的命令是一样的,只不过封装起来了。
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脚本文件调用。
Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
Matlab的变量和运算是以数组(矩阵)为基础
数组分为
●向量:一维数组
●矩阵:二维/多维数组
●标量:1行1列数组
数组的创建:1.用”[]”操作符直接创建 2.用函数创建
数组元素的访问(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.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
逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。
创建的两种方式: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
元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。
声明: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.1 算术运算符
分为矩阵的运算符和数组的运算符两大类
其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算
矩阵运算符
1、+ ,-:加减 2、*:矩阵相乘 3、/:相除
4、\:矩阵左除,左边为除数 5、^:矩阵的乘方 6、.’ :转置
数组运算中(点运算)
1、.*:对应元素相乘 2、.^:对应元素乘方 3、./:对应元素相除 4、.\:对应元素左除
标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。
注意:不要忘了最后的end
1、if表达式
语句;
end
2、if 表达式
语句1
else
语句2
end
3、switch 表达式
Case 表达式1
语句1
Case 表达式2
语句2
…
Otherwise
语句n
end
4、★
for i=表达式
语句
end
//能够遍历表达式中所有的元素
如:for i={‘abc’,’xyz’} %i为元胞数组
disp(i{1});
end
输出:abc
xyz
5、while 表达式
语句
end
1、MAT格式文件是matlab数据存储的标准格式
load/save命令主要用于MAT格式或以空格为分隔符的文本文件。
语法
load(filename,variables)
save(filename,variables)
>>save abc.mat a b %将变量a,b保存在abc.mat中
>>load abc.mat %加载文件