Matlab数组.docx
- 文档编号:7823493
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:21
- 大小:133.82KB
Matlab数组.docx
《Matlab数组.docx》由会员分享,可在线阅读,更多相关《Matlab数组.docx(21页珍藏版)》请在冰豆网上搜索。
Matlab数组
第3章数值数组及向量化运算
.1数值计算的特点和地位
【例3.1-1】
(1)
symstx%
ft=t^2*cos(t)%
sx=int(ft,t,0,x)%
%
ft=
t^2*cos(t)
sx=
x^2*sin(x)-2*sin(x)+2*x*cos(x)
(2)
dt=0.05;%
t=0:
dt:
5;%
%
Ft=t.^2.*cos(t);%
%
%
Sx=dt*cumtrapz(Ft);%
%
t(end-4:
end)%
Sx(end-4:
end)%
plot(t,Sx,'.k','MarkerSize',12)
%
xlabel('x'),ylabel('Sx'),gridon
ans=
4.80004.85004.90004.95005.0000
ans=
-20.1144-19.9833-19.7907-19.5345-19.2131
图3.1-1在区间[0,5]采样点上算得的定积分值
【例3.1-2】
(1)
symstx
ft=exp(-sin(t))
sx=int(ft,t,0,4)
ft=
1/exp(sin(t))
Warning:
Explicitintegralcouldnotbefound.
sx=
int(1/exp(sin(t)),t=0..4)
(2)
dt=0.05;%
t=0:
dt:
4;%
%
Ft=exp(-sin(t));%
%
%
Sx=dt*cumtrapz(Ft);%
%
Sx(end)%
plot(t,Ft,'*r','MarkerSize',4)%
holdon
plot(t,Sx,'.k','MarkerSize',15)
holdoff
xlabel('x')
legend('Ft','Sx')
ans=
3.0632
图3.1-2在区间[0,4]中间的被积函数及其原函数的离散计算结果
.2数值数组的创建和寻访
.2.1一维数组的创建
101其他类型一维数组的创建
【例3.2-1】
a1=1:
6%
a2=0:
pi/4:
pi%
a3=1:
-0.1:
0%
a1=
123456
a2=
00.78541.57082.35623.1416
a3=
Columns1through7
1.00000.90000.80000.70000.60000.50000.4000
Columns8through11
0.30000.20000.10000
b1=linspace(0,pi,4)%
b2=logspace(0,3,4)%
b1=
01.04722.09443.1416
b2=
1101001000
c1=[2pi/2sqrt(3)3+5i]%
c1=
Columns1through3
2.00001.57081.7321
Column4
3.0000+5.0000i
rngdefault
c2=rand(1,5)%
c2=
0.81470.90580.12700.91340.6324
【例3.2-2】
a=2.7358;b=33/79;%
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
%
C=
1.00005.4716+0.4177i0.6909
0.70714.82443.5000+1.0000i
102中规模数组的数组编辑器创建法
【例3.2-3】试用变量编辑器,把如下
的数组输入MATLAB内存,并命名为A18。
0.64590.96370.52890.07100.83260.9786
0.43760.38340.56800.08710.77820.7992
0.89180.79170.92560.02020.87000.4615
图3.2-1利用数组编辑器创建中规模数组
103中规模的M文件创建法
【例3.2-4】
图3.2-2利用M文件创建数组
104利用MATLAB函数创建数组
【例3.2-5】
ones(2,4)%
ans=
1111
1111
rng(0,'v5normal')
randn(2,3)%
ans=
-0.43260.1253-1.1465
-1.66560.28771.1909
D=eye(3)%
D=
100
010
001
diag(D)%
ans=
1
1
1
diag(diag(D))%
ans=
100
010
001
randsrc(3,20,[-3,-1,1,3],1)
%
%
ans=
Columns1through12
-1-1-31-31-333-3-31
1-3-1-13-1-3-13-3-11
-3-3-11-3131-333-1
Columns13through20
13-1-1-11-1-3
3333-3-3-31
-31-3-1-3-111
.2.2二维数组元素的标识和寻访
【例3.2-6】
A=zeros(2,6)%
A(:
)=1:
12%
%
%
A=
000000
000000
A=
1357911
24681012
A(2,4)%
A(8)%
ans=
8
ans=
8
A(:
[1,3])%
%
A([1,2,5,6]')%
ans=
15
26
ans=
1
2
5
6
A(:
4:
end)%
%
ans=
7911
81012
A(2,1:
2:
5)=[-1,-3,-5]%
%
%
A=
1357911
-14-38-512
B=A([1,2,2,2],[1,3,5])%
%
B=
159
-1-3-5
-1-3-5
-1-3-5
L=A<3%
%
%
A(L)=NaN%
L=
100000
101010
A=
NaN357911
NaN4NaN8NaN12
.2.3数组构作技法综合
【例3.2-7】
a=1:
8%
A=reshape(a,4,2)%
A=reshape(A,2,4)%
a=
12345678
A=
15
26
37
48
A=
1357
2468
b=diag(A)%
B=diag(b)%
b=
1
4
B=
10
04
D1=repmat(B,2,4)%
D1=
10101010
04040404
10101010
04040404
D1([1,3],:
)=[]%
D1=
04040404
04040404
【例3.2-8】
A=reshape(1:
9,3,3)
A=
147
258
369
B=flipud(A)%
B=
369
258
147
C=fliplr(A)%
C=
741
852
963
D=rot90(A,2)%
D=
963
852
741
.3数组运算
【例3.3-1】
(1)
clear
vr=[0.89,1.20,3.09,4.27,3.62,7.71,8.99,7.92,9.70,10.41];
%
ir=[0.028,0.040,0.100,0.145,0.118,0.258,0.299,0.257,0.308,0.345];%
%
L=length(vr);%<7>
fork=1:
L
r(k)=vr(k)/ir(k);%
end%<10>
%
sr=0;%<12>
fork=1:
L
sr=sr+r(k);%
end
rm=sr/L%<16>
rm=
30.5247
(2)
clear
vr=[0.89,1.20,3.09,4.27,3.62,7.71,8.99,7.92,9.70,10.41];
%
ir=[0.028,0.040,0.100,0.145,0.118,0.258,0.299,0.257,0.308,0.345];%
r=vr./ir%<21>
rm=mean(r)%<22>
r=
Columns1through8
31.785730.000030.900029.448330.678029.883730.066930.8171
Columns9through10
31.493530.1739
rm=
30.5247
【例3.3-2】
(1)
clear
x=-5:
0.1:
5;%
y=(-2.5:
0.1:
2.5)';%
N=length(x);%
M=length(y);%
forii=1:
M
forjj=1:
N
X0(ii,jj)=x(jj);%
Y0(ii,jj)=y(ii);%
Z0(ii,jj)=sin(abs(x(jj)*y(ii)));
%
end
end
(2)
[X,Y]=meshgrid(x,y);%
Z=sin(abs(X.*Y));%
(3)
norm(Z-Z0)%
ans=
0
(4)
surf(X,Y,Z)
xlabel('x')
ylabel('y')
shadinginterp
view([190,70])
图3.3-1指定域上的二元函数图形
.4“非数”和“空”数组
【例3.4-1】
(1)
a=0/0,b=0*log(0),c=inf-inf
a=
NaN
b=
NaN
c=
NaN
(2)
0*a,sin(a)
ans=
NaN
ans=
NaN
(3)
class(a)%
isnan(a)%
ans=
double
ans=
1
【例3.4-2】
%
rng('default')
R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN
R=
0.81470.12700.63240.2785NaN
0.90580.9134NaN0.54690.9649
LR=isnan(R)%<3>
LR=
00001
00100
%
si=find(LR)%
[ri,ci]=ind2sub(size(R),si)%
[rj,cj]=find(LR)%
disp('非数在二维数组R中的位置')
disp(['单下标时的第',int2str(si
(1)),'和第',int2str(si
(2)),'个元素'])
si=
6
9
ri=
2
1
ci=
3
5
rj=
2
1
cj=
3
5
非数在二维数组R中的位置
单下标时的第6和第9个元素
.4.1“空”数组
【例3.4-3】
(1)
a=[]
b=ones(2,0),c=zeros(2,0),d=eye(2,0)
f=rand(2,3,0,4)
a=
[]
b=
Emptymatrix:
2-by-0
c=
Emptymatrix:
2-by-0
d=
Emptymatrix:
2-by-0
f=
Emptyarray:
2-by-3-by-0-by-4
(2)
class(a)%
isnumeric(a)%
isempty(a)%
ans=
double
ans=
1
ans=
1
whicha%
ndims(a)%
size(a)%
aisavariable.
ans=
2
ans=
00
(3)
A=reshape(-4:
5,2,5)
A=
-4-2024
-3-1135
A(:
[2,4])=[]%
A=
-404
-315
.5关系操作和逻辑操作
【例3.5-1】
A=1:
9,B=10-A
r0=(A<4)%
r1=(A==B)%
A=
123456789
B=
987654321
r0=
111000000
r1=
000010000
【例3.5-2】
t=-3*pi:
pi/10:
3*pi;%
y=sin(t)./t;%
tt=t+(t==0)*eps;%
yy=sin(tt)./tt;%
subplot(1,2,1),plot(t,y),axis([-9,9,-0.5,1.2]),
xlabel('t'),ylabel('y'),title('残缺图形')
subplot(1,2,2),plot(tt,yy),axis([-9,9,-0.5,1.2])
xlabel('tt'),ylabel('yy'),title('正确图形')
图3.5-1采用近似极限处理前后的图形对照
.5.1逻辑操作
【例3.5-3】
(1)
A=[-2,-1,0,0,1,2,3]
L1=~(A>1)%
L2=(A>0)&(A<2)%
A=
-2-100123
L1=
1111100
L2=
0000100
(2)
A,B=[0,-1,1,0,1,-2,-3]
C=xor(A,B)%
A=
-2-100123
B=
0-1101-2-3
C=
1010000
【例3.5-4】
clear,t=linspace(0,3*pi,500);y=sin(t);%
%
z1=((t
w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3);%<4>
wn=~w;%<5>
z2=w*sin(pi/3)+wn.*z1;%<6>
subplot(4,1,1),plot(t,y,':
r'),axis([0,10,-1.5,1.5])
ylabel('y'),gridon
subplot(4,1,2),plot(t,z1,':
r'),axis([0,10,-0.2,1.5]),ylabel('z1')
subplot(4,1,3),plot(t,wn,':
r'),axis([0,10,-0.2,1.5]),ylabel('wn')
subplot(4,1,4),plot(t,z2,'-b'),axis([0,10,-0.2,1.5]),ylabel('z2')
xlabel('t')
图3.5-2逐段解析函数的产生
习题3
1.要求在闭区间
上产生具有10个等距采样点的一维数组。
试用两种不同的指令实现。
(提示:
冒号生成法,定点生成法)
2.由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
(提示:
find和sub2ind)
3.采用默认全局随机流,写出产生长度为1000的“等概率双位(即取-1,+1)取值的随机码”程序指令,并给出-1码的数目。
(提示:
rand,randn,randsrc等都可以用来产生所需码。
注意:
“关系符==”、“求和指令sum”的应用。
)
4.已知矩阵
,运行指令B1=A.^(0.5),B2=A^(0.5),可以观察到不同运算方法所得结果不同。
(1)请分别写出根据B1,B2恢复原矩阵A的程序。
(2)用指令检验所得的两个恢复矩阵是否相等。
(提示:
数组乘、矩阵乘。
注意:
范数指令norm用途。
)
5.在时间区间[0,10]中,绘制
曲线。
要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。
(注意:
体验数组运算的简捷。
)
6.先运行clear,formatlong,rng('default'),A=rand(3,3),然后根据A写出两个矩阵:
一个对角阵B,其相应元素由A的对角元素构成;另一个矩阵C,其对角元素全为0,而其余元素与对应的A阵元素相同。
(提示:
diag)
7.先运行指令x=-3*pi:
pi/15:
3*pi;y=x;[X,Y]=meshgrid(x,y);warningoff;Z=sin(X).*sin(Y)./X./Y;产生矩阵Z。
(1)请问矩阵Z中有多少个“非数”数据?
(2)用指令surf(X,Y,Z);shadinginterp观察所绘的图形。
(3)请写出绘制相应的“无裂缝”图形的全部指令。
(提示:
isnan,sum,eps)
8.下面有一段程序,企图用来解决如下计算任务:
有矩阵
,当
依次取10,9,8,7,6,5,4,3,2,1时,计算矩阵
“各列元素的和”,并把此求和结果存放为矩阵Sa的第k行。
例如
时,A阵为
,此时它各列元素的和是一个
行数组
,并把它保存为Sa的第3行。
问题:
该段程序的计算结果对吗?
假如计算结果不正确,请指出错误发生的根源,并改正之。
(提示:
本题专为揭示sum对行数组的作用而设计。
仔细观察以下程序运行后所得到的Sa正确吗?
fork=10:
-1:
1;A=reshape(1:
10*k,k,10);Sa(k,:
)=sum(A);end;Sa)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 数组
![提示](https://static.bdocx.com/images/bang_tan.gif)