Uploaded by yeahbes xu

02.23实验一 Matlab 快速入门

advertisement
MATLAB 快速入门
2023《信号与系统实验》
sd04031260-0
(1) 桌面基础知识
使用 MATLAB 时,可发出创建变量和调用函数的命令。例如,通过在命令行中
键入以下语句来创建名为 a 的变量:
Here!
 MATLAB 将变量 a 添加到工作区,并在命令行窗口中显示结果。
a = 1 (标有灰色背景的语句为需要在命令行中输入的代码)
a =
1
 创建更多变量。
b = 2
b =
2
c = a + b
c =
3
d = cos(a)
d =
0.5403
 如果未指定输出变量,MATLAB 将使用变量 ans(answer 的缩略形式)
来存储计算结果。
sin(a)
ans =
0.8415
 如果语句以分号结束,MATLAB 会执行计算,但不在命令行窗口中显示输
出。
e = a*b;
(2) 矩阵和数组
 数组创建
要创建每行包含四个元素的数组,使用逗号 , 或空格分隔各元素。
a = [1 2 3 4]
a =
1
2
3
4
这种数组为行向量。
 要创建包含多行的矩阵,使用分号 ; 分隔各行。
a = [1 2 3; 4 5 6; 7 8 10]
a =
1
4
7
2
5
8
3
6
10
 创建矩阵的另一种方法是使用 ones、zeros 或 rand 等函数。例如,创
建一个由零组成的 5×1 列向量。
z = zeros(5,1)
z =
0
0
0
0
0
 矩阵和数组运算
MATLAB 允许使用单一的算术运算符或函数来处理矩阵中的所有值。
a + 10
ans =
11
14
17
12
15
18
13
16
20
sin(a)
ans =
0.8415
-0.7568
0.6570
0.9093
-0.9589
0.9894
0.1411
-0.2794
-0.5440
 要转置矩阵,请使用单引号 ('):
a'
ans =
1
2
3
4
5
6
7
8
10
 可以使用 * 运算符执行标准矩阵乘法,这将计算行与列之间的内积。例
如,确认矩阵乘以其逆矩阵可返回单位矩阵:
p = a*inv(a)
p =
1.0000
0
0
0
1.0000
0
-0.0000
0
1.0000
 请注意,p 不是整数值矩阵。MATLAB 将数字存储为浮点值,算术运算可
以区分实际值与其浮点表示之间的细微差别。使用 format 命令可以显
示更多小数位数:
format long
p = a*inv(a)
p =
1.000000000000000
0
-0.000000000000000
0
0
1.000000000000000
0
0
0.999999999999998
 使用以下命令将显示内容重置为更短格式
format short
format 仅影响数字显示,而不影响 MATLAB 对数字的计算或保存方式。
 要执行元素级乘法(对应元素相乘,而非矩阵乘法),请使用 .* 运算
符:
p = a.*a
p =
1
16
49
4
25
64
9
36
100
 乘法、除法和幂的矩阵运算符分别具有执行元素级运算的对应数组运算
符。例如,计算 a 的各个元素的三次方:
a.^3
ans =
1
64
343
8
125
512
27
216
1000
 串联
串联是连接数组以便形成更大数组的过程。实际上,第一个数组是通过将其各
个元素串联起来而构成的。成对的方括号 [] 即为串联运算符。
A = [a,a]
A =
1
4
7
2
5
8
3
6
10
1
4
7
2
5
8
3
6
10
使用逗号将彼此相邻的数组串联起来称为水平串联。每个数组必须具有相同的
行数。同样,如果各数组具有相同的列数,则可以使用分号垂直串联。
A = [a; a]
A =
1
4
7
1
4
7
2
5
8
2
5
8
3
6
10
3
6
10
 复数
复数包含实部和虚部,虚数单位是 -1 的平方根。
sqrt为算术平方根
sqrt(-1)
ans = 0.0000 + 1.0000i
要表示复数的虚部,请使用 i 或 j。
c = [3+4i, 4+3j; -i, 10j]
c =
3.0000 + 4.0000i
0.0000 - 1.0000i
4.0000 + 3.0000i
0.0000 +10.0000i
(3) 数组索引
MATLAB 中的每个变量都是一个可包含许多数字的数组。如果要访问数组的选定
元素,请使用索引。
以 4×4 幻方矩阵 A 为例:
A = magic(4)
A =
16
5
9
4
2
11
7
14
3
10
6
15
13
8
12
1
 引用数组中的特定元素有两种方法。最常见的方法是指定行和列下标,
例如
A(4,2)
ans =
14
 另一种方法不太常用,但有时非常有用,即使用单一下标按顺序向下遍
历每一列:
A(8)
ans =
14
使用单一下标引用数组中特定元素的方法称为线性索引。
 如果尝试在赋值语句右侧引用数组外部元素,MATLAB 会引发错误。
test = A(4,5)
Index exceeds matrix dimensions.
 但是,可在赋值语句左侧指定当前维外部的元素。数组大小会增大以便
容纳新元素。
A(4,5) = 17
A =
16
5
9
4
2
11
7
14
3
10
6
15
13
8
12
1
0
0
0
17
 要引用多个数组元素,请使用冒号运算符,可指定一个格式为
start:end 的范围。例如,列出 A 前三行及第二列中的元素:
A(1:3,2)
ans =
2
11
7
 单独的冒号(没有起始值或结束值)指定该维中的所有元素。例如,选
择 A 第三行中的所有列:
A(3,:)
ans =
9
7
6
12
0
 此外,冒号运算符还允许使用较通用的格式 start:step:end 创建等距
向量值。
B = 0:10:100
B =
0
10
20
30
40
50
60
70
80
90
100
如果省略中间的步骤(如 start:end 中),MATLAB 会使用默认步长值 1。(大
家可以试一下)
(4)工作区变量
工作区包含在 MATLAB 中创建或从数据文件或其他程序导入的变量。例如,下
列语句在工作区中创建变量 A 和 B。
A = magic(4);
B = rand(3,5);
 使用 whos 可以查看工作区的内容。
whos
Name
Size
A
B
4x4
3x5
Bytes
128
120
Class
Attributes
double
double
此外,桌面上的“工作区”窗格也会显示变量(如果之前还建立了其它变量,那
么其它变量也会一起显示出来)。
 退出 MATLAB 后,工作区变量不会保留。使用 save 命令保存数据以供
将来使用,
save myfile.mat
通过保存,系统会使用 .mat 扩展名将工作区保存在当前工作文件夹中一个名
为 MAT 文件的压缩文件中。
 要清除工作区中的所有变量,请使用 clear 命令。
 使用 load 将 MAT 文件中的数据还原到工作区。
load myfile.mat
(5)调用函数
MATLAB 提供了大量执行计算任务的函数。在执行相应计算时只要调用相应函数
即可,不必再独立编程。
•
要调用函数,例如 max,将输入参数括在圆括号中:
A = [1 3 5];
max(A)
ans = 5
如果存在多个输入参数,请使用逗号加以分隔,结果为 挑出两个矩阵相对应元素中的较大值:
B = [10 6 4];
max(A,B)
ans =
10
•
6
5
通过将函数赋值给变量,返回该函数的输出:
maxA = max(A)
maxA = 5
•
如果存在多个输出参数,请将其括在方括号中(逗号后的变量表示最大值的位置):
[maxA,location] = max(A)
maxA = 5
location = 3
•
将任何字符输入括在单引号中:
disp('hello world')
hello world
•
要调用不需要任何输入且不会返回任何输出的函数,请只键入函数名
称:
clc
clc 函数清除命令行窗口。
附主要数学函数及特殊变量
clear/clf/clc
清除内存变量/清除图形/清除命令
行窗口
操作系统
数学函数
cd/pwd
更改目录/显示当前目录
copyfile
复制文件
save
保存变量到文件
load
载入文件中的数据
abs/angle
复数的模/辐角
acos/asin/atan
反余弦/反正弦/反正切
cos/sin/tan
余弦/正弦/正切
cosh/sinh/tanh
双曲余弦/双曲正弦/双曲正切
conj/imag/real
共轭复数/虚部/实部
exp/log/log10
指数函数/自然对数和以 10 为底的
对数
sign/power(x,y)
y
符号函数/指数函数(x ),很多时候
用 x^y 或 x.^y 更方便
π
pi
特殊变量
特殊运算
inf(或 Inf)
无穷大
nan(或 NaN)
非数错误
i
虚数单位
j
ceil
大于函数参数的最小整数
floor
不超过函数参数的最大整数
fix
截尾取整
round
四舍五入取整
.*
./
.^
相应元素的相乘 相除 乘方
对于非矩阵,推荐使用带有 . 的形
式
= == ~=
>
>=
赋值 等于 不等于
< <=
大于 大于或等于 小于
于
比较与逻辑
&
&&
~ | xor(a,b)
||
与 非 或 a 和 b 异或
与 或
(不能用于矩阵)
小于或等
对于&&,只要前一个为 False,则不
计算后一个的逻辑值;对于||,只
要前一个为 True,则不计算后一个
的逻辑值。
any(a)
a 中有元素非零则为真
all(a)
a 中所有元素都非零则为真
(单引号)'
.'
共轭转置
转置
inv
逆矩阵
\
矩阵左除(若已知 Ax=y,则 x=A\y)
.\
数组左除
x=first:increment:last
行向量 x 由 first 到 last,步长为
increment
x=linspace(first,last,n)
行向量 x 由 first 到 last 共 n 个元
素
数组操作
A=[x1;x2]
有两行 x1 和 x2 的矩阵 A
ones(N,M)
N⨯M 的全 1 数组
zeros(N,M)
N⨯M 的全零数组
A(i,j)
矩阵 A 的第 i 行第 j 列元素
whos
显示工作空间(Work Space)中的所
有变量
微积分
化简
解方程
size(A)
显示 A 的行数和列数
length(x)
向量 x 的长度
diff
求微分
int
求积分
limit
求极限
taylor
求泰勒级数
symsum
级数求和
simplify
化简
expand
展开
factor
因式分解
solve
求代数方程
dsolve
求微分方程
fourier
傅里叶变换
变换
特殊函数
数字精度
特别说明
ifourier
傅里叶逆变换
laplace
拉普拉斯变换
ilaplace
拉普拉斯逆变换
dirac
狄拉克函数(δ)
heaviside
单位阶跃函数
format short
小数点后显示 4 位(默认)
format long
小数点后显示 15 位
format rational
以分数形式显示
diff int factor
要获得这些函数的帮助,在命令行
窗口输入 help sym/xxx (xxx 为函
数名),其它则用 help xxx
(6) 二维图和三维图
•
线图
要创建二维线图,使用 plot 函数。例如,绘制从 0 到 2π 之间的正弦函数
值:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
•
将两个含有同一自变量的函数同时画在一幅图中,使用 plot3 函数。例
如,绘制从 0 到 10π 之间的正弦和余弦函数值:
t = 0:pi/50:10*pi;
x = sin(t);
y = cos(t);
plot3(x,y,t)
思考:如果只需要画出 x 与 y 的函数关系需要如何编程?
•
可以标记轴并添加标题。
xlabel('x')
ylabel('sin(x)')
title('Plot of the Sine Function')
•
通过向 plot 函数添加第三个输入参数,可使用红色虚线绘制相同的变
量。
plot(x,y,'r--')
'r--' 为线条设定。每个设定可包含表示线条颜色、样式和标记的字符。标记
是在绘制的每个数据点上显示的符号,例如,+、o 或 *。例如,'g:*' 绘制使
用 * 标记的绿色点线。
附 plot 函数绘图类型
字符
类型
意义
b/g/r/c/m/y/k
颜色
蓝/绿/红/蓝绿/紫红/
黄/黑
./x/+/h/*/s/d/v/^/</>/p/o 点型
点/x/六角星/星号/方
形/菱形/下三角/上三
角/左三角/右三角/正
五边形/圆圈
-(或不写)/:/-./--
实线/点线/点画线/虚
线
•
线型
请注意,为第一幅绘图定义的标题和标签不再被用于当前的图窗窗口
中。默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新
绘图时,MATLAB 都会清除图窗。
要将绘图添加到现有图窗中,请使用 hold on。在使用 hold off 或关闭窗口
之前,当前图窗窗口中会显示所有绘图。
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,':')
legend('sin','cos')
hold off
•
三维绘图
三维图通常显示一个由带两个变量的函数(即 z = f (x,y))定义的曲面图。
要计算 z,首先使用 meshgrid 在此函数的域中创建一组 (x,y) 点。
[X,Y] = meshgrid(-2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
然后,创建曲面图。
surf(X,Y,Z)
surf 函数及其伴随函数 mesh 以三维形式显示曲面图。surf 使用颜色显示曲
面图的连接线和面。mesh 生成仅以颜色标记连接定义点的线条的线框曲面图。
试一下看看它们有什么区别。
•
子图
使用 subplot 函数可以在同一窗口的不同子区域显示多个绘图。
subplot(m,n,p) 将图划分为 m×n 块,在第 p 块创建坐标系。例如,在图窗窗
口的 2×2 网格中创建四个绘图,分别展示 sin(t),cos(t),t0.5 和 sinh(t)。
t = 0:pi/10:2*pi;
subplot(2,2,1); plot(t,sin(t)); title('sin(t)');
subplot(2,2,2); plot(t,cos(t)); title('cos(t)');
subplot(2,2,3); plot(t,sqrt(t)); title('t^0^.^5');
subplot(2,2,4); plot(t,sinh(t)); title('sinh(t)');
•
除了编程的方式外还可以采用交互方式来绘图,也就是直接在图中对线
宽、颜色、线型、坐标轴、标题等等进行添加或修改。例如,先创建一
幅二位线图:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
试着点击“插入”菜单,试着添加标题、坐标轴名称与图例等,并使用鼠
标改变坐标轴名称的所在位置(在名称上点一下然后拖动)。在坐标轴上双击,
改变坐标轴的刻度和标尺。点击“编辑-图窗属性”,然后在已添加的标题上双
击一下改变其字体和字号,在已添加的坐标轴名称上双击,改变坐标轴名称的
字体和字号。
练习:画一条正弦曲线,x 从 0 到 2π,步长为 π/10,并添加如下坐标轴名称和
标题,添加图例并将其命名为“data”,修改坐标轴刻度和标尺使其如下所示,
修改线型和粗细并添加标记(○)使其接近下面的图。(π 可通过输入\pi 获得)
注意:在本实验课中,所有的图均要求标注坐标轴名
称和单位(除非单位是 1),若同一张图中有不同的曲
线,需采用不同的线型或标记将其区分,并添加图例!
更多的希腊字母和特殊字符如下表所示:
(7) 创建脚本
我们之前都是在命令行窗口中编写 MATLAB 语句的,这样做的一大缺点就是
我们必须在每写完一行后按下回车,如果我们需要修改之前语句中的内容,总
是不得不需要重新把代码输入一遍,效率非常低下。为了方便调试程序并保存
代码,需要创建脚本并在脚本中编写、修改和调试。
点击左上角的“新建脚本”,把任意代码,例如下面的,复制到“编辑器”
窗口中,并保存到合适的文件夹中(可以事先在个人文档中创建一个文件夹用以
保存),然后点击“运行”,查看结果。
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
试着故意写错代码中的某些地方,保存后再次运行,看看会发生什么?例
如,将代码写成:
x = 0:pi/100:2*pi;
y = si(x);
plot(x,y)
命令行窗口中会显示:
未定义函数或变量 'si'。
出错 Kuaisurumen (line 2)
y = si(x);
提示出错原因(Kuaisurumen 是该脚本的文件名,line2 提示第二行有错误)。
注意:在本实验课中,所有程序代码均要求在脚本中
进行编写!
(8) 循环与条件语句
MATLAB 中最常用的是 for 循环语句,一般格式为
for 变量名=起始值:步长:终止值
语句
end
下面的例子中变量 v 以 0.1 为步长递增至 0.5,并显示出数值:
for v = 0:0.1:0.5
disp(v)
end
运行结果:
0
0.1000
0.2000
0.3000
0.4000
0.5000
条件语句的一般格式为:
if 条件
语句(上述条件为 True)时执行
else
语句(上述条件为 False)时执行
end
例如,使用 break 终止循环:
for v = 0:0.1:0.5
if v<0.3
disp(v)
else
break;
end
end
运行结果:
0
0.1000
0.2000
在这里 if else 语句用来对 disp(v)的执行加以限制,break 可以跳出整个循
环。而 continue 则只跳出本次循环,以后的循环依然能够运行,如下例:
for v = 0:0.1:0.5
if v>0.3
disp(v)
else
continue;
end
end
运行结果:
0.3000
0.4000
0.5000
试一下若将上面的 continue 改成 break 会得到什么样结果。
Download