3矩阵运算
- 格式:doc
- 大小:52.00 KB
- 文档页数:6
输入简单矩阵的最简单的方法是采用直接输入法。直接输入的元素用空格或逗号隔开,用“;”表示一行的结束,并用中括号[ ] 将所有元素括起来以形成矩阵。
1.
A=[1,2,3;4,5,6;7,8,9]
复制代码
这里,逗号也可以用空格代替,然后按回车看看会有什么结果。
继续,现在我想把这个矩阵的第二行取出来。可以运行下面的代码:
1. a=A(2,:)
复制代码
继续,现在我想取出这个矩阵的第三行第二列的元素也就是8,可以运行下面的代码,在输入“b”看结果
1.
b=A(3,2)
复制代码
继续,现在我要把若干个上面的矩阵拼在一起组成一个大的矩阵,定义的方式和定义数字矩阵的格式一样,只不过是刚才相应位置上的数字变成的矩阵的名字,可以运行下面的代码,看看有什么结果:
1. [A,A]
2. [A,A;A,A]
3.
[A,[10,11,12]]
复制代码
注意:在MATLAB里,冒号有很多种含义,可以表示很多种运算的方式,这里可以简单的理解为:“全部元素”。冒号“:”的使用,可以从大矩阵中提取小矩阵。
较大的矩阵可以分成若干行输入,以回车键代替分号,或者用...三个点代替。例如上面的A矩阵,可以用三行输入表示:
矩阵可以从扩展名为.m 的磁盘文件中输入,例如,名叫aa.m的文件包含以上A 矩阵的三行,在Matlab的状态空间中运行aa,则可输出A 矩阵。运行aa相当于将A矩阵调入到Matlab的状态空间里。(也可以用excel生成矩阵矩阵,因为这是一个重要的部分打算以后再讨论。)
注意:如果语句的最后一个字符是分号“;”,则执行后的结果将不被显示,但语句照常完成。若最后一个字符为逗号“,”或无任何字符,则结果将进行显示。
如果表达式很复杂,无法在一行中写完,那么可三点省略号“.”后紧跟回车键表明下一行是该行的续行。
注意: Matlab的变量和函数,其名字的第一个字符必须是字母,后跟任意个字母或数字,但系统只记前19个字符;
Matlab对字体很敏感,一般它都区分大小写,所以a 和A 是两个不同的变量。所有函数名必须小写,inv(A)表示求矩阵A的逆矩阵,但INV(A)将代表一个未定义的函数。
pi表示π (pi就是3.1415926....那个数,显示的不太清楚)
inf表示无穷,例如S=1/0,将得出:S=inf;
NaN是一个与inf有关的而又有不同性质的数,它表示不定数“Not a Number”,并通过计算象inf/ inf或0 / 0 这样的表达式获得;
矩阵的转置,还是矩阵A
A=[ 1,2,3;4,5,6;7,8,9 ]
1.
B=A'
复制代码
又例如:对于向量X=[-1 0 2]
1.
X'
复制代码
矩阵的加减运算用“+”和“-”表示。加减运算的两个矩阵必须具有相同的阶数。先生称B与定义的矩阵A一样。
1. B=A
2. C=A+B
复制代码
矩阵的乘法
1. C=A*B
复制代码
表示叉乘,就是一般意义上的矩阵乘法,而代码C=A.*B表示点乘,就是把两个矩阵C上相应位置上的数字所乘法。可以运行一下看看计算结果。(对于点乘部分,因为很重要以后会写一篇关于点乘部分的帖子!!)
矩阵的除法
A\B相当于Inv(A)*B 前提:矩阵A为方阵,并且非奇异
A/B相当于A*inv(B)前提:矩阵B为方阵,并且非奇异
A=[1 2; 3 4]
B=[5 6;7 8] 比较:A\B和inv(A)*B
比较:A/B和A*inv(B)
矩阵的乘方
矩阵A,标量N,则矩阵A的N次方可表示为:A^N
如果N 是一个标量,A 是一个方阵,那么A^N 表示A 矩阵的N 次方。如果N 是大于1 的整数,则A^ N 表示A 矩阵重复相乘N -1 次。
1.
A^2
复制代码
矩阵的逆
方阵A 的逆可通过使用下面命令得出:
1.
inv (A)
复制代码
现在来介绍生成一些特殊矩阵的生成方式
学线性代数的时候,我们最喜欢的矩阵是0矩阵和单位矩阵是吧!(感觉mit的strang教授讲课很给力,打算以后写点关于线性代数的新的,在我们学校的机械系里没能修线性代数是一个大遗憾啊!!幸亏有公开课!!)
先定义个单位矩阵,函数名是“eye()”
eye(n,m):生成n x m 单位矩阵
eye(n,n)将生成一个n x n 的单位矩阵
运行下面的代码生成一个4阶单位矩阵:
1.
eye(4);
复制代码
生成0矩阵的函数是“zeros()”
zeros(n,m):生成n x m 的零矩阵
运行下面的代码生成一个3行4列的零矩阵:
1.
a=zeros(3,4);
复制代码
注意:可能有的朋友会问:定义零矩阵有神马用呢?神马用??
定义一个零矩阵在一些时候有着非常重要的作用,比如后面也许我们会说到,对于一些变量,我们一开始不知道它的个数,这个时候就需要我们为这些不知道的东西预先分配存储空间,然后得到一个就存进去一个,这种预先分配存储的空间的动作可以提高程序运行的效率,其实不光是MATLAB,这种思想也体现在其他的编程语言之中。
继续,各个元素都为1的矩阵,函数名字:“ones()”
ones(n,m):生成n x m 的各个元素都为1的矩阵
继续,我们喜欢的另一种矩阵就是对角矩阵是吧,现在来定义它,函数名字:“diag()”
diag([a1,a2,„,an]):生成以a1,a2,„,an 为对角元的对角矩阵
语法:diag(v,k),这里,k是远离主对角线的列数,正数是向上远离,负数是向下,如果你不写,默认的就是0
运行下面两段代码,输入"a"回车看能产生什么结果:
1. v=[1 2 3 4];
2. k=1;
3. a=diag(v,k);
复制代码
特征值问题
如果A是n x n 阶矩阵,满足的n 个值即为矩阵A的特征值
函数名字:“eig()” (|A-λI|)
运行该命令,将得出关于特征值的列向量。如果A 是一个实对称矩阵,那么特征值将是实数。但是,如果A 不是对称阵,那么特征值将往往出现复数。
特征值和特征向量可以用下列双赋值语句获得:
1. [X,D]=eig(A)
复制代码
在这种情况下,D 阵的对角元是特征值,而X 阵的各列即为符合AX=XD所对应的特征向量。
1. A* X =X*D
复制代码
构造大矩阵
1. A=[1 2;3 4]
2. B=[eye(2,2),A;zeros(2,2),ones(2,2);diag([1,2,3,4]) ]
复制代码
能把B矩阵里生成的矩阵元素看明白了,那就大概弄懂怎么生成特殊矩阵的原理了。
矩阵的秩
对于上述B矩阵,它的秩为:
1. rank(B) 复制代码
还有一个十分常用的东东在这里顺便介绍一下,那就是关于用冒号来定义行向量。
size(A):检查矩阵A的维数
length(A):检查矩阵A的长度
如果你想定义一个行向量a=[1 2 3 4 5],除了用第一矩阵的方法来做,可以用更简单的方法,运行如下代码
1.
A=1:5
复制代码
这样的定义方式意思是在1到5之间以1为一个步长在定义行向量,如果你想在1到5之间每0.1个步长取一次数,那么就可以得到50个数,1,1.1,1.2„„,代码如下
1.
A=1:0.1:5
复制代码
接上一篇,应该是矩阵的最后一篇了,其实还有很多内容没有讲到,不过把我知道的大概都讲到了。下面介绍几个计算矩阵相关信息的函数
第一批:
squrm()
expm()
logm()
分别为求矩阵所有元素的开方,指数,自然对数运算,这个就不多说了,把A搞到括号里面看结果就好了。
第二批:
det()
eig()
inv()
poly()
rank()
分别为,求矩阵的行列式,特征值和特征向量,求逆,求特征多项式系数,求秩。有的重复介绍了一下,说明重复的内容灰常重要哦!~~
分别简单说一下:
第一个就不多说了,直接把A弄到括号里回车就可以了。
第二个的语法:如果按a=eig(A) 来写,则a为G的所有特征值(包括重根)组成的一个列向量,如果按[a b]=eig(A)来写,则a为A的所有特征向量组成的矩阵,b为A的所有特征值组成的对角矩阵。可以去尝试一下,运行这两个代码,看能产生什么结果。
第三个也不必多说,还是把A塞进去就好了,但是,如果A是个不可逆(奇异)的矩阵,呵呵,你可以自己尝试一下MATLAB会有什么反应。
第四个还是把A塞进去就好了,但是,它的结果是一个行向量,从左到右的数字依次为特征多项式从高次到低次的系数。
第五个就不多说了,得到数字就是矩阵的秩。常用的就这么多,还有一些关于矩阵信息的函数就不多说了,去查手册吧!!
下面来介绍一些关于数值和矩阵的一些基本的运算,注意,这里虽然很基础,但有几个地方需要特别注意 。
我们先来计算一个表达式的值,以便让大家对一些常用的运算函数有一个了解,我们要计算的数学表达式:
A=2*exp(2*pi)*asin(pi/4)+1+sqrt(3^2+4^2)+abs(cos(pi/6))
运算规则和顺序我们平时书写的一致,这里就不多说了,一些数学计算的符号和函数用到的可以去查手册,这里简单介绍几个。
如果我们想定义一个复数变量,可以直接写:c=a*i+b
这里i是单位复述变量,也可以用字母j
求复数的模和相角的函数分别是“abs()”和“anlge()”直接在括号里输入复数或名字就可以了
关于对数和指数
函数log(n)表示的是n的自然对数,log2()与log10(),分别表示以2和10为低的对数
如果你想算e和2的3次方也可以用函数来写,分别为:exp(3)和pow2(3)
关于数字运算就说这么多吧,一些不知道的运算符号可以去查查相关的手册,但这里有一点要说明的是:
在你给一个变量赋值的时候,变量字母的大写和小写表示不同的变量,是不一样的,一些书里建议的是:变量尽量用小写字母或小写的字符串来定义,并且起名字的时候尽量让这个名字有一定的意义,可以增加程序的可读性。
终于写完矩阵啦,其实matlab里内容远比我写的多,谁叫他的中文名字是《矩阵实验室》呢,多霸气啊!!
有矩阵就有MTALBA现在哪都有矩阵,所以哪都有MATLAB。
下一期是控制流!! 这名字威风啊!!