矩阵及其运算
第二讲
教学目的:让学生掌握矩阵及其运算、符号运算。
教学内容:矩阵及其运算、符号运算。
教学方法:讲解法。
讲授正文:
1.4 矩阵及其运算
矩阵是Matlab 数据存储的基本单元,而矩阵的运算是Matlab 语言的核心,在Matlab 语言系统中几乎一切运算均是以对矩阵的操作为基础的。只有一行的矩阵又称为数组,但在Matlab 中数组没有行与列的概念,其运算多为元素间的运算,这点与矩阵有不同之处,因此以下分别介绍数组与矩阵。
1.4.1数组的输入与运算
1.数组的输入
创建简单数组的方法见表1-9。
表1-9 创建简单数组的方法
例如:
>>b=[1,3,5,7,9,11] %元素之间要用逗号或空格分开
b =
1 3 5 7 9 11
>>c=1:2:11
c=
1 3 5 7 9 11
>>d=linspace(1,11 ,6)
d=
1 3 5 7 9 11
2.数组元素的访问
访问一个元素:x(i)表示访问数组x 的第i 个元素.
访问一块元素:x(s:h :t) 表示访问数组x 的从第s 个元素开始,以步长为h 到第t 个元素(但不超过t ),h 可以为负数,h 缺损时为1.
直接使用元素编址序号:x([a,b,c,d])表示提取数组x 的第a 、b 、c 、d 个元素构成一个新的数组[x(a) x(b) x(c) x(d)].
3.标量与数组的运算
标量与数组的加、减、乘、除、乘方运算是数组的每个元素与该标量施加相应的加、减、乘、除、乘方运算,见表1-10。
表1-10 标量与数组的运算
其中a=[a1,a2,„,an]是数组,c 为标量。
4.数组与数组的运算
数组与数组的运算要求数组维数是相同的,其加、减、乘、除、幂运算可按元素对元素方式进行,不同维数的数组不能进行运算,见表1-11。
见表1-11 数组与数组的运算
其中a=[a1,a2,„,an], b=[b1,b2,„,bn]。
注意:数组的乘除法是指两同维数组对应元素之间的乘除法,它们的运算符只能为“. *”和“. /”或“. \”,而表达式a*b、a/b、a^b是没有意义的!
1.4.2矩阵的输入与运算
1.矩阵的输入
(1)直接输入法。最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号或回车键分隔。输入矩阵时,严格要求所有行有相同的列。例如
>>A=[2,3,5;1,3,5;6,9,4] %行之间用分号隔开
A=
2 3 5
1 3 5
6 9 4
(2)外部文件读入法。Matlab 语言允许用户调用在Matlab 环境之外定义的矩阵。可以
利用任意的文本编辑器编辑所要使用的矩阵,矩阵元素之间以特定分断符分开,并按行列布置。读入矩阵的一种方法可参考3.3节数据交换系统。另外也可以利用load 函数,其调用方法为:Load+文件名[参数]
例如:事先在记事本中建立文件:data1.txt
1 1 1
1 2 3
1 3 6
在Matlab 命令窗口中输入:
>> load data1.txt
>> data1
data1=
1 1 1
1 2 3
1 3 6
Load 函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量,如果不给定文件名,则将自动认为matlab.mat 文件为操作对象,如果该文件在Matlab 搜索路径中不存在时,系统将会报错。
2.特殊矩阵的建立
对于一些比较特殊的矩阵(单位阵、矩阵中含1或0较多),由于其具有特殊的结构,MA TLAB 提供了一些函数用于生成这些矩阵。见表1-12。
表1-12
3.矩阵中元素或块的操作
对矩阵中元素或块的常用操作,见表1-13。
表1-13 矩阵中元素或块的常用操作
例如:
A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> A(2,:) %取出A 的第2行的所有元素
ans =
4 5 6
>> A([1 3],[2,3]) %取出A 的1,3行与2,3列交叉的元素
ans =
2 3
8 9
>> A(3:-1:1,:) %以逆序提取矩阵A 的第1~3行,构成新矩阵,即进行了上下行翻转 ans =
7 8 9
4 5 6
1 2 3
4. 矩阵的基本数学运算
矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、秩运算、特征值运算等基本函数运算,这里进行简单介绍。
(1)四则运算 矩阵的加、减、乘运算符分别为“+,—,*” ,用法与数字运算几乎相同,但计算时要满足其数学要求(如:同型矩阵才可以加、减)。
矩阵的除法有两种形式:左除“\”和右除“/”。其运算规则见表1-1算术运算符。
(2)与常数的运算 常数与矩阵的运算即是同该矩阵的每一元素进行运算。但需注意进行数除时,常数通常只能做除数。
(3)基本函数运算 矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个,见表1-14。
表1-14 矩阵的函数运算命令
例如:
>>a=[2 1 –3 –1; 3 1 0 7; -1 2 4 –2; 1 0 –1 5];
>>det(a)
ans =
-85
>> inv(a)
ans =
-0.0471 0.5882 -0.2706 -0.9412
0.3882 -0.3529 0.4824 0.7647
-0.2235 0.2941 -0.0353 -0.4706
-0.0353 -0.0588 0.0471 0.2941
>> [v,d]=eig(a)
v =
-0.5843 0.9223 -0.1387 - 0.2449i -0.1387 + 0.2449i
0.7160 0.0904 -0.7828 -0.7828
-0.3806 -0.0066 -0.0803 + 0.3491i -0.0803 - 0.3491i
0.0333 -0.3756 -0.4212 - 0.0489i -0.4212 + 0.0489i
d =
-1.1228 0 0 0
0 2.5266 0 0
0 0 5.2981 + 1.3755i 0
0 0 0 5.2981 - 1.3755i
(4)数据处理
表1-15 常用数据处理的命令
另外,矩阵的运算中还有幂运算(运算符为 .^ )、指数运算(exp )、对数运算(log )、和开方运算(sqrt )等,这里就不一一说明了。
1.5 符号运算介绍
Matlab 符号运算是通过集成在Matlab 中的符号数学工具箱(Symbolic Math Toolbox)来实现的。该工具箱不是基于矩阵的数值分析,而是使用字符串来进行符号分析与运算。实际上,Matlab 中的符号数学工具箱是建立在Maple 基础上的,当进行Matlab 符号运算时,它就请求Maple 软件去计算并将结果返回给Matlab 。
Matlab 的符号数学工具箱可以完成几乎所有得符号运算功能。这些功能主要包括:符号表达式的运算,符号表达式的复合、化简,符号矩阵的运算,符号微积分、符号函数画图,符号代数方程求解,符号微分方程求解等。此外,工具箱还支持可变精度运算,既支持符号运算并以指定的精度返回结果。
1.5.1符号对象建立
符号对象是用字符串形式表示的,但又不同于普通的全由字母组成的字符串,往往很像数学中的表达式,事实上Matlab 的变量与表达式都可为符号对象。符号对象由sym ( )和syms 建立。例如:
(1)符号变量的建立
①>> syms x y z %建立符号变量x ,y ,z
②>> t=sym(„t ‟); %建立符号变量t
sym 与syms 的区别在于:syms 可以建立多个变量,而sym ()只建立一个符号变量。两者有时可以相互替代。例如:
>> syms x y z 等价于下面的三条语句
>> x=sym(„x‟);
>> y=sym(„y‟);
>> z=sym(„z‟);
(2)符号表达式的建立
符号表达式的建立常用有三种方法
①>> syms x y
z=x^3+2*y^2-5 %建立符号表达式
②>> f=sym(„x^2+3*x+2‟); %建立符号表达式f=x^2+3*x+2
③>> f= „x^2+3*x+2‟; %用单引号创建的符号表达式对空格很敏感,不要在字符间随意添加空格!
(3)符号矩阵的建立
①使用sym 函数直接生成,如
>> A=sym(‟[1+x, sin(x); 5, exp(x)]‟)
②将数值矩阵转化成符号矩阵
>> B=[2/3, sqrt(2); 5.2, log(3)]
>> C=sym(B)
最后指出一点:符号对象建立时可以附加属性real 、positive 和 unreal ,例如,
>> x=sym('x','real') %表明x 是实的
>> k=sym('k','positive') %表明k 是正的
>> x=sym('x','unreal') %去掉x 的附加属性
1.5.2符号运算函数
我们在表1-12中列出一些常用的符号运算函数名称和功能,其参数设置,读者可借助Matlab 的帮助系统自己研读。函数funtool 是一个直观的图形化函数计算器,很方便进行代数运算和微积分运算。
表1-16 符号运算函数
1.6 实例
下面通过1个实例, 说明MATLAB 的通用操作界面的使用方法, 使读者对软件环境更加熟悉, 并且掌握如何在命令窗口中使用简单命令。
实验1.1 MATLAB通用操作界面综合练习实验
按照以下步骤进行。
(1) 启动MA TLAB 。
(2) 在命令窗口中输入以下几行命令:
>> a=[1,2,3;4,5,6;7,8,9];
>> b=[1,3,5;2,4,6;5,7,9];
>> c='矩阵加法计算';
>> d=a+b;
>> wlb='矩阵乘法计算';
>> w=a*b;
(3)打开工作空间窗口查看变量, 共有6个变量, 如图1-6所示为MA TLAB 界面左上侧的工作空间窗口。
图1-6
(4)双击其中的变量“a ”,出现数组编辑器窗口(Array Editor), 如图1-7所示为该变量的详细信息。
图1-7
(5)打开历史命令窗口(Command History),如图1-8所示, 用光标选中上面的6行命令,单击鼠标右键,在快捷菜单中选择“Create M-File”命令生成M 文件。
图1-8
(6)出现M 文件编辑/调试器窗口(Editor/Debugger), 如图1-9所示。单击工具栏的“Save ”按钮,将文件保存为“d:\MATLAB7\work\jinjishuxueshiyan\shiyan101.m”。
图1-9
(7)打开当前目录浏览器窗口(Current Directory Browser),将当前目录设置为“D:\MATLAB7\work\jinjishuxueshiyan”,可以看到刚保存的“shiyan101.m ”文件,在命令窗口中输入“shiyan101”运行文件。
(8)在命令窗口中输入“save shiyan101” 命令, 从当前目录目录浏览器窗口可以看到在当前目录下生成了一个“shiyan101.mat ”数据文件,如图1-10所示。
图1-10
(9)在命令窗口中输入“exit ”命令退出MA TLAB 。
(10)重新启动MATLAB ,在命令窗口中输入“shiyan101”此时不能运行该文件,因为该文件不在MATLAB 的搜索路径中。单击界面的菜单“File ”—〉“Set Path ”, 打开设置对话框,选择“Add Folder ”按钮,将“D:\MATLAB7\work\jinjishuxueshiyan” 目录添加到搜索路径中,如图1-11所示,单击“save ” 按钮关闭该对话框,重新在命令窗口中输入“shiyan101” 则可以运行该文件。
图1-11
(11)退出MATLAB 后重新启动,打开工作空间窗口,此时将看到没有内存变量。如果要将“shiyan101.mat ”数据文件的变量导入,可选择菜单“File ”—〉“Import Data ”命令,然后选择“D:\MATLAB7\work\jinjishuxueshiyan\ shiyan101.mat ”文件,打开得如图1-12所示的“Import Wizard”窗口。
图1-12
在该窗口中将要导入的变量前的复选框选中,如选中“a ”, “b ”, “c ”, “d ”四个变量,然后单击 “finish ”按钮,查看工作空间中出现的4个变量。
(12)如果要查看文件“shiyan101.m ”的内容,只要在MA TLAB 命令窗口中输入“type shiyan101”命令,则可看到文件的内容如下:
>> type shiyan101
a=[1,2,3;4,5,6;7,8,9];
b=[1,3,5;2,4,6;5,7,9];
c='矩阵加法计算';
d=a+b;
wlb='矩阵乘法计算';
w=a*b;