第2章MATLAB 运算基础(1)

Download Report

Transcript 第2章MATLAB 运算基础(1)

第2章 MATLAB 运算基础(1)
第2章 MATLAB 运算基础(1)
主要内容:
①变量的定义及赋值;
②数值数组、字符串数组、元胞数组和构
架数组等数据类型;
③矩阵运算的定义和规则;
④数组运算的定义和规则。
2/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.1 概述
2.1.1 数据术语
1)矩阵:由m×n个数组成的排成m行n列的一个矩形
的数表,其中0×0矩阵为空矩阵([])。数表中第
i(1≤i≤m)行第j(1≤j≤n)列的数据称为矩阵元素
2)标量 :1×1的矩阵,即为只含一个数的矩阵。
3)向量:1×n或n×1的矩阵,即只有一行的或者一列
的矩阵。只有一行的矩阵称为行向量,只有一列的矩
阵称为列向量。数表中第i(1≤i≤n)个数据称为向量元
素。
4)数组:矩阵的延伸,一般指多维数组,其中标量、
向量和矩阵都是数组的特例。
3/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.1.2 数据类型
• 数据类型包括数值型、字符串型、元胞型、
构架型等。数值型有单精度型、双精度型和
整数型。整数型有uint8,uint16,uint32和
uint64等无符号型和int8,int16,int32和
int64等符号型整数。
• 数值型数据可以用带小数点的形式和科学计
数法表示,数值的表示范围是10-309~10+309。
• -20、1.25、2.88e-56(表示2.88×10-56)、
7.68e204(表示7.68×10204) 都是合法的数据表
示。
• 一般在计算时采用双精度型,在输出时有多种数
值显示格式可供选择。
4/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
数值显示格式的设置通过format 命令,
格式如下:
• format
• format
• format
• format
• format
short
默认设置,以5位数字形式输出
long
以15位十进制数形式输出
short e 以5位十进制数加指数形式输出
long e 以16位十进制数加指数形式输出
short g 从format short和format short e
中自动选择最佳输出形式
5/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
• format
• format
• format
• format
• format
• format
• format
long g
从format long和format long e
中自动选择最佳输出形式
hex
以16位十六进制数形式输出
+
以正号、负号和零形式输出
bank
以两位小数形式输出
rat
以近似分数形式输出
loose
以稀疏格式(变量与执行结果之
间有空行)输出
compact 以紧凑格式(变量与执行结果之
间无空行)输出
6/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.2 变量
2.2.1变量的命名
变量的命名规则为:
1 变量名必须以字母开头,变量名的组成可以是
任意字母、数字或者下划线,但不能含有空格
和标点符号。
2 关键字和函数名不能作为变量名。
3 变量名不能超过63个字符。
4 变量名区分字母的大小写,即大小写敏感。
大小写是否区分可以通过命令casesen
on/off进行切换(如果不区分大小写,为
casesen off ,否则为casesen on)。
7/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.2.2变量的赋值
变量的赋值通常有两种形式:
1 变量=表达式
2 表达式
• 其中表达式是用运算符将有关运算量连接起
来的式子,其结果是一个数组。
• 形式1中,=
代表的是赋值操作,将表达式
的值赋给MATLAB的变量;形式2中,将表达
式的值赋给MATLAB的临时变量ans。
8/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-1 在命令窗口输入下述语句,并按回
车键执行,分别给变量a、b、c赋值:
a=1% a为标量
b=[0 1] % b为行向量
c=[1 2;3 4;5 6] % c为矩阵即二维数
组
9/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.2.3 特殊变量
• eps
• Realmax
• Realmin
• Pi
• i, j
• Inf
• NaN
• Nargin
• Nargout
• Flops
MATLAB定义的正的极小值2.2204e-16
最大的正实数1.7977e+308
最小的正实数2.2251e-308
内建的π值
虚数单位i=j=√-1
∞
无法定义一个数目
函数输入参数个数
函数输出参数个数
浮点运算次数
10/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.2.4内存变量的管理
1 内存变量的显示与删除
1)who
用于显示在MATLAB工作空间中已
经驻留的变量名清单。
2)whos
在给出变量名的同时,还给出它们
的大小、所占字节数及数据类型等
信息。
3)clear 删除MATLAB工作空间中的变量。注
意,特殊变量不能被删除。
11/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-2 查询例2-1中语句执行后工作空间中
的变量情况。
在命令窗口输入 who
执行结果为:
Your variables are:
a
b
c
在命令窗口输入 whos
执行结果为:
Name
Size
Bytes Class
a
1x1
8 double array
b
1x2
16 double array
c
3x2
48 double array
Grand total is 10 elements using 72 bytes
12/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2 工作空间浏览器
• 工作空间浏览器窗口用于显示所有MATLAB
工作空间中的变量名、数据结构、类型、大
小和字节数,也可以对变量进行观察、编辑、
提取和保存。
13/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
3 内存变量文件
利用MAT文件可以把MATLAB工作空间中的一些有用
变量长久地保留下来。MAT文件的生成和调入由
save和load命令来完成
1) save的格式为:
save 文件名 [变量名表] [-append][-ascii]
功能:把工作空间中的变量存入磁盘。其中变量
名表指出需存储的变量,append为数据填加方
式,ascii为数据形式。
2) load的格式为:
load 文件名 [变量名表] [-ascii]
功能:磁盘上存储的mat数据文件取回到MATLAB工
作空间中。参数含义同save。
14/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-3: 例2-1中语句执行后,在命令窗口
依次输入下述命令:
• save
%变量a,b和c保存在matlab.mat
• Save mydata1.mat
%变量a,b和c保存在
mydata1.mat
%变量a保存在
mydata2.mat
• save
mydata2.mat a
• save
mydata3.mat a b
• save
mydata4.mat a b c%变量a,b和c保存在
mydata4.mat
%变量a和b保存在
mydata3.mat
15/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.3 数值数组
2.3.1数值数组的建立
1 赋值语句建立数组
• 矩阵的建立可以通过赋值语句实现,赋
值符号左边为变量名,右边为矩阵元素。矩
阵元素应用方括号([])括住,元素可以是数
值或表达式元素,表达式可以由数字、变量、
运算符和函数等组成。
• 矩阵同行内的元素间用逗号或空格隔开,
行与行之间用分号或回车键隔开。
16/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-4
在命令窗口输入语句:
a=[1,2,3;4,5,6;7,8,9]
按回车键,命令就被执行,在MATLAB命令窗
中显示以下结果:
a =
1
4
7
2
5
8
3
6
9
如果在上述输入语句末尾加上分号,则在命令窗口不
显示结果。同理可以通过赋值语句建立向量。
17/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-5 在命令窗口输入语句:
x=[-1.3 1+2+3
sqrt(5)]
%sqrt是求平方根函数
按回车键,指令被执行,MATLAB命令窗中显示
以下结果:
x =
-1.3000
6.0000
2.2361
18/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-6 在命令窗口输入下述语句,建立复数数组:
b=[1+2*i,2+3*i;2-i,3-2*i]
执行结果为:
b =
1.0000 + 2.0000i
2.0000 + 3.0000i
2.0000 - 1.0000i
3.0000 - 2.0000i
19/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
elfun函数库中提供一系列复数函数:
real
复数的实数部分
real(b)
imag
复数的虚数部分
imag(b)
abs
绝对值或模
abs(b)
angle
幅角
angle(b) 结果为弧度
angle(b)*180/pi 结果为角度
conj
共轭
conj(b)
MALAB 7.X程序设计
20/59
第2章 MATLAB 运算基础(1)
2 简捷表达式
等间隔向量赋值可以通过简捷表达式实现。下
面介绍两种为等间隔向量赋值的方法:
1)两个冒号组成等增量语句
格式:t =初值:增量:终值
说明:
初值、增量和终值分别表示开始值、步长和
结束值。当增量可为负值,省略时则默认为
增量为1;当增量省略或增量>0而初值>0时
为空向量,当增量<0而初值<终值时也为空
向量。
21/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-7 简捷表达式建立向量和矩阵
•t1=0:0.02:1%产生0≤t1≤1之间的行向量,
间隔为0.02
•t2=5:-1:2 %产生5≤t1≤2之间的行向量,
间隔为-1。
•t4=2:-1:3
% 建立空矩阵
•t5=[1:2:5;1:3:7] %建立矩阵
22/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2)使用linspace和logspace函数生成向量
linspace函数的格式:
linspace(a,b,n)
功能:生成从a到b之间线性分布的n个元素的行
向量。
logspace函数的格式:
logspace (a,b,n)
功能:生成从10a到10b之间按对数等分的n个元
素的行向量。
23/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例 2-8 用linspace和logspace函数生成向量
t1=linspace(0,2*pi,5)%从0到2*pi等分
成5个点
linspace(1,8,8)
linspace(1,8,1)
t2=logspace(0,2,3) %从1到100(即
100到102)按对数等分成3个点
24/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
3 内建函数
1) 通用特殊矩阵
函数库elmat提供的常用的通用特殊矩阵
生成函数:
• zeros
• ones
• eye
• rand
25/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2)用于专门学科的特殊矩阵
(1)魔方矩阵
magic(n)
功能:魔方矩阵的元素由1到n×n 的自然
数组成,其对角线上的元素为1;每行、每列
及对角线上的元素之和均等于(n3+n)/2。魔
方矩阵的每行、每列及两条对角线上的元素
和都相等。对于n阶魔方阵,其元素由
1,2,3,…,n2共n2个整数组成。
26/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-9 产生2阶和3阶魔方阵。
•m1=magic(2)
•m2=magic(3)
%产生2阶魔方阵
%产生3阶魔方阵
27/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
(2) 范得蒙矩阵
vander(V)
•生成以向量V为基础向量的范得蒙矩阵,
矩阵元素最后一列全为1,倒数第二列
为一个指定的向量,其他各列是其后列
与倒数第二列的点乘积。可以用一个指
定向量生成一个范得蒙矩阵。
28/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-10 产生范得蒙矩阵。
• v1=vander([1;2;3;5])
• v2=vander(1:3)
• v3=vander(1:4)
29/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
(3)希尔伯特矩阵
• hilb(n)
• invhilb(n)
例2-11
生成n阶的希尔伯特矩阵
求n阶的希尔伯特矩阵的逆
求4阶希尔伯特矩阵及其逆矩阵。
• format rat %以有理形式输出
• H=hilb(4)
• invH=invhilb(4)
30/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
(4)托普利兹矩阵
•toeplitz(x)
功能:用向量x生成一个对称的托普利兹矩
阵。矩阵元素除第一行第一列外,其他每
个元素都与左上角的元素相同。
• toeplitz(x,y)
功能:生成一个以x为第一列,y为第一行
的托普利兹矩阵。其中x, y均为向量,两
者不必等长。
31/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-12
产生托普利兹矩阵。
• T1=toeplitz(1:4)
• T2=toeplitz(1:3,3:6)
32/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
(5) 伴随矩阵
compan(p)
功能:生成伴随矩阵,其中p是一个多项式
的系数向量,高次幂系数排在前,低次幂
排在后。
例2-13 为了求多项式x3-7x+6的伴随矩阵,
可使用语句:
p=[1,0,-7,6];c=compan(p)
33/59
MALAB 7.X程序设计
(6) 帕斯卡矩阵
第2章 MATLAB 运算基础(1)
n阶帕斯卡矩阵的生成函数的格式:
pascal(n)
例2-14
求(x+y)4的展开式。
p1=pascal(4)
p1 =
1
1
1
1
2
3
1
3
6
1
4
10
由执行结果可知,矩阵次对角线上的元素
1,4,6,4,1即为展开式的系数。
1
4
10
20
34/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
(7)哈达玛矩阵
n阶哈达玛矩阵的生成函数的格式:
hadamard(n)
例2-15
求2阶和4阶的哈达玛矩阵。
h1=hadamard(2)
h2=hadamard(4)
35/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
4 通过MAT数据文件加载矩阵
通 过 load 命 令 或 选 择 菜 单 File→Import
Data命令加载MAT数据文件来创建矩阵。
5 在M文件中创建矩阵
M文件实际上是一种包含MATLAB代码的文本
文件;通过在MATLAB命令窗口中运行M文
件创建矩阵。
36/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.3.2数组元素的标识
1 向量的标识
向量是由多个元素组成的,每个元素通过序
号来标识。
例2-16 演示向量的标志和重新赋值。
x=1:2:7; y=x';
y3=y(3)
%引用y的第三个元素5
y5=y(end) %用end函数引用y的最后
一个元素7
y(3)=10
%对y的第三个元素重新赋值
37/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2矩阵的标识
两种标识方式: 全下标方式和单下标方式。
1) 全下标方式
全下标方式标识是指出行下标和列下标
的方法标识,如一个m×n的矩阵a的第i
(1≤i≤m)行第j(1≤j≤n)列的元素可
表示为a(i,j)。
38/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-17 演示矩阵元素的标识和扩充矩阵的
方法
a=[1 2;3 4;5 6]; %建立一个2×3的矩阵
a12=a(1,2)
%引用a(1,2)的值
a(3,3)
%引用a(3,3)的值,(3,3)
a(3,3)=9
超出矩阵的大小,出错
%扩充2×3的矩阵为3×3的
矩阵,并给a(3,3)赋值
39/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2) 单下标方式
根据全下标换算出单下标的函数sub2ind格式:
IND=sub2ind(siz,I,J)
功能:IND为返回的对应的单下标,siz为以矩阵
行数和列数构成的两个元素的向量,I和J分别
为矩阵的某一行号和列号。
根据单下标换算出全下标的函数ind2sub格式:
[I,J]=ind2sub(siz,IND)
功能:I和J分别为返回的矩阵的某一行号和列号,
siz为以矩阵行数和列数构成的两个元素的向
量,IND为单下标。
40/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-18 演示矩阵元素的全下标标识和单下
标标识的转换。
[i,j]=ind2sub([3 3],5)
% 3×3矩阵的第5个元素的全下标
ind=sub2ind([3 3],3,3)
% 3×3矩阵第三行、第三列元素的序号
41/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.3.3 子数组
子数组是从数组中取出一部分元素所构成的数组,
通常可用全下标和单下标方式取子数组。
1 向量的一般情况如下:
A(i)
数组A的第i个元素
A(i:L:i+m) 数组A的第i个-第i+m个(下标增量为L)
元素
42/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2 矩阵一般情况如下:
A(:,j)
A(i,:)
A(i,j)
数组A的第j列全部元素
数组A的第i行全部元素
数组A的第i行第j列的元素
A(:,j:L:j+n)
数组A的第j列-第j+n列(下
标增量为L)全部元素
A(i:k:i+m,:)
数组A的第i行-第i+m行(下标
增量为k)元素
A(i:k:i+m,j:L:j+n)
数组A的第i行-第i+m
行(下标增量为k)并在第j列
-第j+n列(下标增量为L)全
43/59
部元素
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-19 演示建立行向量并取子数组的方法。
a1=[1.1,-2.2,3.3,-4.4,5.5];
a1(3)
% 取a1的第三个元素
a1([1 4]) % 取a1的第一个和第四个元素
a1(1:2:5) % 取a1的第一个、第三个和第五
个元素,等价语句为:
a1(1:2:end)
44/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-20 演示建立3×4的矩阵并取子数组的方法。
a=[1 2 3 4;5 6 7 8;9 10 11 12];
a(1,:)
a(:,end)
a24=a(2,4) % 取a的第二行、第四列的元素
a(1:2:4,:)
a(:,1:2:end)
a1=a([1,2],[2,3,4])
a2=a([1,2],[2,3,1])
a3=a([3,1],:)
a([1,3],[2,4])=zeros(2)
%对a([1,3],[2,4])赋值 45/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.3.4数组的赋值
数组的赋值大致有两种方式:全元素方式和子
数组方式。
1 全元素方式
全元素方式赋值的一般格式:
a(:)=b
功能:给矩阵a的所有元素赋值,矩阵b的元素
总数必须等于矩阵a的元素总数,但行列数不
一定相等。
46/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-21 演示全元素方式赋值的方法
a=zeros(2,3); b=1:6; a(:)=b
执行结果如下:
a =
1
2
3
4
5
6
47/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2 子数组方式
子数组方式赋值的一般格式1:
a(s)=b
功能:给矩阵a的部分元素赋值,s为单下标序号,b为
向量,向量的元素个数必须等于数组a中s指定的元素
个数。
子数组方式赋值的一般格式2:
A(i:k:i+m,j:L:j+n)=b
功能:给数组a的部分元素赋值,则数组b的行列数必须
等于数组a的第i行-第i+m行(下标增量为k)并在第j
列-第j+n列(下标增量为L)全部元素的行列数。
48/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-22
演示子数组方式赋值方法。
a=zeros(2,3);a(5:6)=[2 3]
%给第5、6元素赋值
如果对a不作初始化,a(5:6)=[2 3]的赋值
情况有何变化?
a=zeros(3,4);
a(1:2,1:3)=[1 1 1;1 1 1]
%给第一、二行元素赋值为全1
49/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.3.5数组元素的删除
数组元素的删除是简单地通过赋值为空(用[]
表示)实现的。
通过赋值为空,可以实现删除一行元素、一列
元素、子数组和整个数组。
注意区分空矩阵和零矩阵:
空矩阵是0×0的数组,而零矩阵是元素为零的
m×n的数组。
50/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-23 建立3×3的数组,实现数组元素的
删除。
a=[1 2 0;3 4 0;5 6 9];
a(:,3)=[]
%删除第三列元素
a(2,:)=[]
%删除第二行元素
a(1)=[]
%删除一个元素,则矩阵变为行向量
a=[]
%删除所有元素为空矩阵
51/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2.3.6 多维数组
1 三维数组的建立
三维数组的建立方式和二维数组类似,大致
有三种方式:
1) 通过全下标元素赋值方式创建
2) 由生成函数直接创建
3) 由生成函数ones,zeros,rand和randn
等直接创建多维数组。
52/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-24
演示全下标元素赋值方式建立
三维数组的方法。
b=[1 1;2 2];
b(:,:,2)=5
%先创建二维数组
%扩展数组
53/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-25 演示生成函数ones、zeros、rand
和randn直接创建多维数组的方法。
ones(2,3,4)
54/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
函数cat的格式为:
cat(维,p1,p2,……)
功能:按指定行列数放置模块数组生成多维数组。
参数维是指沿着第几维连接数组p1、p2等。
函数repmat的格式为:
repmat(p,行 列 页 ……)
功能:在总元素的数目不变的前提下重新确定数
组的行列数来重组数组。
其中第一个输入变量p是用来放置的模块数组,
后面的变量行、列、页是要放在指定的各维。
55/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-26 演示cat和repmat函数的功能。
a=[1 2 ;3 4];b=[ 5 6;7 8];cat(1 ,a,b)
a=[1 2 ;3 4];b=[ 5 6;7 8];cat(2 ,a,b)
56/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
a=[1 2 ;3 4];b=[ 5 6;7 8];cat(3 ,a,b)
repmat(magic(2), 2, 3)
( repmat(magic(2),[ 2, 3])结果同下)
repmat(5, 2, 3)
57/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
2 多维数组的信息
•
函数ndims的功能是直接给出数组的维数,格式为:
ndims(p)
其中,p为数组。
• 函数size的功能是给出数组各维的大小,格式为:
[m,n,…]=size(p)
%得出各维的大小
m=size(p,x)
%得出某一维的大小
其中,p为多维数组;m为行数,n为列数…;当只有
一个输出变量时, x=1返回第一维(行数),x=2返回
第二维(列数),以此类推。
• numel的功能是给出数组的体积(元素的数目),格
式为: n = numel(p )
其中,p为数组。
58/59
MALAB 7.X程序设计
第2章 MATLAB 运算基础(1)
例2-27 演示ndims,size和 numel函数的
功能。
x = ones(1,8);n = length(x)
% 建立任意的1×8的数组x
y=zeros(3,5);d=size(y)
% 建立任意的3×5的数组y
[m n]=size(y),
ndims(y),numel(y),mm=size(y,1),nn=size(y,2)
z= rand(2,10,3);
% 建立任意的2×10×3的数组y
n = length(z)
59/59
MALAB 7.X程序设计