一、实验目的
1. 熟悉MATLAB主界面,并学会简单的菜单操作。
2. 学会简单的矩阵输入。
3. 熟练掌握一维、二维数组的创建与寻访赋值。
4. 理解数组运算与矩阵运算的含义,并能正确使用。
5. 理解关系运算和逻辑运算,并熟悉它们的应用。
二、实验内容
1.创建一维数组的4种方式
A、逐个元素输入,例如x=[0,1,2,3,4]
B、冒号生成,例如x=0:4
C、线性采样,例如:x=linspace(0,4,5)
D、运用MATLAB函数生成法,例如:ones(3,3)
2.一维子数组的寻访与赋值
指令 | 说明 |
---|---|
x(3) x=rand(1,5) | 寻访数组x的第三个元素 |
x([1 2 5]) | 寻访数组x的第一、二、五个元素组成的子数组 |
x(3:end) | 寻访除前2个元素外的全部其他元素。 |
x(3: -1:1) | 由前三个元素倒排构成的子数组 |
x(find(x>0.5)) | 由大于0.5的元素构成的子数组 |
x(3) = 0 | 第三个元素赋值为0 |
x([1 4])=[1 1] | 第一、四个元素都赋值为1 |
3.二维数组元素的标识转化
指令 | 说明 |
---|---|
sub2ind | 据全下标算出单下标 |
ind2sub | 据单下标算出全下标 |
4. “逻辑1”标识的相关程序
指令 | 说明 |
---|---|
A、L=abs(A)>3 | 产生与A同维的“0-1”逻辑值数组 |
islogical(L) | 判断L是否逻辑值数组 |
5.二维数组的子数组寻访和赋值
指令 | 说明 |
---|---|
A(r,c)=Sa | “双下标”方式赋值。 |
A(:)=D(:) | 全元素赋值。 |
A(s)=Sa | “单下标”部分元素赋值。 |
A(r,c)=Sa | “双下标”方式赋值。 |
A(:)=D(:) | 全元素赋值。 |
A(s)=Sa | “单下标”部分元素赋值。 |
6.运算指令对照
指令 | 说明 |
---|---|
A.’ | 非共轭转置 |
A’ | 共轭转置 |
A.^n | 各元素n次幂 |
A^n | 方阵的n次幂 |
A.*B | 对应元素相乘 |
A*B | 矩阵相乘 |
A./B | A元素除以B元素 |
A/B | A右除B |
B.\A | 同上 |
B\A | A左除B |
exp(A) | 对各元素求幂 |
expm(A) | 矩阵指数 |
log(A) | 对各元素求对数 |
logm(A) | 矩阵对数 |
sqrt(A) | 对各元素求方根 |
sqrtm(A) | 矩阵平方根 |
A=s | 标量赋给A的每个元素(s和A同大小) |
A#B | 对应元素关系运算 |
A@B | 对应元素逻辑运算 |
7.标准数组生成函数
指令 | 说明 |
---|---|
diag | 产生对角形数组 |
eye | 产生单位数组 |
magic | 产生魔方数组 |
ones | 产生全1数组 |
rand | 产生均匀分布随机数组 |
randn | 产生正态分布随机数组 |
zeros | 产生全0数组 |
注:前三类数组(标的指令)不适用于高维,只适用于二维以下
8. 符号对象的识别
指令 | 说明 |
---|---|
rot90 | 把数组逆时针旋转90度 |
diag | 提取对角元素,或生成对角阵 |
flipud | 上下交换 |
fliplr | 左右交换 |
repmat | 按指定的行数列数铺放模块数组 |
reshape | 改变行数列数,元素数不变 |
9.高维数组的几个常用指令
指令 | 说明 |
---|---|
ndims(A) | 测量A的维数 |
size(A) | 测量A的大小 |
length(A) | 求A的长度 |
10.非数NaN
A、规定0/0,∞×∞,0×∞都会产生非数
B、传递性, NaN参与运算所得结果也是NaN
C、没有“大小”概念,不能比较两个非数的大小
11. 求近似极限,修补图形缺口,例如:
指令 | 说明 |
---|---|
t=-2* pi:pi/10:2*pi; | 自变量数组中存在0值 |
y=sin(t)./t; | 在t=0处,计算将产生NaN |
tt=t+(t==0)*eps; | 逻辑数组参与运算,使0元素被一个“机器零”小数代替 |
yy=sin(tt)./tt; | 用数值可算的sin(eps)/eps近似替代sin(0)/0极限 |
12. 以下是常用指令及注释
指令 | 说明 |
---|---|
(:,[2 3])=ones(2) | 双下标赋值方式:把A的第2、3列元素全赋为1 |
A=reshape(1:9,3,3) | 把一维数组1:9重排成3×3的二维数组 |
B1=repmat(B,2,2) | 把数组B重排为2×2的数组 |
flipud(A) | 上下对称交换 |
fliplr(A) | 左右对称交换 |
AA=A(:,[1:6,1:6]) | 相当于指令repmat(A,1,2) |
R(s)=111 | 利用“单下标”定位赋值 |
[ii,jj]=find(R<0) | 利用find获得符合等式条件的元素“双下标” |
[ri,ci]=ind2sub(size®,si) | 转换成“全下标”标识 |
[rj,cj]=find(LR) | 直接确定全下标 |
三、仿真结果
1.在MATLAB中如何建立矩阵[5,7,3;4,9,1],并将其赋予变量a?
答:在MATLAB中输入程序:a=[5,7,3;4,9,1]
2.计算矩阵[5,3,5;3,7,4;7,9,8]与[2,4,2;6,7,9;8,3,6]之和。
答:
>> a=[5,3,5;3,7,4;7,9,8];b=[2,4,2;6,7,9;8,3,6];
>> c=a+b
c =
7 7 7
9 14 13
15 12 14
故3/7+0.1是“双精度”对象,而sym(3/7+0.1),vpa(sym(3/7+0.1)) 是“符号”对象。
3.计算a=[6,9,3;2,7,5]与b=[2,4,1;4,6,8]的数组乘积。
答:
>> a=[6,9,3;2,7,5];b=[2,4,1;4,6,8];
>> c=a.*b
c =
12 36 3
8 42 40
4.对于AX=B,如果A=[4,9,2;7,6,4;3,5,7],B=[37;26;28],求解X。
答:
>> A=[4,9,2;7,6,4;3,5,7];B=[37;26;28];
>> X=A\B
X =
-0.5118
4.0427
1.3318
5.已知:a=[1,2,3;4,5,6;7,8,9],分别计算a的数组平方和矩阵平方,并观察其结果。
答:
>> a=[1,2,3;4,5,6;7,8,9];
>> b=sqrt(a) %计算a的数组平方根
b =
1.0000 1.4142 1.7321
2.0000 2.2361 2.4495
2.6458 2.8284 3.0000
>> c=sqrtm(a) %计算a的矩阵平方根
c =
0.4498 + 0.7623i 0.5526 + 0.2068i 0.6555 - 0.3487i
1.0185 + 0.0842i 1.2515 + 0.0228i 1.4844 - 0.0385i
1.5873 - 0.5940i 1.9503 - 0.1611i 2.3134 + 0.2717i
四、实践中遇到的问题及解决方法
1.问题:不会求解方程组,而且分不清是左除还是右除
解决方法:将方程组等号左边的系数列为数组A,等号右边的系数列为数组B,故AX=B,所以方程组的解为A\B。这里必须是A左除B,B右除A的话会导致MATLAB显示矩阵维度必须一致。
2.问题:不会使用MATLAB找出矩阵A中的最大值和最小值
解决方法:连续使用两次max或min即可求出最大值或最小值。例如:求矩阵A最大值:max(max(A));求矩阵A最小值:min(min(A))
3.问题:不会使用MATLAB找出矩阵A中每列最小值,并找到所在列的行号位置。
解决方法:具体程序为:[min-A,index]=min(A,[],1);其结果会分别显示min-A,以及最小值对应的列index
4.问题:不理解如何求解一个矩阵A的元素个数?
解决方法:其实,求解一个矩阵A的元素个数就是求解该矩阵的长度,其程序:length(A)
5.问题:不会求满足条件矩阵A中所有大于 0.5的元素位置的 “全下标”和“单下标”
解决方法:具体程序为:ind=(find(A>0.5)),[r,c]=ind2sub(size(A),ind)。其中r对应的是行标,c对应的是列标。