MATLAB3:数值数组及向量化运算


一、实验目的

  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./BA元素除以B元素
A/BA右除B
B.\A同上
B\AA左除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对应的是列标。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道无方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值