MATLAB学习资料自学版2.docx
- 文档编号:23259558
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:74
- 大小:268.48KB
MATLAB学习资料自学版2.docx
《MATLAB学习资料自学版2.docx》由会员分享,可在线阅读,更多相关《MATLAB学习资料自学版2.docx(74页珍藏版)》请在冰豆网上搜索。
MATLAB学习资料自学版2
第2章MATLAB数值计算
MATLAB的数学计算=数值计算+符号计算
其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。
2.1变量和数据
2.1.1数据类型
数据类型包括:
数值型、字符串型、元胞型、结构型等
数值型=双精度型、单精度型和整数类
整数类=无符号类(uint8、uint16、uint32、uint64)和符号类整数(int8、int16、int32、int64)。
2.1.2数据
1.数据的表达方式
▪可以用带小数点的形式直接表示
▪用科学计数法
▪数值的表示范围是10-309~10309。
以下都是合法的数据表示:
-2、5.67、2.56e-56(表示2.56×10-56)、4.68e204(表示4.68×10204)
2.矩阵和数组的概念
在MATLAB的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下:
▪标量:
是指1×1的矩阵,即为只含一个数的矩阵。
▪向量:
是指1×n或n×1的矩阵,即只有一行或者一列的矩阵。
▪矩阵:
是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0×0矩阵为空矩阵([])。
▪数组:
是指n维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。
3.复数
复数由实部和虚部组成,MATLAB用特殊变量“i”和“j”表示虚数的单位。
复数运算不需要特殊处理,可以直接进行。
复数可以有几种表示:
z=a+b*i或z=a+b*j
z=a+bi或z=a+bj(当b为标量时)
z=r*exp(i*theta)
●得出一个复数的实部、虚部、幅值和相角。
a=real(z)%计算实部
b=imag(z)%计算虚部
r=abs(z)%计算幅值
theta=angle(z)%计算相角
说明:
复数z的实部a=r*cos(θ);
复数z的虚部b=r*sin(θ);
复数z的幅值
;
复数z的相角theta=arctg(b/a),以弧度为单位。
a=1-2*i
a=
1.0000-2.0000i
real(a)
ans=
1
imag(a)
ans=
-2
abs(a)
ans=
2.2361
angle(a)*180/pi%以角度为单位计算相角
ans=
-63.4349
2.1.3变量
1.变量的命名规则
▪变量名区分字母的大小写。
例如,“a”和“A”是不同的变量。
▪变量名不能超过63个字符,第63个字符后的字符被忽略,对于MATLAB6.5版以前的变量名不能超过31个字符。
▪变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能含有空格和标点符号(如,。
%等)。
例如,“6ABC”、“AB%C”都是不合法的变量名。
▪关键字(如if、while等)不能作为变量名。
2.特殊变量
MATLAB有一些自己的特殊变量,当MATLAB启动时驻留在内存。
表2.1特殊变量表
特殊变量
取值
ans
运算结果的默认变量名
pi
圆周率π
eps
计算机的最小数
flops
浮点运算数
inf
无穷大,如1/0
NaN或nan
非数,如0/0、∞/∞、0×∞
i或j
i=j=
nargin
函数的输入变量数目
nargout
函数的输出变量数目
realmin
最小的可用正实数
realmax
最大的可用正实数
●在MATLAB中系统将计算的结果自动赋给名为“ans”的变量。
2*pi
ans=
6.2832
2.2矩阵和数组
MATLAB最基本也是最重要的功能就是进行实数或复数矩阵的运算。
2.2.1矩阵输入
(1)矩阵元素应用方括号([])括住;
(2)每行内的元素间用逗号或空格隔开;
(3)行与行之间用分号或回车键隔开;
(4)元素可以是数值或表达式。
1.通过显式元素列表输入矩阵
c=[12;34;53*2]%[]表示构成矩阵,分号分隔行,空格分隔元素
c=
12
34
56
用回车键代替分号分隔行:
c=[12
34
56]
12
34
56
2.通过语句生成矩阵
(1)使用from:
step:
to方式生成向量
from:
to
from:
step:
to
说明:
from、step和to分别表示开始值、步长和结束值。
当step省略时则默认为step=1;
当step省略或step>0而from>to时为空矩阵,当step<0而from 【例2.1】使用“from: step: to”方式生成以下矩阵。 x1=2: 5 x1= 2345 x2=2: 0.5: 4 x2= 2.00002.50003.00003.50004.0000 x3=5: -1: 2 x3= 5432 x4=2: -1: 3%空矩阵 x4= Emptymatrix: 1-by-0 x5=2: -1: 0.5 x5= 21 x6=[1: 2: 5;1: 3: 7]%两行向量构成矩阵 x6= 135 147 (2)使用linspace和logspace函数生成向量 linspace(a,b,n) 说明: a、b、n三个参数分别表示开始值、结束值和元素个数。 生成从a到b之间线性分布的n个元素的行向量,n如果省略则默认值为100。 ▪logspace用来生成对数等分向量,它和linspace一样直接给出元素的个数而得出各个元素的值。 logspace(a,b,n) 说明: a、b、n三个参数分别表示开始值、结束值和数据个数,n如果省略则默认值为50。 生成从10a到10b之间按对数等分的n个元素的行向量。 【例2.2】用linspace和logspace函数生成行向量。 x1=linspace(0,2*pi,5)%从0到2*pi等分成5个点 x1= 01.57083.14164.71246.2832 x2=logspace(0,2,3)%从1到100对数等分成3个点 x2= 110100 3.由矩阵生成函数产生特殊矩阵 MATLAB提供了很多能够产生特殊矩阵的函数,各函数的功能如表2.2所示。 表2.2矩阵生成函数 函数名 功能 例子 输入 结果 zeros(m,n) 产生m×n的全0矩阵 zeros(2,3) ans= 000 000 ones(m,n) 产生m×n的全1矩阵 ones(2,3) ans= 111 111 rand(m,n) 产生均匀分布的随机矩阵,元素取值范围0.0~1.0。 rand(2,3) ans= 0.95010.60680.8913 0.23110.48600.7621 randn(m,n) 产生正态分布的随机矩阵 randn(2,3) ans= -0.43260.1253-1.1465 -1.66560.28771.1909 magic(N) 产生N阶魔方矩阵(矩阵的行、列和对角线上元素的和相等) magic(3) ans= 816 357 492 eye(m,n) 产生m×n的单位矩阵 eye(3) ans= 100 010 001 注意: zeros、ones、rand、randn和eye函数当只有一个参数n时,则为n×n的方阵; 当eye(m,n)函数的m和n参数不相等时则单位矩阵会出现全0行或列。 【例2.3】查看eye函数的功能。 X1=eye(2,3) X1= 100 010 X2=eye(3,2) X2= 10 01 00 4.通过MAT数据文件加载矩阵 通过“load”命令或选择菜单“File”→“ImportData”命令加载MAT数据文件来创建矩阵。 5.在M文件中创建矩阵 M文件实际上是一种包含MATLAB代码的文本文件; 通过在MATLAB命令窗口中运行M文件创建矩阵。 2.2.2矩阵元素和操作 矩阵和多维数组都是由多个元素组成的,每个元素通过下标来标识。 1.矩阵的下标 (1)全下标方式 矩阵中的元素可以用全下标方式标识,即由行下标和列下标表示,一个m×n的a矩阵的第i行第j列的元素表示为a(i,j)。 注意: ●如果在提取矩阵元素值时,矩阵元素的下标行或列(i,j)大于矩阵的大小(m,n),则MATLAB会提示出错; ●而在给矩阵元素赋值时,如果行或列(i,j)超出矩阵的大小(m,n),则MATLAB自动扩充矩阵,扩充部分以0填充。 a=[12;34;56] a= 12 34 56 a(3,3)%提取a(3,3)的值 ? ? ? Indexexceedsmatrixdimensions. a(3,3)=9%给a(3,3)赋值 a= 120 340 569 (2)单下标方式 先把矩阵的所有列按先左后右的次序连接成“一维长列”,然后对元素位置进行编号。 以m×n的矩阵a为例,若元素a(i,j)则对应的“单下标”为s=(i-1)×m+j。 2.子矩阵块的产生 子矩阵是从对应矩阵中取出一部分元素构成,用全下标和单下标方式取子矩阵。 (1)用全下标方式 矩阵a为图2.2所示,则: ▪取行数为1、3,列数为2、3的元素构成子矩阵。 a([13],[23]) ans= 20 69 ▪取行数为1~3,列数为2~3的元素构成子矩阵,“1: 3”表示1、2、3行下标。 a(1: 3,2: 3) ans= 20 40 69 ▪取所有行数即为1~3,列数为3的元素构成子矩阵,“: ”表示所有行或列。 a(: 3) ans= 0 0 9 ▪取行数为1~3,列数为3的元素构成子矩阵,用“end”表示某一维数中的最大值,即3。 a(1: 3,end) ans= 0 0 9 (2)用单下标方式 取单下标为1、3、2、6的元素构成子矩阵。 a([13;26]) ans= 15 36 (3)逻辑矩阵 子矩阵也可以利用逻辑矩阵来标识; 逻辑矩阵是大小和对应矩阵相同,而元素值为0或者1的矩阵。 可以用a(L1,L2)来表示子矩阵,其中L1、L2为逻辑向量,当L1、L2的元素为0则不取该位置元素,反之则取该位置的元素。 【例2.5】利用逻辑矩阵来提取矩阵,其中矩阵a如上图2.2所示。 l1=logical([101])%给出逻辑向量l1 l1= 101 l2=logical([110])%给出逻辑向量l2 l2= 110 a(l1,l2)%取出1、3行且1、2列的元素 ans= 12 56 【例2.5续】逻辑矩阵可以由矩阵进行逻辑运算得出。 b=a>1%得出逻辑向量b b= 010 110 111 a(b)%按单下标顺序排成长列 ans= 3 5 2 4 6 9 3.矩阵的赋值 ▪全下标方式: a(i,j)=b,给a矩阵的部分元素赋值则b矩阵的行列数必须等于a矩阵的行列数。 cleara a(1: 2,1: 3)=[111;111]%给第一、二行元素赋值为全1 a= 111 111 ▪单下标方式: a(s)=b,b为向量,元素个数必须等于a矩阵的元素个数。 a(5: 6)=[23]%给第5、6元素赋值 a= 112 113 ▪全元素方式: a(: )=b,给a矩阵的所有元素赋值则b矩阵的元素总数必须等于a矩阵的元素总数,但行列数不一定相等。 a=[12;34;56] a= 12 34 56 b=[123;456] b= 123 456 a(: )=b%按单下标方式给a赋值 a= 15 43 26 4.矩阵元素的删除 删除操作就是简单地将其赋值为空矩阵(用[]表示)。 a=[120;340;569] a= 120 340 569 a(: 3)=[]%删除一列元素 a= 12 34 56 a (1)=[]%删除一个元素,则矩阵变为行向量 a= 35246 a=[]%删除所有元素为空矩阵 a= [] 5.生成大矩阵 在MATLAB中,可以通过方括号“[]”实现将小矩阵联接起来生成一个较大的矩阵。 a=[120;340;569] a= 120 340 569 [a;a]%联接成6×3的矩阵 ans= 120 340 569 120 340 569 a=[120;340;569] [aa]%联接成3×6的矩阵 ans= 120120 340340 569569 a=[120;340;569] [a(1: 2,1: 2)10*a(1: 2,2: 3)]%计算并联接 ans= 12200 34400 6.矩阵的翻转 a= 120 340 569 表2.3常用矩阵翻转函数 函数名 功能 例子 输入 结果 triu(X) 产生X矩阵的上三角矩阵,其余元素补0。 triu(a) ans= 120 040 009 tril(X) 产生X矩阵的下三角矩阵,其余元素补0。 tril(a) ans= 100 340 569 flipud(X) 使矩阵X沿水平轴上下翻转 flipud(a) ans= 569 340 120 fliplr(X) 使矩阵X沿垂直轴左右翻转 fliplr(a) ans= 021 043 965 flipdim(X,dim) 使矩阵X沿特定轴翻转。 dim=1,按行维翻转; dim=2,按列维翻转。 flipdim(a,1) ans= 569 340 120 rot90(X) 使矩阵X逆时针旋转900 rot90(a) ans= 009 246 135 2.2.3字符串 在MATLAB中,字符串是作为字符数组来引入的; 一个字符串由多个字符组成,用单引号(’’)来界定; 字符串是按行向量进行存储的,每一字符(包括空格)是以其ASCII码的形式存放。 clear str1='Hello' str1= Hello str2='Ilike''MATLAB'''%重复单引号来输入含有单引号的字符串 str2= Ilike'MATLAB' str3='你好! '%支持中文 str3= 你好! 1.字符串占用的字节 whos NameSizeBytesClass str11x510chararray str21x1530chararray str31x36chararray Grandtotalis23elementsusing46bytes 2.字符串函数 ▪length: 用来计算字符串的长度(即组成字符的个数)。 ▪double: 用来查看字符串的ASCII码储存内容,包括空格(ASCII码为32)。 ▪char: 用来将ASCII码转换成字符串形式。 ▪class或ischar: 用来判断某一个变量是否为字符串。 class函数返回char则表示为字符串,而ischar函数返回1表示为字符串。 ▪strcmp(x,y): 比较字符串x和y的内容是否相同。 返回值如果为1则相同,为0则不同。 ▪findstr(x,x1): 寻找在某个长字符串x中的子字符串x1,返回其起始位置。 ▪deblank(x): 删除字符串尾部的空格。 由于MATLAB将字符串以其相对应的ASCII码储存成一个行向量,因此如果字符串直接进行数值运算,则其结果就变成一般数值向量的运算,而不再是字符串的运算。 length(str1)%字符串长度 ans= 5 x1=double(str1)%查看字符串的ASCII码 x1= 72101108108111 x2=str1+1%字符串的数值运算 x2= 73102109109112 char(x1)%将ASCII码转换成字符串形式 ans= Hello char(x2) ans= Ifmmp class(str1)%判断变量类型 ans= char class(x1) ans= double ischar(str1) ans= 1 3.使用一个变量来储存多个字符串 (1)多个字符串组成一个新的行向量 将多个字符串变量直接用“,”连接,构成一个行向量,就可以得到一个新字符串变量。 clear str1='Hello'; str2='Ilike''MATLAB'''; str3='你好! ' str4=[str1,'! ',str2]%多个字符串并排成一个行向量 str4= Hello! Ilike'MATLAB' (2)使用二维字符数组 将每个字符串放在一行,多个字符串可以构成一个二维字符数组,但必须先在短字符串结尾补上空格符,以确保每个字符串(即每一行)的长度一样。 否则MATLAB会提示出错: str5=[str1;str3] ? ? ? Errorusing==>vertcat Allrowsinthebracketedexpressionmusthavethesame numberofcolumns. str5=[str1;str3,'']%将str3添加两个空格 str5= Hello 你好! (3)使用str2mat、strvcat和char函数 使用专门的str2mat、strvcat和char函数可以构造出字符串矩阵,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。 str6=str2mat(str1,str2,str3) str6= Hello Ilike'MATLAB' 你好! str7=char(str1,str2,str3) str7= Hello Ilike'MATLAB' 你好! str8=strvcat(str1,str2) str8= Hello Ilike'MATLAB' whos NameSizeBytesClass str11x510chararray str21x1530chararray str31x36chararray str41x2244chararray str52x520chararray str63x1590chararray str73x1590chararray str82x1560chararray Grandtotalis186elementsusing350bytes 5.执行字符串 如果需要直接“执行”某一字符串,可以使用eval命令,效果就如同直接在MATLAB命令窗口内输入此命令。 str9='a=2*5' str9= a=2*5 eval(str9)%执行字符串 a= 10 6.显示字符串 字符串可以直接使用disp命令显示出来,即使后面加分号(;)也显示。 disp('请输入2*2的矩阵a') 请输入2*2的矩阵a disp(str1) Hello 2.2.4矩阵和数组运算 矩阵运算有明确而严格的数学规则,矩阵运算规则是按照线性代数运算法则定义的; 数组运算是按数组的元素逐个进行的。 1.矩阵运算的函数 a= 123 456 789 表2.4常用矩阵运算函数 函数名 功能 例子 输入 结果 det(X) 计算方阵行列式 det(a) ans= 0 rank(X) 求矩阵的秩,得出的行列式不为零的最大方阵边长。 rank(a) ans= 2 inv(X) 求矩阵的逆阵,当方阵X的det(X)不等于零,逆阵X-1才存在。 X与X-1相乘为单位矩阵。 inv(a) Warning: Matrixisclosetosingularorbadlyscaled. Resultsmaybeinaccurate.RCOND=1.541976e-018. ans= 1.0e+016* -0.45040.9007-0.4504 0.9007-1.80140.9007 -0.45040.9007-0.4504 [v,d]=eig(X) 计算矩阵特征值和特征向量。 如果方程Xv=vd存在非零解,则v为特征向量,d为特征值。 [v,d]=eig(a) v= -0.2320-0.78580.4082 -0.5253-0.0868-0.8165 -0.81870.61230.4082 d= 16.116800 0-1.11680 00-0.0000 diag(X) 产生X矩阵的对角阵 diag(a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 学习 资料 自学