MATLAB实验.docx
《MATLAB实验.docx》由会员分享,可在线阅读,更多相关《MATLAB实验.docx(66页珍藏版)》请在冰豆网上搜索。
MATLAB实验
实验报告本
课程名称:
MATLAB实验
指导老师:
班级:
电信
姓名:
学号:
~学年度第学期
广东石油化工学院计算机与电子信息学院
目录
实验一、基础准备及入门1-5页
实验二、数值数组及其运算6-17页
实验三、字符串、元胞和构架数组17-25页
实验四、符号计算25-34页
实验五、数据和函数的可视化35-43页
实验一基础准备及入门
实验目的:
1、讲述MATLAB正常运行所必须具备的基础条件;
2、是简明系统地介绍高度集成的Desktop操作桌面的功能和使用方法。
实验内容:
.1.1复数和复数矩阵
【例1.3.3-1】复数
表达,及计算
。
(1)z1=3+4i
z1=3.0000+4.0000i
(2)z2=1+2*i
z3=2*exp(i*pi/6)
z=z1*z2/z3
z2=1.0000+2.0000i
z3=1.7321+1.0000i
z=0.3349+5.5801i
【例1.3.3-2】复数矩阵的生成及运算
A=[1,3;2,4]-[5,8;6,9]*i
B=[1+5i,2+6i;3+8*i,4+9*i]
C=A*B
A=
1.0000-5.0000i3.0000-8.0000i
2.0000-6.0000i4.0000-9.0000i
B=
1.0000+5.0000i2.0000+6.0000i
3.0000+8.0000i4.0000+9.0000i
C=
1.0e+002*
0.99001.1600-0.0900i
1.1600+0.0900i1.3700
【例1.3.3-3】求上例复数矩阵C的实部、虚部、模和相角。
C_real=real(C)
C_imag=imag(C)
C_magnitude=abs(C)
C_phase=angle(C)*180/pi%以度为单位计算相角
C_real=
99116
116137
C_imag=
0-9
90
C_magnitude=
99.0000116.3486
116.3486137.0000
C_phase=
0-4.4365
4.43650
【例1.3.3-4】用MATLAB计算
能得到–2吗?
(1)a=-8;
r=a^(1/3)
r=1.0000+1.7321i
(2)m=[0,1,2];
R=abs(a)^(1/3);
Theta=(angle(a)+2*pi*m)/3;
rrr=R*exp(i*Theta)
rrr=1.0000+1.7321i-2.0000+0.0000i1.0000-1.7321i
(3)
t=0:
pi/20:
2*pi;x=R*sin(t);y=R*cos(t);
plot(x,y,'b:
'),grid
holdon
plot(rrr
(1),'.','MarkerSize',50,'Color','r')
plot(rrr([2,3]),'o','MarkerSize',15,'Color','b')
axis([-3,3,-3,3]),axissquare
holdoff
图1.3-2
.1.2计算结果的图形表示
【例1.3.4-1】画出衰减振荡曲线
及其它的包络线
。
的取值范围是
。
(图1.3-3)
t=0:
pi/50:
4*pi;
y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);
plot(t,y,'-r',t,y0,':
b',t,-y0,':
b')
grid
图1.3-3
【例1.3.4-2】画出
所表示的三维曲面(图1.3-4)。
的取值范围是
。
clear;x=-8:
0.5:
8;
y=x';
X=ones(size(y))*x;
Y=y*ones(size(x));
R=sqrt(X.^2+Y.^2)+eps;%<5>
Z=sin(R)./R;%<6>
surf(X,Y,Z);%
colormap(cool)%
xlabel('x'),ylabel('y'),zlabel('z')
图1.3-4
.1.3内存变量查阅、删除的指令操作法
【例1.7.2-1】在指令窗中运用who,whos查阅MATLAB内存变量。
who
Yourvariablesare:
AC_magnitudeSmz1
BC_phaseThetarz2
CC_realarrrz3
C_imagRansz
whos
NameSizeBytesClassAttributes
A2x264doublecomplex
B2x264doublecomplex
C2x264doublecomplex
C_imag2x232double
C_magnitude2x232double
C_phase2x232double
C_real2x232double
R1x18double
S1x18double
Theta1x324double
a1x18double
ans1x18double
m1x324double
r1x116doublecomplex
rrr1x348doublecomplex
【例1.7.2-2】在指令窗中运用clear指令可以删除内存中的变量。
clearBnumber
who
Yourvariablesare:
AC_magnitudeSmz1
BC_phaseThetarz2
CC_realarrrz3
C_imagRansz
【例1.7.2-3】通过“工作空间浏览器”的运作,采用图形显示内存变量Z。
图1.7-3
.1.4数据文件的存取
【例1.7.4-1】数据的存取。
(假定内存中已经存在变量X,Y,Z)
(1)
mkdir('c:
\','my_dir');
cdc:
\my_dir
savesafXYZ
dir
>>mkdir('c:
\','my_dir');
cdc:
\my_dir
savesafXYZ
dir
...saf.mat
(2)
clear
loadsafZ
who
>>clear
loadsafZ
who
Yourvariablesare:
Z
实验心得:
通过本次实验,了解了MATLAB的正确安装方法和MATLAB环境的启动,指令窗是MATLAB最重要的操作界面,并初步认识了历史指令窗、当前目录浏览器、工作空间浏览器、内存数组编辑器、交互界面分类目录窗、M文件编辑/调试器、及帮助导航/浏览器。
实验二数值数组及其运算
实验目的:
1、了解数值数组(NumericArray)和数组运算(ArrayOperations)
2、一、二维数值数组的创建、寻访;数组运算和矩阵运算的区别;实现数组运算的基本函数;多项式的表达、创建和操作;常用标准数组生成函数和数组构作技法;高维数组的创建、寻访和操作;非数NaN、“空”数组概念和应用;关系和逻辑操作。
实验内容:
引导
【例2.1-1】绘制函数
在
时的曲线。
x=0:
0.1:
1
y=x.*exp(-x)
plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)')
图2.1-1
>>x=0:
0.1:
1
x=
Columns1through6
00.10000.20000.30000.40000.5000
Columns7through11
0.60000.70000.80000.90001.0000
>>y=x.*exp(-x)
y=
Columns1through6
00.09050.16370.22220.26810.3033
Columns7through11
0.32930.34760.35950.36590.3679
>>plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)')
一维数组的创建和寻访
一维数组的子数组寻访和赋值
【例2.2.2-1】子数组的寻访(Address)。
rand('state',0)
x=rand(1,5)
x(3)
x([125])
x(1:
3)
x(3:
end)%
x(3:
-1:
1)%
x(find(x>0.5))
x([12344321])
>>rand('state',0)
>>x=rand(1,5)
x=
0.95010.23110.60680.48600.8913
>>x(3)
ans=
0.6068
>>x([125])
ans=
0.95010.23110.8913
>>x(1:
3)
ans=
0.95010.23110.6068
>>x(3:
end)
ans=
0.60680.48600.8913
>>x(3:
-1:
1)
ans=
0.60680.23110.9501
>>x(find(x>0.5))
ans=
0.95010.60680.8913
>>x([12344321])
ans=
Columns1through5
0.95010.23110.60680.48600.4860
Columns6through8
0.60680.23110.9501
二维数组的创建
直接输入法
【例2.3.1-1】在MATLAB环境下,用下面三条指令创建二维数组C。
a=2.7358;b=33/79;
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
>>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
>>
【例2.3.1-2】复数数组的另一种输入方式。
M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]
CN=M_r+i*M_i
>>M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]
M_r=
123
456
M_i=
111213
141516
>>CN=M_r+i*M_i
CN=
1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i
4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i
利用M文件创建和保存数组
【例2.3.2-1】创建和保存数组AM的MyMatrix.m文件。
(1)
%MyMatrix.mCreationandpreservationofmatrixAM
AM=[101,102,103,104,105,106,107,108,109;...
201,202,203,204,205,206,207,208,209;...
301,302,303,304,305,306,307,308,309];
二维数组元素的标识
“逻辑1”标识
【例2.4.3-1】找出数组
中所有绝对值大于3的元素。
A=zeros(2,5);
A(:
)=-4:
5
L=abs(A)>3
islogical(L)
X=A(L)
>>A=zeros(2,5);A(:
)=-4:
5
A=
-4-2024
-3-1135
>>L=abs(A)>3
L=
10001
00001
>>islogical(L)
ans=
1
>>X=A(L)
X=
-4
4
5
二维数组的子数组寻访和赋值
【例2.5-1】不同赋值方式示例。
A=zeros(2,4)
A(:
)=1:
8
s=[235];
A(s)
Sa=[102030]'
A(s)=Sa
A(:
[23])=ones
(2)
>>A=zeros(2,4)
A=
0000
0000
>>A(:
)=1:
8
A=
1357
2468
>>s=[235];A(s)
ans=
235
>>Sa=[102030]'
Sa=
10
20
30
>>A(s)=Sa
A=
120307
10468
>>A(:
[23])=ones
(2)
A=
1117
10118
执行数组运算的常用函数
执行数组运算的常用函数
【例2.6.2-1】演示pow2的数组运算性质。
A=[1:
4;5:
8]
pow2(A)
>>A=[1:
4;5:
8]
A=
1234
5678
>>pow2(A)
ans=
24816
3264128256
数组运算和矩阵运算
数组运算和矩阵运算指令对照汇总
【例2.7.1-1】两种不同转置的比较
clear;A=zeros(2,3);
A(:
)=1:
6;
A=A*(1+i)
A_A=A.'
A_M=A'
>>clear;A=zeros(2,3);A(:
)=1:
6;A=A*(1+i)
A=
1.0000+1.0000i3.0000+3.0000i5.0000+5.0000i
2.0000+2.0000i4.0000+4.0000i6.0000+6.0000i
>>A_A=A.'
A_A=
1.0000+1.0000i2.0000+2.0000i
3.0000+3.0000i4.0000+4.0000i
5.0000+5.0000i6.0000+6.0000i
>>A_M=A'
A_M=
1.0000-1.0000i2.0000-2.0000i
3.0000-3.0000i4.0000-4.0000i
5.0-5.0000i6.0000-6.0000i
2.9标准数组生成函数和数组操作函数
2.9.2标准数组生成函数
【例2.9.1-1】标准数组产生的演示。
ones(1,2)
ones
(2)
randn('state',0)
randn(2,3)
D=eye(3)
diag(D)
diag(diag(D))
repmat(D,1,3)
>>ones(1,2)
ans=
11
>>ones
(2)
ans=
11
11
>>randn('state',0)
>>randn(2,3)
ans=
-0.43260.1253-1.1465
-1.66560.28771.1909
>>D=eye(3)
D=
100
010
001
>>diag(diag(D))
ans=
100
010
001
>>diag(D)
ans=
1
1
1
>>repmat(D,1,3)
ans=
100100100
010010010
001001001
数组操作函数
【例2.9.2-1】diag与reshape的使用演示。
a=-4:
4
A=reshape(a,3,3)
a1=diag(A,1)
A1=diag(a1,-1)
>>a=-4:
4
a=
-4-3-2-101234
>>A=reshape(a,3,3)
A=
-4-12
-303
-214
>>a1=diag(A,1)
a1=
-1
3
>>A1=diag(a1,-1)
A1=
000
-100
030
数组构作技法综合
【例2.10-1】数组的扩展。
(1)数组的赋值扩展法
A=reshape(1:
9,3,3)
A(5,5)=111
A(:
6)=222
>>A=reshape(1:
9,3,3)
A=
147
258
369
>>A(5,5)=111
A=
14700
25800
36900
00000
0000111
>>A(:
6)=222
A=
14700222
25800222
36900222
00000222
0000111222
高维数组
高维数组的创建
【例2.11.1-1】“全下标”元素赋值方式创建高维数组演示。
A(2,2,2)=1
B(2,5,:
)=1:
3
A(:
:
1)=
147
258
369
A(:
:
2)=
000
010
000
B(:
:
1)=
00000
00001
B(:
:
2)=
00000
00002
B(:
:
3)=
00000
00003
高维数组的标识
【例2.11.2-1】维数、大小和长度
clear;A=reshape(1:
24,2,3,4);
dim_A=ndims(A)
size_A=size(A)
L_A=length(A)
dim_A=
3
size_A=
234
L_A=
4
高维数组构作和操作函数汇总
【例2.11.3-1】数组元素对称交换指令flipdim的使用示例。
A=reshape(1:
18,2,3,3)
A(:
:
1)=
135
246
A(:
:
2)=
7911
81012
A(:
:
3)=
131517
141618
flipdim(A,1)
ans(:
:
1)=
246
135
ans(:
:
2)=
81012
7911
ans(:
:
3)=
141618
131517
flipdim(A,3)
ans(:
:
1)=
131517
141618
ans(:
:
2)=
7911
81012
ans(:
:
3)=
135
246
“非数”和“空”数组
非数NaN
【例2.12.1-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)a==nan
ans=
0
(4)a~=nan
a==b
b>c
ans=
1
ans=
0
ans=
0
(5)class(a)
isnan(a)
ans=
double
ans=
1
“空”数组
【例2.12.2-1】关于“空”数组的算例。
(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)b_c1=b.*c
b_c2=b'*c
b_c3=b*c'
b_c1=
Emptymatrix:
2-by-0
b_c2=
[]
b_c3=
00
00
(4)a==b
b==c
c>d
a==0
a~=0
(5)A=reshape(-4:
5,2,5)
L2=A>10
find(L2)
(6)A(:
[2,4])=[]
实验心得:
通过本实验,了解了一、二维数值数组的创建、寻访;数组运算和矩阵运算的区别;实现数组运算的基本函数;多项式的表达、创建和操作;常用标准数组生成函数和数组构作技法;高维数组的创建、寻访和操作;非数NaN、“空”数组概念和应用;关系和逻辑操作。
实验三字符串、元胞和构架数组
实验目的:
1、了解内建数据类型(Built-indatatype)
2、认识数值数组(NumericArray),字符串数组(CharacterStringArray)、元胞数组(Cellarray)和构架数组(Structurearray)
实验内容:
.1.5字符串入门
【例3.1.1-1】先请读者实际操作本例,以体会数值量与字符串的区别。
clear
a=12345.6789
class(a)
a_s=size(a)
b='S'
class(b)
b_s=size(b)
whos
a=1.2346e+004
a_s=11
b=S
ans=char