1
第二讲 Matlab基础知识
2009-7-29
2
Matlab软件中几乎所有工作都是以矩阵为基本运算单元的。
1.运算符
矩阵的加减运算
矩阵的乘法运算
)( 必须是相同维数的矩阵和 YXYX?
)
(*
与矩阵的乘法其中一个为数时变为数求,特别:必须满足矩阵乘法的要YX
一,一般运算符及操作符
2009-7-29
3
矩阵的数组乘法
矩阵的乘方运算与矩阵相乘)其中一个为数时变为数乘,特别:两个矩阵的相应元素相(*,YX
)
1(^
和特征向量的乘方整数,则计算各特征值不是;若中则结果等价于线性代数的整数,是一个大于为方阵,若
yX
yXyX
y
一,一般运算符及操作符
2009-7-29
4
一,一般运算符及操作符
矩阵的除运算计算由各特征值和特征向量
Yx ^
的解是方程相同,,其结果与左除
BAXBA
XBAi n vBA
BA
\
*)(
\
2009-7-29
5
一,一般运算符及操作符的解是方程由左除得到:
相同,可以,其结果与右除
BXAABX
BAAB
AinvBBA
BA

/
)'''\(/
)(*
/
的每个元素作运算为此数与相应的矩阵中个为数,则结果应的元素;如果其中一中对中的元素除以同,则结果等价于都是矩阵,且维数相和,如果点除
A
BB
AB
B
AA
/.
2009-7-29
6
一,一般运算符及操作符
2.操作符
“:”



的元素作为一个列向量将阵的所有元素构成二维矩以行(行向量)取矩阵的第列(列向量)取矩阵的第
,,,
,,,
AA
kAjAjAkjA
AA
iiA
iiA
kjjkij
kjjkj



(,)
)(),1(),():(
:)(,,
:),(
)(,,
1::
1:
2009-7-29
7
一,一般运算符及操作符
“%”
在 M文件和命令行中表注释
,…”
换行时的继续符
,‘”
矩阵的转置
“;”
在 []中表示矩阵行的结尾;在命令行中,则命令不回显
2009-7-29
8
二,数据格式显示
Matlab软件中默认所有数值为双精度显示( double型)
Format 默认值,与 short格式相同
Format short 短格式,只显示 5位数值
Format long 长格式,显示 15位数
Format short e 短格式 e方式
Format long e 长格式 e方式
Format hex 十六进制格式
2009-7-29
9
二,数据格式显示
Format bank 显示两位小数
Format rat 有理格式
Format + 紧密格式(正 ——“+”;
负 ——“-”);零 ——,”)
Format compact 紧凑格式
Format loose 疏松格式
2009-7-29
10
三,关系运算主要用来对数与矩阵,矩阵与矩阵进行比较,并返回二者之间大小关系的 0,1矩阵。
“==”
比较两个对象是否相等(同)
,~=” ( not equal)
比较两个对象是否不等(同)
),( bane?
)(),( e q u a lbaeq?
2009-7-29
11
三,关系运算
“>” ( great than)
,<” (less than)
“>=” (great than or
equal)
“<=” (less than or equal)
),( balt
),( bage
),( bale
(,)gt a b
2009-7-29
12
四,逻辑运算(函数)
“&”
逻辑“与”
,|”
逻辑“或”
,~”
逻辑“非”
,xor”
逻辑异“或”
1.逻辑运算
2009-7-29
13
四,逻辑运算(函数)
All( a)
a为向量,若 a中所有元素为非零,
则返回,1”,否则返回,0”
All( A)
作用于列向量上,返回一个向量
(与 A的列数相同维)
All( A,dim)
将指定 dim维作为向量运算
2.逻辑函数
2009-7-29
14
四,逻辑运算(函数)
Any()
判断是否有一个向量元素为非零,
Any( a),any( A),any( A,dim)
用法与 all()相同
Exist()
查看变量或函数是否存在
Find( a)
找出向量或矩阵中非零元素的位置标识(以列计算)
2009-7-29
15
四,逻辑运算(函数)
Finite( A)
判断矩阵 A中的元素为有限值,在相应位置输出逻辑值( NaN( not a
number)为不确定值,inf为无穷大数,
通称为无限值)
Isinf( A)
与 finite( A)相反,用法相同
2009-7-29
16
四,逻辑运算(函数)
Isempty( A)
确定矩阵是否为空(区别零矩阵,
空间矩,矩阵不存在)
Isequal( A,B… )
判断几个对象是否相等(和 eq()
相区别)
Isnumeric( A)
判断矩阵是否是数据矩阵
2009-7-29
17
五,字符串操作
1,建立字符串变量
S =?字符串’
2,建立字符串矩阵
SA = [?string11string12string 13? … ;

stringn1stringn2stringn3? …]
注:每行字符串元素的个数总数必须相等
2009-7-29
18
五,字符串操作
3,通用字符串操作
S = string(A)
将整数数组转换为字符串 (转换为相应的 ASCII码)
S = char(A)
将 ASCII码转换为字符串
A = double(S)
将字符串转换为相应的 ASCII码
isstr(S)
确认是否为字符串
2009-7-29
19
五,字符串操作
S = delblank(C)
删除字符串结尾处的空格
S = blanks(n)
输入 n个空格符
S = str2mat(s1,s2,s3,…)
将字符串变成字符串矩阵
upper(S)
将字符串转化成大写
Lower(S)
将字符串转化成小写
2009-7-29
20
五,字符串操作
S =eval(?string?)
将字符串作为命令执行分析以下程序段:
for i = 1,100
eval([?load(a? int2str(i).m)?])
end
4,字符串比较操作(略)
2009-7-29
21
五,字符串操作
5.字符串与数值间的相互转换在将计算结果按某种格式进行输出,或对图形对象进行标注和说明时必须将数值转换为字符串。
S = int2str(A)
将整数转换为字符串
S = num2str(A)
将浮点数转换为字符串
A = str2num(S)
将字符串转换为浮点数
2009-7-29
22
五,字符串操作
6,数的进制间的转换
dec2hex(A)
十进制整数转换为十六进制字符串
hex2dec(S)
十六进制字符串转换为十进制整数
hex2num(S)
十六进制字符串转换为浮点数
dec2bin(A)
十进制数转换为二进制字符串
bin2dec(S)
二进制字符串转换为十进制整数
2009-7-29
23
五,字符串操作
7,常用函数
三角函数
sin(),asin(),cos(),acos(),tan(),atan(),sec(),asec(),
cot(),acot(),sinh(),asinh()
常用计算函数
fix() 朝零方向取整 (相关函数 floor(),ceil())
log() 自然对数 log10() 常用对数
sort() 求数值的平方根 conj() 求复数的共轭
real() 求复数的实部 imag() 求复数的虚部
abs() 求绝对值 exp() 求指数函数
roud() 四舍五入到最近的整数
rem() 求两整数相除的余数
2009-7-29
24
五,字符串操作
常用矩阵函数
sqrtm() 求矩阵的平方根
expm() 求矩阵的指数值
funm() 求矩阵计算的函数值
logm() 求矩阵的对数值
size() 求矩阵的维数
2009-7-29
25
Matlab输入命令的方式大体有两种,一种就是在工作空间(命令窗口)中直接输入简单命令,这种命令只适合于比较简单、问题比较特殊、没有一定的重复性和普遍性的简单场合。
Matlab还提供了一种功能强大的工作方式,这就是 M文件的编程工作方式。 M文件的语法类似于一般高级语言,但更简单易学。M文件的两种形式:命令文件(脚本文件),
函数文件。扩展名都是,m。
六,M文件与 M函数
2009-7-29
26
1.M命令文件如果要输入较多的命令,而且要经常对这些命令进行重复输入,则可以将这些命令放到一个扩展名为,.m”的文本文件中,每次运行时只要输入 M文件的文件名即可。注意:此 M文件要放在系统的搜索路径下,而且文件名不要与内置函数和工具箱中的函数重名。从这点看,M文件与 Dos下的批处理命令或其他语言的脚本文件有相似之处。
六,M文件与 M函数
2009-7-29
27
编写简单的 M命令文件 exam1.m
a = [ 1 2 3 4 5 ;2 3 4 5 6;
3 4 5 6 7;4 5 6 7 8];
b = a(:,2);
a
b
分析运行结果:
六,M文件与 M函数
2009-7-29
28
六,M文件与 M函数
2.M函数文件注意到 M命令文件只能“机械”的执行,不能和用户产生互动,为此定义 M
函数文件。
为了产生互动,M函数文件一般都要带参数,都要有返回值,而且函数文件要定义函数名。注意:函数文件中的变量是局部变量,函数运行结束后被清除。
2009-7-29
29
六,M文件与 M函数
M函数文件 fun.m的两种格式
a) 带返回值的函数文件
function y = fun(a,b…)

y = …
b) 不带返回值的函数文件
function fun(a,b…)

2009-7-29
30
六,M文件与 M函数
编写函数文件 exam2.m
function y = exam2(n)
%这是一个 M函数的例子,y = exam2(n)中的 n可以为任
%意数或矩阵
a1 = n ;
a2 = n + 1 ;
a3 = n + 2 ;
y = a1 + a2 + a3;
分析运行 exam2(2)结果:
2009-7-29
31
六,M文件与 M函数
比较命令文件与函数文件
a) 编写格式不同(关键词、参数、返回值)
b) 函数中变量的属性不同(全局变量和局部变量)
c) 作用不同(机械的执行和产生互动)
在命令窗口中建立以下变量,
a1 =[ 0.1 2 ; 2 1];
a2 = [0.5 2 0.3; 2 0.4 2];
a3 = 0.2;
2009-7-29
32
六,M文件与 M函数
修改 exam2.m如下:
function y = exam2(n)
%这是一个 M函数的例子,y = exam2(n)中的 n可以为任
%意数或矩阵,此函数用来验证 M函数变量的局部性
a1 = n ;
a2 = n + 1 ;
a3 = n + 2 ;
whos
a1
a2
a3
y = a1 + a2 + a3;
分析运行 exam2(2)结果:
2009-7-29
33
带多个返回值的 M函数文件 exam3.m
function [x,y,z] = exam3( n )
%这是一个 M 函数的例子,此函数返回 3个值
x = n ;
y = n + 1;
z = n + 2;
运行如下:
a = [1 3; 2 3];
[x,y,z] = exam3(a)
六,M文件与 M函数
2009-7-29
34
六,M文件与 M函数
3.函数的调用
函数的嵌套调用在 M函数中调用任意其他的函数
函数的递归调用在 M函数中直接或间接地调用本身
(看例程 fac.m)
2009-7-29
35
程序结构一般分为顺序结构、循环结构、分支结构,和其他高级语言一样,Matlab也包含以上 3中基本结构。
1.顺序结构依次顺序执行程序的各条语句
2.循环结构根据一定的条件,重复执行七,程序结构与控制
2009-7-29
36
七,程序结构与控制
For-end 循环控制
for i = expression
command 1;

command n;
end
表达式 expression是一个向量,包括数值、数值矩阵、字符串、字符串矩阵、字符串组成的单元阵。(例程 exam4.m)
2009-7-29
37
七,程序结构与控制
while-end循环
while expression
command1;

commandn;
end
expression 一般由逻辑运算和关系运算及一般的运算组成的表达式,且循环体应该对表达式的值产生影响。
2009-7-29
38
七,程序结构与控制
3.分支结构
if-else-end结构
a) if expression
command
end
b) if expression
command1
else
command2
end
2009-7-29
39
七,程序结构与控制
c) if expression1
command1
elseif expression2
command2

else
commandn
end
2009-7-29
40
七,程序结构与控制
switch-case-end结构
switch expression(variable)
case expression1(const)
command1
case expression2(const)
command2

otherwise
command0
end
2009-7-29
41
七,程序结构与控制
4.程序控制
return
在循环体中中断流程控制
end
结构块的界定
disp( X)
显示字符串、字符串矩阵、数字矩阵等,
在 M文件中用来显示各种结果
2009-7-29
42
七,程序结构与控制
input()
输出提示信息,并将用户信息 (和变量 )
带入工作空间
n = input(?please input a number n,\n?);
error()
显示错误信息并终止当前函数的运行,
将控制返回到键盘(若错误信息串为空,则不起作用)