第三节矩阵基本函数运算与矩阵元素的提取(第二章)
实验三
第三节 矩阵基本函数运算与矩阵元素的提取(第二章)
一、 矩阵基本函数运算
此运算是矩阵运算中最实用的部分,其基本命令如下:
命令集9 矩阵的大小、行列式、逆、特征值、秩、迹、范数 size(A) 给出包含A的维数的一个行向量.在这个返回向量中的第一个元
素是行数,随后是列数 .
[ m,n ]=size(A) 给出A的维数、m行数和n列数,即两个标量. length(x) 给出一个向量的长度,即x分量个数.
sum(A) 若A是矩阵,给出一个行向量,其每个分量表示A相应的列和;
给出此向量的分量和. 若A是向量,
det(A) 求矩阵A的行列式.
eig(A) 求包含矩阵A的特征值的向量.
[X,D]=eig(A) 求包含矩阵A的特征值对应的对角阵D和以相应特征向
量为列的矩阵 .
inv(A)或A ^ (-1) 求矩阵A的逆矩阵.
rank(A) 求矩阵A的秩 .
trace(A) 求矩阵A的迹(对角线元素之和) .
norm(A,1) 矩阵A的1—范数或列和范数,定义如下. norm(A,2) 矩阵A的2—范数.
norm(A,inf) 矩阵A的?—范数.
norm(x,1) 向量x的1—范数或列和范数,定义如下.
norm(x,2) 向量x的2—范数.
norm(x,inf) 向量x的?—范数.
1
范数定义如下:
'设,,则相应范数定义如下 Aa,()xxxx,(,,,)?ijnm,n12
nn2xx,max ; ; xx,xx,i,,ii,21i,i1i1,
nn
,,Aa,maxAa,max,,ijij,1ij1,,1ji
A, maxA'A,,,其中为的最大特征值ii2i
二、矩阵元素的提取
在MATLAB中还有利用已存在的矩阵建立新矩阵的命令.以下假设矩阵 A是m×n的矩阵,x是个有n个元素的向量. 1. 对角阵与三角阵的生成
命令集10
diag(A) 生成一个由矩阵A主对角线元素组成的列向量.主对角线总是
从矩阵左上角开始.对于方阵来说它结束于矩阵的右下角.
diag(x) 生成一个n维的方阵,它的主对角线元素值取自向量 x,其余
元素的值都为0.
diag(A , k) 生成一个由矩阵A第k条对角线的元素组成的列向量. k= 0为
主对角线;k< 0为下第k对角线;k> 0为上第k对角线.
diag(x , k) 生成一个(n+ a b s (k) )×(n+ a b s (k) )维的矩阵,该矩阵的第
k条对角线元素取自向量x,其余元素都为零.关于参数k可参
考上个命令.
triu(A) 生成一个和A大小相同的上三角矩阵.该矩阵的主对角线及
以上元素取自A中相应元素,其余元素都为零.
triu(A , k) 生成一个和A大小相同的上三角矩阵.该矩阵的第k条对角线
及以上元素取自A中相应元素,其余元素都为零.
命令t r i u ( A , 0 )等同于命令t r i u ( A ).
2
tril(A) 生成一个和A大小相同的下三角矩阵.该矩阵的主对角线及以下
元素取自A中相应元素,其余元素都为零.
tril(A , k) 生成一个和A大小相同的下三角矩阵.该矩阵的第 k条对角线及
以下元素取自A中相应元素,负数k表示主对角线下的对角线.
其余元素都为零.命令t r i l ( A , 0 )等同于命令t r i l ( A ).
2. 向量和子矩阵的生成
在MATLAB中可以使用冒号‘:’来代表一系列数值.有时也
使用它来定义一个子矩阵.
命令集11
i : k 创建从i开始、步长为1、到k结束的数字序列,即i ,i+1, i+2, . . . , k .
如果i>k,MATLAB则返回一个空矩阵,也就是 [ ].数字i和k不必是
整数,该序列的最后一个数是小于或等于k.
i : j : k 创建从i开始、步长为j、到k结束的数字序列,即i, i+j, i+ 2j, . . .,
k .对于j= 0,则返回一个空矩阵.数字i、j和k不必是整数,该序
列的最后一个数是小于或等于k.
linspace(a , b) 在区间[a, b]上创建一个有1 0 0个元素的向量,这1 0 0个
数把整个区间线性分隔.其中a是第一个元素,b是最后一个. linspace(a, b, n) 在区间[a, b]上创建一个有n个元素的向量.这个命令和
冒号表示形式相近,但是它直接定义了数据的个数,其步长
为(b-a)/(n-1) .
命令集12 定义子阵
A ( i , j ) 返回矩阵A中第ij元素的值.
A ( : , j ) 返回矩阵A中第j列列向量.
A ( i , : ) 返回矩阵A中第i行行向量.
A ( : , j : k ) 返回由矩阵A中的第j列,第j+ 1列,直到第k列列向量组成
的子阵.
A ( i : k , : ) 返回由矩阵A中的第i行,第i+ 1行,直到第k行行向量组
成的子阵.
3
A ( i : k , j : l ) 返回由二维矩阵A中的第i行到第k行行向量和第j列到
第l 列列向量组成的子阵.
A ( : ) 将矩阵A中的每列合并成一个长的列向量.
A(j:k) 返回一个行向量,其中的元素为A ( : )中的从第j个元素到
第k个元素.
A([j1 j2 . . . ] ) 返回一个行向量,其中的元素为A ( : )中的第j1、j2 元素.
A(:,[j1 j2 . . .] ) 返回矩阵A的第j1列、第j2列等的列向量.
A([i1 i2. . . ] : , ) 返回矩阵A的第i1行、第i2行等的行向量.
A([i1 i2. . . ] , [j1 j2. . . ] ) 返回矩阵第i1行、第i2行等和第j1列、
第j2列等的元素.
二、矩阵元素的增减
在MATLAB中可以通过增加元素、行和列将一个矩阵或者向量进行扩展.由于MATLAB可以自动地改变矩阵的大小,所以使用已存在的矩阵的一部分来创建一个新矩阵是很容易的这在许多应用中都很有用.从已存在的矩阵中建立一个矩阵就和定义一个新矩阵一样.元素用空格或逗号分隔,行用分号或回车分隔. ? 例1 假设下列矩阵已经定义为:
125611 ,,,,,, ABxyz, , ,? ,, , , ,,,,1314,,,,,,,,,,3412 , ,,,,,,,
(a) 有几种方式可以将向量x扩展成1×4.假设想要的新向量是:
xnew=(9 10 0 5) 下列的三种方法都可以给出想要的结果:
? xnew=x; xnew(3)=0;xnew(4)=5; ? xnew=[x 0 5];
? t=[0 5]; xnew=[x t];
4
(b) 以下两种方法可以对矩阵A扩展一个新行,如向量z:
? Anew1=[A ; z] , ? Anew1=[A ; [13 14]] . 它们在屏幕上显示的结果如下:
Anew1=
1 2
2 4
13 14
有时还可以对矩阵添加多个新行:
>> Anew2=[A;x;z;[0 0]]
(c) 对矩阵A扩展一个新列,如y,可以这样做:
>> Anew3=[A y ] 或者 >> Anew3=[A [11;12] ] (d) 对矩阵A扩展一个矩阵的操作是相似的,输入命令:
>> Anew4=[A; B ] , >> Anew5=[A B ]
对于Anew4来说,它的列数一定等于矩阵 A和B的列数;而对于Anew5来说,它的行数一定等于矩阵A和B的行数. (e) 改变矩阵的元素
? >>A(3,3)=15 矩阵A的(3,3)元素变为15
? >>A(2,:)=[1 0] 矩阵A的第2行变为[1 0]
? >>A(2,:)=[ ] 矩阵A变为一个行向量
(f) 为了生成规则的矩阵块可以下列的方式使用命令 repmat.
5
? 例2
? >>repmat([1 0; 0 1],3,3) 返回一个由[1 0; 0 1]组成的6阶矩阵
? >>repmat([1 0],1,5)得到:返回一个由[1 0]组成的10维行向量
? 如果要创建一个所有元素都是同一个值的矩阵,可以使
用命
>>repmat(42,[2 2]) 返回一个由42组成的2阶矩阵
第四节 字符串(第二章)
在M AT L A B中可能会遇到对字符和字符串的操作.字符串能够显示在屏幕上,也可以用来构成一些命令,这些命令在其他的命令中用于求值或者被执行.
一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符.实际上,元素中存放的是字符的内部代码,也就是ASCII码.当在屏幕上显示字符变量的值时,显示出来的是文本,而不是ASCII数字.由于字符串是以向量的形式来存储的,所以可以通过它的下标对字符串中的任何一个元素进行访问.
字符矩阵也可以这样,但是它的每行字符数必须相同. 一、 输入格式
MATLAB中的字符串用单引号来定义:
Name Of Variable = 'text'
这里的text 可以是字母、数字和特殊字符
6
(a) 简单的分配方法,如name = 'John Smith ',在屏幕上就会有如下显示:name =
John Smith
(b) 分配一个字符.如果(a)中变量name已存在,令name (3)= 'a ',则会给出:name =
Joan Smith
(c) 将上例中的字符串name的元素前后互换位置,可以输入:
for i=length(name):-1:1
enam(i)=name(length(name)+1-i);
end
enam
下面显示出字符串eman的值:eman =
htimS naoJ
(d) 在字符串中用两个单引号来表示一个单引号:
whoscat='Joan"s cat'
显示结果为:whoscat =
Joan's cat
(e) 字符串的组成可以象数字矩阵一样:
>>name1= 'Joan '; name2= 'John ' ;heart= 'is in love with ';
>>sentence=[name1, ' ',heart, ' ', name2]
显示的结果为:sentence=
Joan is in love with John
7
(f) 冒号表达式的使用和在数字矩阵中的使用情况一样:
>>name='Charles Johnson';firstname= name(1:7)
firstname =
Charles
二、 字符串求值
MATLAB命令可以以字符串的形式进行输入和存储.这些命令字符串通过eval命令来求值.
命令集13 字符串求值
eval (str) 执行st 中包含的MATLAB命令并返回结果.
eval(str1, str2) 执行str1中的MATLAB命令,如果没有错误就和执行
eval(str1)一样;如果在对str1求值中第一个字符串是一个错
误,则对字符串str2进行求值,给出一个错误信息或者其他内
容.
g = inline (str ,arg1, arg2) 从字符串str中建立一个叫内联的函数g,
如存储在工作内存中的函数,可以用g (val1 ,val2 )来调用.函数
中参数的名字可以在字符串 arg1,arg2, 中给出,如果没有给
出,MATLAB将从str中找出小写字母作为参数的名字. ? 例3
>>b=[1 2 3];k=[2 2 2 ];x=[1.2 1.5 1.2];str1= 'b.* sin(k.*x) '; >>y=eval(str1)
y=
0.6755 0.2822 2.0264 >>g=inline('3*sin(x)+5*cos(y) ', 'x ', 'y ');g(pi,2*pi)
ans=
5
8
练习题
1. 建立新矩阵 已知 ,求 Amagic,(5)
? diagAdiagdiagAdiagdiagAdiagAdiagA(),(()),((),2),(,2),(,2) ,
? triuAtrilAtriuAtriuAtrilA(),(),(,1),(,2),(,2) , ,
? AAA(3,2),(:,2),(4,:)
? AAA(2:3,3:4),(:),(:,:)
2. 计算下列各题,已知, Amagic,(4)x, (1234)
AAA? 的行和、列和,的迹、秩,的大小
,1A ~AA? 的特征值、特征向量及
? AAA ,,12,
xxx ,,? 12,
'3( 已知Amagic,(4),Bones,(4),,建立下xy, , (1234),(5678)列矩阵:
AA? 在的左边增加一列y,的右边增加一列y;
AA? 在的上面增加一行x,的下面增加一行x;
AA? 在的左边增加矩阵B变为矩阵C,的下面增加矩阵B变为
矩阵D;
? 由矩阵D的第1、2、5、8行组成矩阵F;由矩阵C的第1、3、5、
7列组成矩阵G;
? 由矩阵D的第1、2、5、8行及C第1、3、5、7列组成矩阵H;
9
C? 删除的第二行,删除的第三列 ; D
第3章 MATLAB程序设计
Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算能力和丰富的绘图功能;可以人机交互式的命令行的方式工作;作为一种高级语言,同时也可以与 C、FORTRAN 等高级语言一样进行程序设计.
利用 Matlab 的程序控制功能,将相关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕. ? 例1 用 mesh 绘制半径为 3 的球
命令行方式: 编程方式:
新建一个M 文件 qiu.m如下:
10
u=[0:pi/60:2*pi]; >> u=[0:pi/60:2*pi];
v=[0:pi/60:pi]; >> v=[0:pi/60:pi];
[U,V]=meshgrid(u,v); >> [U,V]=meshgrid(u,v);
R=3; >> R=3;
X=R*sin(V).*cos(U); >> X=R*sin(V).*cos(U);
Y=R*sin(V).*sin(U); >> Y=R*sin(V).*sin(U);
Z=R*cos(V); >> Z=R*cos(V);
mesh(X,Y,Z); >> mesh(X,Y,Z);
axis equal; >> axis equal;
保存后,在命令窗口输入 qiu,即可执行该 M 文件.
第一节 M 文件
一、 M文件介绍
, 用 Matlab 语言编写的程序称为 M 文件
, M 文件以 .m 为扩展名
, M 文件是由若干 Matlab 命令组合在一起构成的,它可以完
成某些操作,也可以实现某种算法
, 文件的命名规则与变量相同~文件名应尽量与程序要表达的
意义相符合,以方便今后调用.(如例1) 二、 M文件的建立、打开与保存
M文件是文本文件,可以用任何文本编辑器来建立和编辑,通常
使用Matlab自带的M文件编辑器.
11
? 新建一个M文件
, 菜单操作 ( File? New? M-File )
, 命令操作 ( edit M 文件名 )
, 命令按钮 ( 快捷键 )
? 打开已有的 M 文件
, 菜单操作 ( File ?Open )
, 命令操作 ( edit M 文件名 )
, 命令按钮 ( 快捷键 )
, 双击M文件 (在当前目录窗口)
? 保存M 文件
, 菜单操作 ( File ?Save )
, 命令按钮 ( 快捷键 )
三、 M 文件分类(根据调用方式的不同)
, Script:脚本文件/命令文件(可以直接运行的M文件)
命令文件就是命令行的简单叠加,matlab会自动按顺序执行文件中的命令.这样就解决了用户在命令窗口中运行许多命令的麻烦,还可以避免用户做许多重复性的工作.(如例1 ), Function:函数文件
函数文件主要用以解决参数传递和函数调用的问题.
(1) 第一行必须指定函数名、输入变量 (参数)和输出变量(参数).
输入参数是从MATLAB的工作空间复制到函数工作空间的变量.
第一行举例如下:
12
function [输出形参表] = name(输入形参表)
(2) 一个函数可以有0个、一个或几个输入参数和返回值.
当输出形参表的参数个数大于2时,[ ]不可缺省~
(3) 建议函数名和文件名一样.调用时所用的变量并不需要与函数文件中定义的变量有相同的名字.
? 例2 比较下列两个程序,注意命令文件(以dd1命名)与函数文件(以dd2命名)的区别与联系.
x=input(‘输入初值x=’); function y=dd2(x,n)
n=input(‘输入迭代次数=’);
y(1)=x ;
y(1)=x ;
for k=1:n for k=1:n
x=1/(x+1); y(k)=x; x=1/(x+1); y(k)=x;
end 四、 两类文件的区别 end y
, 函数文件的第一行必须包含字 function,命令文件没有
这种要求.因此,没有这样第一行的M文件是命令文件.
, 命令文件没有输入参数,也不返回输出参数,而函数文
件可以带输入参数,也可以返回输出参数;
, 命令文件对matlab工作空间中的变量进行操作,文件中所
有命令的执行结果也完全返回到工作空间中,而函数文
件中定义的变量为局部变量,当函数文件执行完毕时,
这些变量被清除.
, 命令文件可以直接运行.在MATLAB命令窗口输入命令
文件的名字,就会顺序执行命令文件中的命令,而函数
13
文件不能直接运行,而要以函数调用的方式运行. 五、M文件的调用
对已存在的M文件
, 命令文件在命令窗口直接输入该文件名即可;如例1
>>qiu
, 函数文件调用的一般格式
[输出实参数表]=函数名(输入实参数表)
? 函数调用时各实参数出现的顺序、个数应与函数定义时形
式参数的顺序、个数一致,否则出错;
? 函数调用时,先将实参数传递给形式参数,从而实现参数
的传递,然后再执行函数的功能.如例2
>>y=dd2(1,10)
? 当输出实参数表的参数个数大于2时,[ ]不可缺省~
第二节 程序控制结构
程序控制结构有三种:顺序结构、选择结构、循环结构.任何复杂的程序都可以由这三种基本结构构成.Matlab提供了实现控制结构的语句,利用这些语句可以编写解决实际问题的程序. 一、顺序结构
顺序结构是指按照程序中语句的排列顺序从上到下依次执行,直到程序的最后一个语句如例1的qiu文件和例2的dd1文件.这是最简单的一种程序结构.一般涉及数据的输入、计算或处
14
理、数据的输出等内容.
1. 数据的输入
通过input命令来接收从终端输入的内容,它也可以显示文本和提示.
命令集14 输入命令
input(out ,in) 在屏幕上显示出字符串out的文本并等待终端的输入.如果变量in是's',则输入的内容以字符串的形式进行保存,通常MATL AB在保存前要尽可能地求出表达式的值.如果使用格式控制符号如'\n',字符串out可以是若干行. ? 例3
>> xm=input('What''s your name?','s') What's your name?syx
xm =
syx
>> xm=input('What''s your name?') What's your name?syx
??? Error using ==> input
Undefined function or variable 'syx'. What's your name?'syx'
xm =
syx
2. 数据的输出
15
可以通过简单地输入变量的名字来显示数字矩阵或者字符串向量的内容,结果将显示出变量的名字和内容.
另一种显示变量的值就是使用命令disp.使用它只显示出变量的内容,这是有用的,特别是在字符串的应用中. 命令集15 显示命令
disp(A) 显示矩阵A的内容,如果A是字符串,则显示出它的
文本.
练习题:将例1、例2的程序在matlab中建立、保存、运行.练习题:
>> A=magic(5);
>> diag(A),diag(diag(A)),diag(diag(A),2),diag(A,2),diag(A,-2)
ans =
17
5
13
21
9
ans =
17 0 0 0 0
0 5 0 0 0
0 0 13 0 0
0 0 0 21 0
0 0 0 0 9
ans =
0 0 17 0 0 0 0
16
0 0 0 5 0 0 0
0 0 0 0 13 0 0
0 0 0 0 0 21 0
0 0 0 0 0 0 9
0 0 0 0 0 0 0
0 0 0 0 0 0 0
ans =
1
14
22
ans =
4
12
25
>> triu(A),tril(A),triu(A,1),triu(A,-2),tril(A,-2)
ans =
17 24 1 8 15
0 5 7 14 16
0 0 13 20 22
0 0 0 21 3
0 0 0 0 9
ans =
17 0 0 0 0
23 5 0 0 0
4 6 13 0 0
10 12 19 21 0
11 18 25 2 9
ans =
0 24 1 8 15
0 0 7 14 16
17
0 0 0 20 22
0 0 0 0 3
0 0 0 0 0
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
0 12 19 21 3
0 0 25 2 9
ans =
0 0 0 0 0
0 0 0 0 0
4 0 0 0 0
10 12 0 0 0
11 18 25 0 0 >> A(3,2),A(:,2),A(4,:)
ans =
6
ans =
24
5
6
12
18
ans =
10 12 19 21 3 >> A(2:3,3:4),A(:),A(:,:)
ans =
18
7 14
13 20
ans =
17
23
4
10
11
24
5
6
12
18
1
7
13
19
25
8
14
20
21
2
15
16
22
3
9
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A=magic(4);
>> x=[1 2 3 4]; >> sum(A),sum(A'),trace(A),rank(A),det(A)
19
ans =
34 34 34 34
ans =
34 34 34 34
ans =
34
ans =
3
ans =
4 4
>> [x,y]=eig(A),inv(A),det(A)
x =
0.5000 0.8236 0.3764 -0.2236
0.5000 -0.4236 0.0236 -0.6708
0.5000 -0.0236 0.4236 0.6708
0.5000 -0.3764 -0.8236 0.2236
y =
34.0000 0 0 0
0 8.9443 0 0
0 0 -8.9443 0
0 0 0 -0.0000
Warning: Matrix is close to singular or badly scaled.
20
Results may be inaccurate. RCOND = 4.625398e-018.
ans =
1.0e+015 *
-0.2649 -0.7948 0.7948 0.2649
-0.7948 -2.3845 2.3845 0.7948
0.7948 2.3845 -2.3845 -0.7948
0.2649 0.7948 -0.7948 -0.2649
ans =
0
>> norm(A,1),norm(A,2),norm(A,inf)
ans =
34
ans =
34
ans =
34
>> norm(x,1),norm(x,2),norm(x,inf)
ans =
2.0000
ans =
1.2649
ans =
21
1.9236
>> A=magic(4);
>> B=ones(4);
>> x=[1 2 3 4];
>> y=[5 6 7 8];
>> [y' A y']
ans =
5 16 2 3 13 5
6 5 11 10 8 6
7 9 7 6 12 7
8 4 14 15 1 8
>> [x;A;x]
ans =
1 2 3 4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
1 2 3 4
>> C=[B A],D=[A;B]
C =
1 1 1 1 16 2 3 13
1 1 1 1 5 11 10 8
1 1 1 1 9 7 6 12
1 1 1 1 4 14 15 1
D =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
22
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>> F=D([1 2 5 8],:)
ans =
16 2 3 13
5 11 10 8
1 1 1 1
1 1 1 1
>>G=C(:,[1 3 5 7])
ans =
1 1 16 3
1 1 5 10
1 1 9 6
1 1 4 15
>> H=D([1 2 5 8],[1 3])
ans =
16 3
5 10
1 1
1 1
>> C([1 3 4],:)
ans =
1 1 1 1 16 2 3 13
1 1 1 1 9 7 6 12
1 1 1 1 4 14 15 1
>> D(:,[1 2 4])
ans =
23
16 2 13
5 11 8
9 7 12
4 14 1
1 1 1
1 1 1
1 1 1
1 1 1
24
本文档为【第三节矩阵基本函数运算与矩阵元素的提取(第二章)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。