MATLAB数值计算功能.docx
《MATLAB数值计算功能.docx》由会员分享,可在线阅读,更多相关《MATLAB数值计算功能.docx(24页珍藏版)》请在冰豆网上搜索。
MATLAB数值计算功能
实验二
第2章MATLAB数值计算功能
MATLAB强大的数值计算功能使其在诸多数学计算软件中傲视群雄,是MATLAB的基础.本章将简要介绍MATLAB的数据类型、矩阵的建立及运算.
第一节MATLAB的数据类型
MATLAB的数据类型主要包括:
数字、字符串、矩阵、单元型数据及结构型数据等,此处仅介绍几个常用类型.
一、MATLAB中的变量与常量
不需要对所使用的变量进行事先声明,也不需要指定其类型,它会自动根据所赋予变量的值或所进行的操作来确定变量的类型.如果变量重新赋值将会用新值代替旧值并以新值类型代替旧值类型.
⏹例1a=1;b=0.5;c=a*b,c=‘a*b’
⏹变量的命名规则是:
(1)变量名可以有63个字符.字母A~Z、a~z、数字和下划线‘_’都可以作为变量名,但第一个字符必须是一个字母;
(2)变量名区分大小写,如矩阵a和A是不一样的;
(3)变量名中不允许使用标点符号、空格、运算符;
(4)预定义变量名也可以像一个变量名那样使用,但函数只有在变量由命令clear删除后才能使用,所以,不主张这样使用;
(5)MATLAB提供的标准函数及命令通常是用小写字母书写.
⏹例2命令abs(A)给出了A的绝对值,但ABS(A)会导致在屏幕上显示错误信息.
二、算术表达式及显示格式
在MATLAB中对十进制数,使用科学记数法可以书写十分大和十分小的数.例如1.23E-6,代表1.23×10-6.
MATLAB有算术运算符的扩展集,它们是:
1)^幂;2)*乘;/右除(正常除);\左除;3)+加;-减
这是按序给出的运算,1)是最高优先级.在带相同优先级的运算符表达式中,按从左到右的顺序执行.圆括号()能够用于改变优先级次序.
两种不同的除法:
对于数量右除2/5得0.4与左除5\2是相同的,斜线号“靠着”的表达式或数字是分母.如
a/(b+c)即为
,而a\(b+c)即为
.
命令集4显示格式
formatdefformat将输出格式改为由defformat定义的格式,这类格式可以是如下之一:
short、long、shorte、longe、hex、+、bank、rat
也有compact或loose,它给出了一个较紧缩或较宽松的输出格式,但并不影响数值输出格式.
■例3
设p=1+1/3,先定义格式,然后在屏幕上显示p:
formatshort得1.33334位小数
formatlong得1.3333333333333314位小数
formatshorte得1.3333e+004位小数
formatlonge得1.333333333333333e+0015位小数
formathex得3ff555555555555516进制数
format+得+正:
+
formatbank得1.33美元和美分
formatrat得4/3作为一个有理数
三、数学函数
命令集5数学函数
abs(x)求x的绝对值,即|x|.
sign(x)求x的符号,如果是正的得1;负的得-1;零得0.
sqrt(x)求x的平方根,即
.
exp(x)求x的指数函数,即
.
log(x)求x的自然对数,即lnx.
log10(x)求x以10为底的对数,即
.
sin(x)求正弦x,x为弧度.
cos(x)求余弦x,x为弧度.
tan(x)求正切x,x为弧度.
cot(x)求余切x,即1/(tanx),x为弧度.
asin(x)求反正弦,即
.
acos(x)求反余弦,即
.
sec(x)求正割x,即1/(cosx).
csc(x)求余割x,即1/(sinx).
命令集6取整命令
round(x)求最接近x的整数.如果x是一个向量,则适用于所有元素.
fix(x)求0方向最接近x的整数.即负x向上四舍五入,正x向下四舍五入.
floor(x)求小于或等于x的最接近的整数.
ceil(x)求大于或等于x的最接近的整数.
rem(x,y)求整除x/y的余数.
gcd(x,y)求整数x和y的最大公因子.
lcm(x,y)求正整数x和y的最小公倍数,也能用于决定最小公因子.
第二节MATLAB的矩阵的建立与运算
矩阵是MATLAB数据存储的基本单元,而矩阵的运算是MATLAB语言的核心,几乎一切运算均是以对矩阵的操作为基础的.
一、矩阵的建立
1.直接输入法从键盘上输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵.规则如下:
⏹输入矩阵时要以“[]”为其标识符号,矩阵的所有元素必须都在中括号内.
⏹矩阵同行元素之间由空格或逗号分隔,行与行之间用分号或回车键分隔.
⏹矩阵大小不需要预先定义.
⏹矩阵元素可以是运算表达式.
⏹若"[]"中无元素表示空矩阵.
⏹例4>>A=[123;456;789]
A=
123
456
789
2.利用“:
”生成矩阵
(1)生成等距的行向量,如
>>a=1:
0.5:
4
a=
Columns1through7
11.522.533.54
(2)截取指定矩阵中的部分生成新矩阵,如
>>B=A(1:
2,:
)
B=
123
456
即矩阵B是例4中A矩阵的前两行生成.
3.外部文件读入法以文件的形式存储,适合大型矩阵输入.读入形式
>>Load+文件名
⏹Load函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量,如果不给定文件名,则将自动认为matlab.mat文件为操作对象,如果该文件在MATLAB搜索路径中不存在时,系统将会报错.
4.特殊矩阵的生成
命令集71矩阵、零矩阵、单位矩阵和随机矩阵
ones(n)建立一个n×n的1矩阵.
ones(m,n)建立一个m×n的1矩阵.
ones(size(A))建立一个和矩阵A同样大小的1矩阵.
zeros(n)建立一个n×n的0矩阵.
zeros(m,n)建立一个m×n的0矩阵.
zeros(size(A))建立一个和矩阵A同样大小的0矩阵.
eye(n)建立一个n×n的单位矩阵.
eye(m,n)建立一个m×n的单位矩阵.
eye(size(A))建立一个和矩阵A同样大小的单位矩阵.
rand产生在0~1之间均匀分布的随机数;每调用一次给一个新的数值.
rand+i*rand产生一个复数随机数.
rand(n)产生一个n×n的矩阵,其元素为0~1之间均匀分布的随机数.
rand(m,n)产生一个m×n的矩阵,其元素为0~1之间均匀分布的随机数.
二、矩阵的运算
MATLAB中的大多数运算可以直接对矩阵应用.除了算术运算+、-、*、^、/、\外,还有用于转置和共轭的运算符(撇号’:
实数时为转置,复数时为共轭转置,复数时转置为.’)、关系运算符和逻辑运算符.
1.除法在MATLAB中,有两个矩阵除法的符号,左除\和右除/.如果A是一个非奇异方阵,那么A\B和B/A对应A的逆与B的左乘
和右乘
,即分别等价于命令inv(A)*B和B*inv(A).
2.元素操作算术运算
算术运算也可以元素与元素逐次进行.参与运算的矩阵维数要相同.如果运算是由一点进行的,那么这个运算实行的是元素方式,称为数组运算或点运算.对于加法和减法,数组运算(点运算)和矩阵运算没有差别.数组运算(点运算)符是:
+-.*./.\.^
⏹例5>>A=[123;456;789];B=ones(3);C=A.*B
C=
123
456
789
3.关系运算符
MATLAB有用于比较矩阵的六个关系运算符,也可以对矩阵与一个标量进行比较,即矩阵中的每个元素与标量进行比较.
关系运算符如下:
<小于
<=小于等于
>大于
>=大于等于
==等于
~=不等于
关系运算符比较对应的元素,产生一个仅包含1和0的具有相同维数的矩阵.其元素是:
1比较结果是真
0比较结果是假
在一个表达式中,算术运算符优先级最高,其次是关系运算符,最低级别是逻辑运算符.圆括号可以改变其顺序.
4.逻辑运算符
在MATLAB中有四种逻辑运算符:
&与;|或;~非;xor异或;
逻辑运算符的运算优先级最低.在一个表达式中,关系运算符和算术运算符的运算级别要高于逻辑运算符.
xor和or之间的差别在于:
表达式中至少有一个是真,那么or是真;xor是表达式中有一个是真但不能两者均为真时才为真.
运算符&和|比较两个相同维数的矩阵,它也能使一个标量与一个矩阵进行比较.逻辑运算符是按元素比较的.零元素表示逻辑值假,任何其他值的元素表示逻辑值真.其结果是一个包含1和0的矩阵.
命令集8逻辑运算符
A&B返回一个与A和B相同维数的矩阵.在这个矩阵中,A和B对应元素都为非零时,则对应项为1;有一个为零的项则为0.
A|B返回一个与A和B相同维数的矩阵.在这个矩阵中,A和B对应元素只要有一个为非零,则对应项为1;两个矩阵对应元素均为零时,则对应项为0.
~A返回一个与A和B相同维数的矩阵.在这个矩阵中,A对应元素是零时,则对应项为1;A对应元素是非零时,则对应项为0.
xor(A,B)返回一个与A和B相同维数的矩阵.在这个矩阵中,如果A和B均为零或均为非零时,则对应项为0;如果A或B是非零但不是两者同时为非零时,则对应项为1.
练习题
1.在计算机上,求下列表达式的值.
①
;
②
,其中
;
③
,其中
;
④
,其中
;
⑤
,其中
.
2.完成下列操作,观察结果:
①a=1:
5,b=(1:
5)’
②y=0:
pi/4:
pi
③x=(0:
0.2:
3)’,y=exp(-x).*sin(x)
④A=[123;456;789]
B=[1,2,3;4,5,6;7,8,9]
C=[123
456,
789]
⑤
3.已知
求
①AB-2A,②AB-BA,A.*B,B.*A,③
.
4.
,求
.
5.
,求
.
6.x=(1,1,1,1),y=(2,3,4,5)’,求
.
7.完成下列操作并观察结果
①
②
③
④
⑤
⑥
⑦
⑧
⑨C=[ones(4),zeros(4);eye(4),rand(4)]
⑩C=[ones(4),zeros(4);eye(4),rand(5)]
8.建立向量
①
②
9.完成下列命令,观察结果
①a=[1:
3;4:
6;7:
9];x=5;xa=x<=a
②b=[041;108;200];ab=a&b
3n_b=~b
10.练习format命令:
对第1题练习各种输出格式.
11.计算P265
x=1;y
(1)=x;
fork=1:
15
x=1/(x+1);y(k)=x;
end
y
12.计算P266
x=1;y
(1)=x;w=7/25;
fork=1:
10
x=w*x+(1-w)/(x+1);y(k)=x;
end
y
练习题
1.在计算机上,求下列表达式的值.
①>>w=sqrt
(2)*(1+0.34245*10^(-6))
w=
1.4142
>>a=3.5;
>>b=5;
>>c=-9.8;
②>>x=(2*pi*a+(b+c)/(pi+a*b*c)-exp
(2))/(tan(b+c)+a)
x=
0.9829
>>
>>a=3.32;
>>b=-7.9;
③>>y=2*pi*(a^2)*((1-pi/4)*b-(0.8333-pi/4)*a)
y=
-128.4271
>>
>>t=2;
④>>z=1/2*exp(2*t)*log(t+sqrt(1+t^2))
z=
39.4099
⑤>>x=1+2i;
>>y=3-sqrt(17);
>>u=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))
u=
-0.3488+0.3286i
2.完成下列操作,观察结果:
①>>a=1:
5,b=(1:
5)'
a=
12345
b=
1
2
3
4
5
②>>y=0:
pi/4:
pi
y=
00.78541.57082.35623.1416
③>>x=(0:
0.2:
3)',y=exp(-x).*sin(x)
x=
0
0.2000
0.4000
0.6000
0.8000
1.0000
1.2000
1.4000
1.6000
1.8000
2.0000
2.2000
2.4000
2.6000
2.8000
3.0000
y=
0
0.1627
0.2610
0.3099
0.3223
0.3096
0.2807
0.2430
0.2018
0.1610
0.1231
0.0896
0.0613
0.0383
0.0204
0.0070
④>>A=[123;456;789]
A=
123
456
789
>>B=[1,2,3;4,5,6;7,8,9]
B=
123
456
789
>>C=[123
456,
789]
C=
123
456
789
⑤>>A=[sin(pi),2*cos(pi/3);5*pi,-exp
(2)]
A=
0.00001.0000
15.7080-7.3891
3.
>>A=[111;-111;1-11];
>>B=[121;13-1;214;];
>>A*B-2*A
ans=
242
400
024
>>A*B-B*A,A.*B,B.*A
ans=
440
5-3-1
-31-1
ans=
121
-13-1
2-14
ans=
121
-13-1
2-14
>>inv(A)*B-inv(B)*A
ans=
Columns1through2
3.75002.2500
-2.0000-1.0000
-0.25001.2500
Column3
1.2500
-2.0000
1.2500
4.
>>x=[21-3i;5-0.65];
>>y=1/2*exp(2*x)*log(x+sqrt(1+x^2))
y=
1.0e+004*
0.0057-0.0007i0.0049-0.0027i
1.9884-0.3696i1.7706-1.0539i
5.
>>D=[2310-0.7780;41-45655;325032;6-9.54543.14];
>>D^2,D.*D,D.^2
ans=
1.0e+003*
0.9141-0.22390.63210.0251
1.20802.7123-2.68691.8707
1.1330-0.21032.02810.1255
1.49370.7293-0.45521.6902
ans=
1.0e+003*
0.52900.10000.00060
1.68102.02504.22500.0250
1.02400.025001.0240
0.03600.09102.91600.0099
ans=
1.0e+003*
0.52900.10000.00060
1.68102.02504.22500.0250
1.02400.025001.0240
0.03600.09102.91600.0099
6.
>>x=[1,1,1,1];y=[2,3,4,5]';
>>x*y,y*x
ans=
14
ans=
2222
3333
4444
5555
7.完成下列操作并观察结果
①>>ones(6),ones(5,6),ones(6,5)
ans=
111111
111111
111111
111111
111111
111111
ans=
111111
111111
111111
111111
111111
ans=
11111
11111
11111
11111
11111
11111
②>>zeros(4),zeros(3,4),zeros(4,3)
ans=
0000
0000
0000
0000
ans=
0000
0000
0000
ans=
000
000
000
000
③>>eye(5),eye(4,5),eye(5,4)
ans=
10000
01000
00100
00010
00001
ans=
10000
01000
00100
00010
ans=
1000
0100
0010
0001
0000
④>>x=rand+i*rand,A=rand(3),B=rand(3,4)
x=
0.8180+0.6602i
A=
Columns1through2
0.34200.5341
0.28970.7271
0.34120.3093
Column3
0.8385
0.5681
0.3704
B=
Columns1through2
0.70270.6946
0.54660.6213
0.44490.7948
Columns3through4
0.95680.1730
0.52260.9797
0.88010.2714
⑤
>>hilb(3),hilb(4),invhilb(3)
ans=
1.00000.50000.3333
0.50000.33330.2500
0.33330.25000.2000
ans=
Columns1through3
1.00000.50000.3333
0.50000.33330.2500
0.33330.25000.2000
0.25000.20000.1667
Column4
0.2500
0.2000
0.1667
0.1429
ans=
9-3630
-36192-180
30-180180
⑥>>x=[12345];
>>y=[54321];
>>T=toeplitz(x,y),S=toeplitz(x)
Warning:
Firstelementofinputcolumndoesnotmatchfirstelementofinputrow.
Columnwinsdiagonalconflict.
>Intoeplitzat21
T=
14321
21432
32143
43214
54321
S=
12345
21234
32123
43212
54321
⑦>>A=compan(x),B=compan(y)
A=
-2-3-4-5
1000
0100
0010
B=
-0.8000-0.6000-0.4000-0.2000
1.0000000
01.000000
001.00000
⑧>>vander(x),vander(y)
ans=
11111
168421
8127931
256641641
6251252551
ans=
6251252551
256641641
8127931
168421
11111
⑨>>C=[ones(4),zeros(4);eye(4),rand(4)]
C=
Columns1through5
1.00001.00001.00001.00000
1.00001.00001.00001.00000
1.00001.00001.00001.00000
1.00001.00001.00001.00000
1.00000000.0099
01.0000000.1389
001.000000.2028
0001.00000.1987
Columns6through8
000
000
000
000
0.60380.74680.4186
0.27220.44510.8462
0.19880.93180.5252
0.01530.46600.2026
⑩>>C=[ones(4),zeros(4);eye(4),rand(5)]
?
?
?
Errorusing==>horzcat
Allmatricesonarowinthebracketedexpressionmusthavethe
samenumberofrows.
8.建立向量
>>x=(1:
3),y=(1:
0.5:
3),z=(4:
-0.5