MATLAB:全称为Matrix Laboratory
可使用Ctrl + C打断进程
一.功能及界面
1.数值计算和符号计算
(1)MATLAB以矩阵作为数据操作的基本单位,并提供大量数值计算函数
(2)MATLAB和符号计算语言Maple结合进行符号计算
2.绘图
·对图形句柄进行的低层绘图操作
·建立在低层绘图操作上的高层绘图操作
3.编程语言
特征:程序结构控制,函数调用,数据结构,输入输出,面向对象...
4.MATLAB工具箱
(1)两部分:基本部分,可选部分
(2)两大类:功能性工具箱,学科性工具箱
5.桌面概述
(1)3个窗口:
- 命令行窗口:
·主要交互窗口,用于输入命令并显示图形外的所有执行结果
·">>"为命令提示符,表示处于准备状态
- 工作区:
·用于储存各种变量和及其值
·可对变量进行增删改查
·双击变量名后进入VARIABLE窗口,可以查看详细信息(如类型)
- 当前路径文件夹窗口:
·指MATLAB运行文件时的工作目录
·只有在当前目录/搜索路径下的文件/函数可被调用
·在该窗口可显示/修改当前目录,可显示当前目录下的文件并提供搜索功能
>> cd path:修改当前目录为path
cd C:\mydir
>> cd:查看当前工作目录
- HOME栏:
New选项可以创建新脚本,Open选项可以打开脚本
Layout选项-Command History选项 可以打开历史命令记录
(2)返回默认布局:Layout选项-Default选项
(3)退出命令:
·主窗口右上角关闭按钮
·命令窗口输入Exit/Quit命令
(4)搜索路径
·文件搜索次序为:是否为变量-->是否为内部函数-->是否为当前目录中文件-->是否为搜索路径下其他目录中文件
·查看所有搜索路径:
>> path
·设置搜索路径:
>> userpath('path')#path指定将哪条路径放入搜索路径
>> savepath
二.基本语法
0.优先级
1.输入命令
#加减乘除次方:+,-,*,/,^
#运算顺序:( ) --> ^ --> */ --> +-
>> 3 * 5
ans =
15
#赋值:=(如不指定变量,默认为ans):
>> m = 3 * 5
m =
15
#让变量m自增1:
>> m = m + 1
m =
16
#创建一个名为y,值为m/2的变量
>> y = m / 2
y =
8
#在命令的末尾添加分号将抑制输出,但仍会执行该命令;否则会在命令行窗口中显示结果
>> k = 8 - 2;
#可以按键盘上的上箭头键调用上一条命令,下箭头键调用下一条命令
#要执行此操作,命令行窗口必须为活动窗口
>> m = 3 * k #从m = 3 * 5 修改而来
m =
18
#仅输入变量名称时,会返回该变量的当前值
#对浮点数默认显示到小数点后4位
>> k
k =
6
#修改变量值后,由该变量计算得到的变量的值不变
>> y
y =
8
#同一行不同命令间使用逗号(,)/分号(;)分隔
>> q = 1,w = 2;e = 3
#续行符(...):在物理行结尾加续行符表示下一物理行仍为本行的一部分
>> QED = 3*(4/2-3^7)...
-15^(2-3*6^5);
#input("x")要求输入值,命令行界面中显示x
2.在变量中存储数据
(1)变量命名规则:
·以字母开头
·仅包含字母,数字,下划线(_)
·区分大小写
·无需声明类型
(2)数据类型:默认为double
>> format <type>:以指定类型显示数据
(3)删除变量:
>> clear [variable]
#如果不指定变量.清除所有Workspace中的变量
(4)清除命令行窗口:
- 使用后所有变量均不被清除
>> clc
(5)matlab中字符串使用单引号(’ ')扩起
(6)查看变量:
>> who:查看Workspace中的变量
>> whos:查看Workspace中的变量及详细信息
3.内置的函数和关键字
(1)关键字:
>> iskeyword:查看有哪些关键字
#pi:圆周率Π
#只显示小数点后四位,但以更高精度存储
>> a = pi
a =
3.1416
#NaN:非数值(Not a Number);用于表示缺失数据
>> x = Inf / Inf
x =
NaN
#ans:默认变量名
#Inf:无穷大(Infinity)
>> x = 1 / 0
x =
Inf
#i/j:复数单位
#eps:2.2204e-16
#实际是1个函数,默认是2.2204e-16
(2)内置函数:见 函数 部分
(3)使用方括号([ ])获取多个输出:
#size()两个结果分别为矩阵的行数,列数
>> data = [1 2 3;1 2 3]
data =
1 2 3
1 2 3
[dr,dc] = size(data)
dr =
2
dc =
3
#max()/min()两个结果分别为最大/小值及其索引
>> v = [1 2 3 5 4 2.01 3.2]
v =
1.0000 2.0000 3.0000 5.0000 4.0000 2.0100 3.2000
>> [vMax,ivMax] = max(v)
vMax =
5
ivMax =
4
>> [a,b] = min([1 2 3;1 2 3])
a =
1 2 3
b =
1 1 1
三.导入数据
1.保存和加载变量
(1)将变量保存到.mat文件中:
save filename x:将变量x保存到文件filename.mat中
>> data = 9
data =
9
>> save datafile data #将变量data保存到文件datafile.mat中
(2)从.mat文件加载变量:
load filename:从文件filename.mat加载变量
>> load datafile #从datafile.mat加载变量
2.导入工具
- 打开文件:
文件打开后: - 要导入的数据以蓝色突出
- 缺失的数据以橙色突出
- 可通过IMPORTED DATA栏选择数据导入方式
- 使用IMPORT栏-Import Selection按钮导入
- 可导入表格.图像.文本等
四.获取帮助
1.点击RESOURCES栏-help按钮打开文档:
2.通过doc命令查询:
doc func:打开func函数的文档
>> doc randi
3.查看帮助:
help:查看帮助
help <name>:查看指定对象的帮助
#对于自定义函数,显示的帮助就是其中的注释
五.导入/导出变量
1.load()与save():
#将Workspace中的变量保存到文件
save("<filename>"[,<variables>,"<fmt>","<version>","-nocompression","-append"]):将工作区中指定变量保存到指定文件
#是命令形式的语法,可省略为save "<filename>" [<variables> "<fmt>" "<version>" "-nocompression"]
#参数说明:
filename:指定保存到哪个文件;str;需要包含后缀名
#如果该文件不存在,创建文件;如果已存在,覆盖原有文件
variables:指定保存哪些变量和字段;默认为所有
fmt:指定文件格式;默认为MATLAB®格式的2进制文件(.MAT文件);str
格式:"-<format>";如"-ascii",在ASCII文件中不压缩变量
version:指定.mat文件版本;str
格式:如'-v7'或'-v7.3'
'-nocompression':将变量保存到.mat文件,而不压缩
#仅支持.mat文件版本7和7.3,因此,version必须为'-v7'或'-v7.3'
#其他参数,参加官方文档
#加载文件中的变量到Workspace
load(<filename>[,<variables>,"-ascii","-mat"]):加载filename中的指定变量到工作区
#参数说明:
vairables:指定加载哪些变量和字段;默认为所有
'-ascii': 将filename视为ASCII文件,而不管文件扩展名如何
#如果filename是ASCII文件,会创建1个包含该文件数据的double数组,该数组的变量名为filename
'-mat':将filename视为MAT文件,而不管文件扩展名如何
#如果filename是MAT文件,会将变量加载到工作区
2.xlsread()与xslwrite():不推荐
#加载Excel文件中的变量到Workspace
[<num>[,<txt>,<raw>]] = xlsread(<filename>[,<sheet>,"<xlRange>","basic"]):读取名为filename的Excel文件中的指定工作表
#如果要跳过某些参数继续指定之后的参数,跳过的参数用" "表示
#参数说明:
sheet:指定工作表;默认为1(第1个工作表);int
xlRange:指定工作表内的读取范围(矩形区域);默认为全部
格式:"x:y"x为区域的左上角单元格,y为右下角单元格;只写一半表示开始位置;如"E1","A1:C3"
num:返回的数值数据
txt:返回的文本数据
raw:返回的数值和文本数据
#其他参数,参加官方文档
#将Workspace中的变量保存到Excel文件
[status,msg] = xlswrite(<filename>,<A>[,<sheet>,<xlRange>]):将矩阵A写入到名为filename的Excel文件的指定工作表中
#追加,而非覆盖
#参数说明:
sheet:指定工作表;默认为1;int
xlRange:指定写入范围(矩形区域);默认为左上角
格式:"x:y"x为区域的左上角单元格,y为右下角单元格;只写一半表示开始位置;如"E1","A1:C3"
status:写入操作的状态;操作成功时为1,否则为0
msg:写入操作生成的警告或错误消息
3.对文件的底层I/O:
#指在Byte/Char层面读/写文件
#每个文件有1个ID,即fid
#在文件中的位置由1个可以移动的光标指定
########################底层I/O函数########################
[fileID[,errmsg]] = fopen("<file>"[,<permission>,"machinefmt","encodingIn"]):打开文件或获得有关打开文件的信息
#参数说明:
file:要打开的文件
permission:指定打开类型;可为"rb"(默认值)/"r"/"r+"/"w"/"w+"/"a"/"a+"
machinefmt:指定在文件中读写字节/位时的顺序
encodingIn:指定与文件相关联的字符编码方案
fileID:≥3的整数文件标识符
#Matlab保留文件标识符0,1,2用于标准输入/输出(屏幕)/错误
errmsg:打开文件失败时,为错误信息;否则,为空字符向量
fIDs = fopen("all"): 返回包含所有打开文件的文件标识符的行向量
#为标准输入/输出/错误而保留的标识符不包括在内
#向量中元素的数量等于打开文件的数量
[filename[,permission,machinefmt,encodingOut]] = fopen(<fileID>):返回上次调用fopen()打开fileID指定的文件时使用的文件名等相关信息
#输出文件名将解析到完整路径
#fopen()不会从文件读取信息来确定输出值
无效的fileID会为所有输出参数返回空字符向量
#参数说明:
fileID:整数文件标识符
file:文件名
permission:打开方式
#如果是以二进制模式打开的文件,会包含字母'b'
machinefmt:计算机格式
encodingOut:编码方式
#实例:
>> [fileID,err] = fopen('out.txt','w','n','Shift_JIS');
#########################################################
[status] = fclose("<file>"):关闭打开的文件
#参数说明:
file:要关闭的文件;可为fileID(文件标识符)/"all"(所有打开的文件)
status:关闭成功时,为0;否则,为-1
#########################################################
[A,count] = fscanf(fileID,"fmtSpec"[,sizeA]):读取文本文件中的数据
#将文件光标定位在文件结尾标记处
#参数说明:
fileID:文件标识符,指定要打开的文件
fmtSpec:指定数据格式;str
#如果无法将fmtSpec与数据相匹配,只读取匹配的部分
sizeA:指定A的形状;[m,n]或正整数(m,n均为正整数)
#将文件光标定位到最后读取的值之后
#按列顺序填充 A
A:将数据读取到A中;默认为列向量,可通过sizeA更改形状
count:读取到的字段数
#实例:
>> fileID = fopen('nums1.txt','r');
>> formatSpec = '%f';
>> A = fscanf(fileID,formatSpec)
A = 8×1
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882
>> fclose(fileID);
>> fileID = fopen('nums2.txt','r');
>> formatSpec = '%d %f';
>> sizeA = [2 Inf];
>> A = fscanf(fileID,formatSpec,sizeA)
A = 2×5
1.0000 2.0000 3.0000 4.0000 5.0000
0.8147 0.9058 0.1270 0.9134 0.6324
#########################################################
[nbytes] = fprintf([fileID,]"fmtSpec",A1[,A2...]):将数据写入文本文件
#参数说明:
fileID:文件标识符,指定写入哪个;不传入时,直接在屏幕上显示结果
fmtSpec:设置数据的格式;str
A1,A2...:按列顺序将formatSpec应用于数组A1,A2...的所有元素
nbytes:写入的字节数
#实例:
>> A1 = [9.9,9900];
>> A2 = [8.8,7.7;8800,7700];
>> formatSpec = 'X is %4.2f meters or %8.3f mm\n';
>> fprintf(formatSpec,A1,A2)
X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm
#########################################################
status = feof(fileID):检测文件末尾
#参数说明:
fileID:指定文件,为文件标识符
status:文件末尾指示符的状态
#如果之前为文件设置了文件末尾指示符,返回1;否则,返回 0
六.逻辑数组
1.逻辑运算和变量
(1)关系运算符:
<:小于 <=:小于等于
>:大于 >=:大于等于
==:等于 ~=:不等于
结果为logical 1(true)/logical 0(false)
>> pi > 3
ans =
logical
1
#如果是char与str比较,会将char与str中的每个字符进行比较在返回结果
>> str1 = 'aarssadf';
>> 'a' == str1;
ans =
1 1 0 0 0 1 0 0
#可将判断为true的位置变为指定值
>> str1(str1 == 'a') = 'Z'#'a' == str1成立的位置变为'Z'
str =
ZZrssZdf
(2)对向量/矩阵与标量值进行比较:
Mr = M > x
#将矩阵的每个元素与标量值进行比较;返回每次结果构成的同型数组
#结果为m*n的 logical array
>> [5 10 15] > 12
ans =
1 * 3 logical array
0 0 1
>> [1 2;2 3] > 2
ans =
2 * 2 logical array
0 0
0 1
(3)对两个同型数组进行比较:
ar = arr1 > arr2
#比较arr1与arr2中的对应元素;返回每次结果构成的同型数组
#结果为m*n的logical array
>> [1 2;2 3] > [1 1;1 1]
ans =
2 * 2 logical array
0 1
1 1
2.组合逻辑条件—待补全
#逻辑运算符:
&:逻辑与
|:逻辑或
~:逻辑非
>> a = [0 2];
>> b= ~ a
b =
1 0
xor(x,y):逻辑异或
>> xor(1,2)
ans =
logical
0
bitxor(x,y):按位异或
&&:短路与
||:短路或
3.逻辑索引
(1)使用逻辑数组作为数组索引:
v = a0(a1的条件)
#提取满足条件的数组元素
>> a = [1 2 3 4 1];
>> a(a > 2)
ans =
3 4
#当a1不是a0时,会提取a0中和a1中满足条件的元素具有相同索引的元素
>> b = [2 3 1 7 1];
>> a(b > 2)
ans =
2 4
(2)使用逻辑索引在数组中重新赋值:
a0(a1的条件) = x
#将a0中满足条件的元素全部替换成x
>> a = [1 2 3 4 1];
>> a(a == 1) = 9
a =
9 2 3 4 9
#当a1不是a0时,会修改a0中和a1中满足条件的元素具有相同索引的元素
>> b = [2 3 1 7 1];
>> a(b > 1) = 1
a =
1 1 3 1 9