第三讲 MATLAB编程.docx
- 文档编号:13380328
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:56
- 大小:138.98KB
第三讲 MATLAB编程.docx
《第三讲 MATLAB编程.docx》由会员分享,可在线阅读,更多相关《第三讲 MATLAB编程.docx(56页珍藏版)》请在冰点文库上搜索。
第三讲MATLAB编程
第三讲MATLAB编程
编程的基本原理:
数据输入(Input)数据处理(算法)数据输出(Output)
1.1MATLAB数据类型
MATLAB的主要数据类型是数组类型,其中的每一种类型都以数组为基础,都是从数组派生出来的,MATLAB实际上把每种类型的数据作为数组处理。
一般把二维数组称为矩阵,1╳n和n╳1数组称为向量,1╳1数组称为数值。
数据类型
charnumericcellstruc其它
doublesingleint,uint
sparse
helpdatatypes
Datatypesandstructures.
Datatypes(classes)
double-Converttodoubleprecision.
char-Createcharacterarray(string).
logical-Convertnumericvaluestological.
cell-Createcellarray.
struct-Createorconverttostructurearray.
single-Converttosingleprecision.
uint8-Converttounsigned8-bitinteger.
uint16-Converttounsigned16-bitinteger.
uint32-Converttounsigned32-bitinteger.
uint64-Converttounsigned64-bitinteger.
int8-Converttosigned8-bitinteger.
int16-Converttosigned16-bitinteger.
int32-Converttosigned32-bitinteger.
int64-Converttosigned64-bitinteger.
inline-ConstructINLINEobject.
function_handle-Functionhandlearray.
javaArray-ConstructaJavaarray.
javaMethod-InvokeaJavamethod.
javaObject-InvokeaJavaobjectconstructor.
1.2数组输入与寻访
1一维数组的创建和寻访
(1)逐个元素输入法
这是最简单,但又最通用的构造方法。
以下指令就是一例。
x=[2pi/2sqrt(3)3+5i]
x=
2.00001.57081.73213.0000+5.0000i
(2)冒号生成法
这是通过“步长“设定,生成一维“行“数组的方法。
该方法的通用格式是;
x=a:
inc:
b
[说明]
●a是数组的第一个元素,inc是采样点之间的间隔,即步长。
若(b-a)是inc的整数倍,则所生成的数组的最后一个元素等于b,否则小于b。
●inc,b之间必须用冒号“;“分隔。
注意:
该冒号必须在英文状态下产生。
中文状态下的冒号将导致MATLAB操作错误!
●inc可以省略。
省略时,默认其取值为1,即认为inc=1。
●inc可以取正数或负数。
但要注意:
inc取正时,要保证ab。
x=1:
3:
11
x=
14710
(3)定数线性采样法
该法在设定的“总点数“下,均匀采样生成一维“行“数组。
该法的通用格式是:
x=linspace(a,b,n)
[说明]
●a,b分别是生成数组的第一个和最后一个元素。
n是采样总点数。
该指令生成数组。
●该指令的作用与x=a:
(b-a)/(n-1):
b相同。
x=linspace(1,11,4)
x=
1.00004.33337.666711.0000
(4)定数对数采样法
该法在设定的“总点数“下,经“常用对数“采样生成一维“行“数组。
通用格式是:
x=logspace(a,b,n)
[说明]
●生成数组的第一个元素值为10a,最后一个元素值是10b。
n是采样总点数。
该指令生成(1×n)数组。
●在信号处理和控制学科中,常用该指令去产生频率响应的频率自变量采样点。
x=logspace(1,4,4)
x=
10100100010000
一维数组的子数组寻访和赋值
例1子数组的寻访(Address)。
rand('state',0)%把均匀分布伪随机发生器置为0状态
x=rand(1,5)%产生
的均布随机数组
x=
0.95010.23110.60680.48600.8913
x(3)%寻访数组x的第三个元素。
ans=
0.6068
x([125])%寻访数组x的第一、二、五个元素组成的子数组。
ans=
0.95010.23110.8913
x(1:
3)%寻访前三个元素组成的子数组
ans=
0.95010.23110.6068
x(3:
end)%寻访除前2个元素外的全部其他元素。
end是最后一个元素的下标。
ans=
0.60680.48600.8913x(3:
-1:
1)%由前三个元素倒排构成的子数组
ans=
0.60680.23110.9501
x(find(x>0.5))%由大于0.5的元素构成的子数组
ans=
0.95010.60680.8913
x([12344321])%对元素可以重复寻访,使所得数组长度允许大于原数组。
ans=
Columns1through7
0.95010.23110.60680.48600.48600.60680.2311
Column8
0.9501
[说明]
●寻访什么样的子数组,取决于数组X(index)中下标index。
●下标index本身可以是单个正整数或正整数数组,但index中的每个元素的取值必须在闭区间内[1,end]。
在此,end是指一维数组的长度,即最大下标。
end的这种用法是MATLAB5.x版新增的。
例2子数组的赋值(Assign)。
x(3)=0%把上例中的第三个元素重新赋值为0
x=
0.95010.231100.48600.8913
x([14])=[11]%把当前x数组的第一、四个元素都赋值为1。
x=
1.00000.231101.00000.8913
[说明]
要保证被重新赋值的子数组的长度与送入的数组长度相同。
2二维数组的创建
二维数组是由实数或复数排列成矩形而构成的。
从数据结构上看,矩阵和二维数组没有什么区别。
当二维数组带有线性变换含义时,该二维数组就是矩阵。
(1)直接输入法
例3在MATLAB环境下,用下面三条指令创建二维数组C。
a=2.7358;b=33/79;%这两条指令分别给变量a,b赋值。
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
%这指令用于创建二维数组C
C=
1.00005.4716+0.4177i0.6909
0.70714.82443.5000+1.0000i
[说明]
●分号“;“在“[]“方括号内时,它是数组行间的分隔符。
●分号“;“作为指令后的结束符时,将不在屏幕上显示该指令执行后的结果。
例4复数数组的另一种输入方式。
M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]
CN=M_r+i*M_i%由实部、虚部数组构成复数数组
M_r=
123
456
M_i=
111213
141516
CN=
1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i
4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i
[说明]
●在“[]“方括号中,逗号“,“是元素与元素间的分隔符。
●逗号“,“用于指令后时,该指令执行后的赋值结果将被显示在屏幕上。
(2)利用M文件创建和保存数组
对于今后经常需要调用的数组,尤其是比较大而复杂的数组,为它专门建立一个M文件是值得的。
下面通过一个简单例子来说明这种M文件的创建过程。
例5创建和保存数组AM的MyMatrix.m文件。
●打开文件编辑调试器,并在空白填写框中输入以下内容。
●保存此文件,并且文件起名为MyMatrix.m文件
●以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成于MATLAB内存中。
(3)利用ArrayEditor数组编辑器输入数组
●在指令窗,向一个新变量赋“空”矩阵。
x=[];
●在内存浏览器中,双击该变量,打开数组编辑器。
●在数组编辑器左上方的行和列栏中定义行和列的大小。
●在数组元素格输入数据。
3数据的保存与获取
●生成mat数据文件
把MATLAB工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件。
>>save—将工作空间中所有的变量存到matlab.mat文件中。
>>savedata—将工作空间中所有的变量存到data.mat文件中。
>>savedataab—将工作空间中a和b变量存到data.mat文件中。
●调用已生成的mat文件
下次运行MATLAB时即可用load指令调用已生成的mat文件。
>>load—打开matlab.mat文件。
>>loaddata—打开data.mat文件。
>>loaddataab—打开data.mat文件中的a,b变量。
mat文件是标准的二进制文件,还可以ASCII码形式保存
4二维数组元素的标识
前面采用算例方式介绍了一维子数组的寻访和赋值。
在介绍二维或更高维数组中子数组的寻访赋值之前,首先要阐述单个元素标识和寻访的三种方式。
(1)“全下标”标识
经典数学教科书所引述具体矩阵元素时,采用“全下标“标识法,即指出是“第几行第几列“的元素。
这种标识方法的优点是:
几何概念清楚,引述简单。
它在MATLAB的寻访和赋值中最为常用。
对于二维数组来说,“全下标“标识由两个下标组成:
行下标,列下标。
如A(3,5)就表示在二维数组A的“第三行第5列“的元素。
(2)“单下标”标识
顾名思义,“单下标“标识就是“只用一个下标来指明元素在数组中的位置“。
当然这样做,首先要对二维数组的所有元素进行“一维编号“。
所谓“一维编号“是:
先设想把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列“。
然后,自上往下对元素位置进行编号。
“单下标“与“全下标“的转换关系:
以(m×n)的二维数组A为例,若“全下标“元素位置是“第r行,第c列“,那么相应的“单下标“为l=(c-l)×m+r。
MATLAB有两个指令可以实现以上标识方法间的转换。
sun2ind据全下标换算出单下标
ind2sub据单下标换算出全下标
(3)“逻辑1”标识
在实际使用中,常会遇到诸如寻找数组中所有大于某值的元素的问题。
此时,“逻辑1“标识法就特别得心应手。
例6找出数组
中所有绝对值大于3的元素。
A=zeros(2,5);%预生成一个(2*5)全零数组
A(:
)=-4:
5%运用“全元素”赋值法获得A
L=abs(A)>3%产生与A同维的“0-1”逻辑值数组
islogical(L)%判断L是否逻辑值数组。
输出若为1,则是。
X=A(L)%把L中逻辑值1对应的A元素取出
A=
-4-2024
-3-1135
L=
10001
00001
ans=
1
X=
-4
4
5
[说明]
●L的元素或是0或是1,它是“逻辑数组“。
这种逻辑数组是一种特殊的数据类型。
●所谓“逻辑1“标识法是:
通过与A同样的大小的逻辑值数组L中“逻辑值1“所在的位置,指示A中元素的位置。
例7演示逻辑数组与一般双精度数值数组的关系和区别。
●逻辑数组与双精度数组的相同之处
Num=[1,0,0,0,1;0,0,0,0,1];%产生与L数组外表完全相同的“双精度数组”
N_L=Num==L%假如Num与L数值相等,则应得1。
c_N=class(Num)%用class指令检查Num的类属
c_L=class(L)%用class指令检查L的类属
N_L=
11111
11111
c_N=
double
c_L=
double
●逻辑数组与一般双精度数组的差别
islogical(Num)%检查Num是否属于逻辑数组类
Y=A(Num)%试探Num能否象L一样具有标识作用
ans=
0
?
?
?
Indexintomatrixisnegativeorzero.Seereleasenotesonchangesto
logicalindices.
[说明]
●该例表明:
逻辑数组一方面具有双精度特性,另一方面又区别于一般的双精度数组。
●逻辑数组产生于逻辑函数或逻辑运算,它具有“逻辑标识“能力。
●从本质上说,逻辑数组是双精度数组的子类。
它继承了双精度类型数据的全部性质,又有自己特定的属性和能力。
这是应用面向对象编程技术的结果。
5二维数组的子数组寻访和赋值
明白了前一节的元素标识,就容易理解和掌握二维数组的子数组寻访和赋值,常用的相关指令形式见表。
子数组寻访和赋值格式汇总表
子数组的寻访和赋值
使用说明
A(r,c)
它由A的“r指定行“和“C指定列“上的元素组成
A(r,:
)
它由A的“r指定行“和“全部列“上的元素组成
A(:
c)
它由A的“全部行“和“C指定列“上的元素组成
A(:
)
“单下标全元素“寻访,它由A的各列按自左到右的次序,首尾相接而生成“一维长列“数组
A(s)
“单下标“寻访。
生成“s指定的“一维数组“。
若s是“行数组“(或“列数组“),则A(s)就是长度相同的“行数组“(或“列数组“
A(L)
“逻辑1“寻访,生成“一维“列数组:
由与A同样大小的“逻辑数组“L中的“1元素“选出A对应元素:
按“单下标“次序排成长列组成
A(r,c)=Sa
以“双下标“方式,对子数组A(r,c)进行赋值:
Sa的“行宽、列长“相同
A(:
)=D(:
)
全元素赋值方式。
结果:
保持A的“行宽、列长“不变。
条件:
A、D两个数组的总元素相等,但“行宽、列长“不一定相同
A(s)=Sa
按“单下标“方式,对A的部分元素重新赋值。
结果:
保持A的“行宽、列长“不变。
条件:
s单下标数组的长度必须与“一维数组“Sa长度相等,但是s、Sa不一定同是“行数组“或“列数组“
例8不同赋值方式示例。
A=zeros(2,4)%创建
的全零数组
A=
0000
0000
A(:
)=1:
8%全元素赋值方式
A=
1357
2468
s=[235];%产生单下标数组行数组
A(s)%由“单下标行数组”寻访产生A元素组成的行数组
Sa=[102030]'%Sa是长度为3的“列数组”
A(s)=Sa%单下标方式赋值
ans=
235
Sa=
10
20
30
A=
120307
10468
A(:
[23])=ones
(2)%双下标赋值方式:
把A的第2、3列元素全赋为1
A=
1117
10118
1.3数值数组及运算
数值数组(NumericArray)和数组运算(ArrayOperation)始终是MATLAB的核心内容。
由于MATLAB5.x版以上突出了其“面向对象“的特征,这种数值数组(以下简称为数组)就成了MATLAB最重要的一种内建数据类型(Built–inDataType),而数组运算就是定义在这种数据结构上的方法(Method)。
数组是指由一组实数或复数排成的长方阵列(Array)。
它可以是一维的“行“或列,它可以是二维的“矩形“,也可以是三维的“若干同维矩形的堆叠“,甚至更高的维数。
数组运算是指无论在数组上施加什么运算(加减乘除或函数),总认定那种运算对被运算数组中的每个元素(Element)平等地实施同样的操作。
MATLAB精心设计数组和数组运算的目的在于:
(1)使计算程序简单、易读,使程序指令更接近于教科书上的数学计算公式:
(2)提高程序的向量化程度,提高计算效率,节省计算机开销。
例9绘制函数
在
时的曲线。
x=0:
0.1:
1%定义自变量的采样点取值数组
y=x.*exp(-x)%利用数组运算计算各自变量采样点上的函数值
plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)')%绘图
x=
Columns1through7
00.10000.20000.30000.40000.50000.6000
Columns8through11
0.70000.80000.90001.0000
y=
Columns1through7
00.09050.16370.22220.26810.30330.3293
Columns8through11
0.34760.35950.36590.3679
图3.1-1
●第一句指令定义自变量采样数组:
以0为起点,每隔0.1取一个采样点,直到1为止。
该数组是“长度“为11的“行数组“,或说成(1×11)的数组。
●第二句指令中,指数函数exp(X)数组x每个元素求函数值,结果exp(X)数组也是一个(1×11)的数组。
而指令中的运算符“.*“,实施数组x和数组exp(X)对应元素之间相乘。
因此,所得结果y也是(1×11)的数组。
由此,读者可以看到数组运算避免了烦冗而效率低下的循环运算。
●指令plot,则根据所得的x数组和y数组,绘制曲线。
●另外还要说明一点:
对于定义在连续区间(或域)上的函数,进行数值计算时必须对此给定的连续区间进行适当的采样,得到一个采样值数组。
数值计算都是关于这种采样数组进行的。
1数组运算的常用函数
上面已经概括地给出了数组运算的定义。
下面将更清晰地描述常用函数的数组运算本质,更系统地列出具备数组运算能力的函数名称。
为叙述方便又兼顾一般性,表述时以二维数组为例。
但本节所列函数对任意维数组都适用。
(1)函数数组运算规则的定义:
(2)执行数组运算的常用函数
三角函数和双曲函数
名称
含义
名称
含义
名称
含义
acos
反余弦
asinh
反双曲正弦
cssh
双曲余割
acosh
反双曲余弦
atan
正割
sec
正割
acot
反余切
atan2
四象限反正切
sech
双曲余割
acoth
反双曲余切
atanh
反双曲正切
sin
正弦
acsc
反余割
cos
余弦
ainh
双曲正弦
acsch
反双曲余割
cosh
双曲余弦
tan
正切
asec
反正割
cot
余切
tanh
双曲正切
asech
反双曲正割
coth
双曲余切
asin
反正弦
csc
余割
指数函数
名称
含义
名称
含义
名称
含义
exp
指数
log10
常用对数
pow2
2的幂
log
自然对数
log2
以2为底的对数
sqrt
平方根
复数函数
名称
含义
名称
含义
名称
含义
abs
模,或绝对值
conj
复数共轭
real
复数实部
angle
相角
imag
复数虚部
圆整函数和求余函数
名称
含义
名称
含义
ceil
向+∞圆整函数
rem
求余数
fix
以0圆整函数
round
向最近整数圆整函数
floor
向-∞圆整函数
sign
符号函数
mod
模除求余
坐标变换函数
名称
含义
名称
含义
cart2sph
直角坐标变为球坐标
pol2cart
柱(或)极坐标变为直角坐标
cart2pol
直角坐标变为柱(或极)坐标
sph2cart
球坐标变为直角坐标
其他特殊函数
名称
含义
名称
含义
名称
含义
erf
误差函数
expint
指数积分函数
isprime
质数为真函数
erfc
误差补函数
gamma
Г函数
rats
数值有理化函数
erfcx
刻度误差补函数
gammainc
不完全Г函数
erfinv
逆误差函数
gammaln
Г函数的对数
例10演示pow2的数组运算性质。
A=[1:
4;5:
8]%生成
数组
A=
1234
5678
pow2(A)%计算
的结果也是
数组
ans=
24816
3264128256
2数组运算和矩阵运算
从外观形状和数据结构上看,二维数组和(数学中的)矩阵没有区别。
但是,矩阵作为一种变换或映射算子的体现,矩阵运算有着明确而严格的数学规则。
而数组运算是MATLAB软件所定义的规则,其目的是为了数据管理方便、操作简单指令形式自然和执行计算的有效。
两者运算有根本区别。
数组运算和矩阵运算指令对照汇总
矩阵运算指令
含义
数组运算指令
含义
A'
共轭转置
A.'
非共轭转置
A+B
矩阵相加
A.+B
对应元素相加
A-B
矩阵相减
A.-B
对应元素相减
s+B
标量s分别与B元素之和
s-B
标量s分别与B元素之和
A*B
内维相同矩阵的乘积
A.*B
对应元素相乘
s*B
标量s分别与B元素之积
s.*A
标量s分别与B元素之积
A/B
A右除B
A./B
A元素被B的对应元素
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三讲 MATLAB编程 第三 MATLAB 编程