1.AX=b
A\b或者inv(A)*b
一、 特殊矩阵的实现
常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵、三角形矩阵等,这类特殊矩阵在线性代数中具有通用性;还有一类特殊矩阵在专门学科中有用,如有名的希尔伯特(Hilbert)矩阵、范德蒙(Vandermonde) 矩阵等。
1.零矩阵:所有元素值为零的矩阵称为零矩阵。零矩阵可以用zeros函数实现。zeros是MATLAB内部函数,使用格式如下:
zeros(m):产生m× m阶零矩阵;zeros(m,n):产生m ×n阶零矩阵, 当m=n时等同于zeros(m);zeros(size(A)):产生与矩阵A同样大小的零矩阵。2.幺矩阵:所有元素值为1的矩阵称为幺矩阵。幺矩阵可以用ones函数实现。它的调用格式与zeros函数一样。
【例1】 试用ones分别建立3×2阶幺矩阵、和与前例矩阵A同样大小的幺矩阵。用ones(3,2) 建立一个3×2阶幺阵:ones(3,2) % 一个3×2阶幺阵ans =1 1 1 1 1 13.单位矩阵:主对角线的元素值为1、其余元素值为0的矩阵称为单位矩阵。它可以用MATLAB内部函数eye建立,使用格式与zeros相同。
4.数量矩阵:主对角线的元素值为一常数d、其余元素值为0的矩阵称为数量矩阵。显然,当d=1时,即为单位矩阵,故数量矩阵可以用eye(m)*d或eye(m,n)*d建立。5.对角阵:对角线的元素值为常数、其余元素值为0的矩阵称为对角阵。我们可以通过MATLAB内部函数diag,利用一个向量构成对角阵;或从矩阵中提取某对角线构成一个向量。使用格式为:
diag(V), diag(V,k)
设V为具有m个元素的向量,diag(V)将产生一个m×m阶对角阵,其主对角线的元素值即为向量的元素值;diag(V,k)将产生一个n×n(n=m+|k|,k为一整数)阶对角阵,其第k条对角线的元素值即为向量的元素值。注意:当k>0,则该对角线位于主对角线的上方第k条;当k<0,该对角线位于主对角线的下方第|k|条;当k=0,则等同于diag(V)。用diag建立的对角阵必是方阵。6.上三角阵:使用格式为triu(A)、triu(A,k)
设A为m×n阶矩阵,triu(A)将从矩阵A中提取主对角线之上的上三角部分构成一个m × n阶上三角阵;triu(A,k)将从矩阵A中提取主对角线第|k|条对角线之上的上三角部分构成一个m × n阶上三角阵。注意:这里的k与diag(A,k)的用法类似,当k>0,则该对角线位于主对角线的上方第k条;当k<0,该对角线位于主对角线的下方第|k|条;当k=0,则等同于triu (A)8.下三角阵:使用格式为tril(A)、tril(A,k)
tril的功能是从矩阵A中提取下三角部分构成下三角阵。用法与triu相同。9.空矩阵
在MATLAB里,把行数、列数为零的矩阵定义为空矩阵。空矩阵在数学意义上讲是空的,但在MATLAB里确是很有用的。例如A=[0.1 0.2 0.3;0.4 0.5 0.6];B=find(A>1.0) %返回向量A中符合条件的元素的位置B = [ ]这里[ ]是空矩阵的符号,B=find(A>1.0)表示列出矩阵A中值大于1.0的元素的序号。当不能满足括号中的条件时,返回空矩阵。另外,也可以将空矩阵赋给一个变量,如:B=[ ]B = [ ]二、矩阵的特征值 与特征向量
对于N×N阶方阵A,所谓A的特征值问题是:求数λ和N维非零向量x(通常为复数),使之满足下式:
Ax=λx则称λ为矩阵A的一个特征值(特征根),而非零向量x为矩阵A的特征值λ所对应的特征向量。对一般的N×N阶方阵A,其特征值通常为复数,若A为实对称矩阵,则A的特征值为实数。MATLAB提供的内部函数eig可以用来计算特征值与特征向量.eig函数的使用格式有五种,其中常见的有
E=eig(A), [V,D]=eig(A),(1) E=eig(A):由eig(A)返回方阵A的N个特征值,构成向量E;
(2) [V,D]=eig(A):由eig(A)返回方阵A的N个特征值,构成N×N阶对角阵D,其对角线上的N个元素即为相应的特征值,同时将返回相应的特征向量赋予N×N阶方阵V的对应列;三、行列式的值
MATLAB提供的内部函数det用来计算矩阵的行列式的值。设矩阵A为一方阵(必须是方阵),求矩阵A的行列式值的格式为:det(A)。注意:本函数同样能计算通过构造出的稀疏矩阵的行列式的值。
【例6】利用随机函数产生一个三阶方阵A,然后计算方阵之行列式的值。
A=rand(3)A = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214det(A)ans = 0.4289四、 矩阵求逆及其 线性代数方程组求解
1.矩阵的基本性质
① 矩阵的秩:矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。 ② 矩阵的迹:等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
③向量的范数:用来度量矩阵或向量在某种意义下的长度。范数有多种方法定义,其定义不同,范数值也就不同。(1) norm(V)或norm(V,2):计算向量V的2—范数。 (2) norm(V,1):计算向量V的1—范数。 (3) norm(V,inf):计算向量V的∞—范数。④ 矩阵的范数:MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。⑤ 矩阵的条件数:在MATLAB中,计算矩阵A的3种条件数的函数是: (1) cond(A,1): 计算A的1—范数下的条件数。 (2) cond(A)或cond(A,2): 计算A的2—范数数下的条件数。 (3) cond(A,inf): 计算A的 ∞—范数下的条件数。矩阵条件数
在MATLAB里,多项式由一个行向量表示,该向量中的元素是按多项式降幂排列的。
P=[a1 a2 …… an an+1] 注意,必须包括具有零系数的项 。1.多项式求根
命令格式:x=roots(A)。这里A为多项式的系数A(1),A(2),…,A(N),A(N+1);解得的根赋值给数组X,即X(1),X(2), …,X(N)。
【例9】试用ROOTS函数求多项式x4+8x3-10的根这是一个4次多项式,它的五个系数依次为:1,8,0,0,-10。下面先产生多项式系数的向量A,然后求根:A=[1 8 0 0 -10]A = 1 8 0 0 -10x=roots(A)x =
-8.0194 -0.5075 + 0.9736i -0.5075 - 0.9736i 1.03442.多项式的建立
若已知多项式的全部根,则可以用POLY函数建立起该多项式;也可以用POLY函数求矩阵的特征多项式。POLY函数是一个MATLAB程序,调用它的命令格式是:
A=poly(x)若x为具有N个元素的向量,则poly(x)建立以x为其根的多项式,且将该多项式的系数赋值给向量A。例:a=[1 2 3;4 5 6;7 8 0];
p=poly(a) p1=poly2str(p,'x') %显示数学多项式的形式3.求多项式的值
POLYVAL函数用来求代数多项式的值,调用的命令格式为:
Y=polyval(A,x)本命令将POLYVAL函数返回的多项式的值赋值给Y。若x为一数值,则Y也为一数值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。【例10】以例9的4次多项式、分别取x=1.2和下面的矩阵的2×3个元素为自变量计算该多项式的值。
A=[1 8 0 0 -10]; % 例9的4次多项式系数x=1.2; % 取自变量为一数值y1=polyval(A,x)y1 = -97.3043x=[-1 1.2 -1.4;2 -1.8 1.6] % 给出一个矩阵xx = -1.0000 1.2000 -1.40004.多项式的四则运算
(1)多项式加、减
对于次数相同的若干个多项式,可直接对多项式系数向量进行加、减的运算。如果多项式的次数不同,则应该把低次的多项式系数不足的高次项用零补足,使同式中的各多项式具有相同的次数。(2)多项式乘法
若A、B是由多项式系数组成的向量,则CONV函数将返回这两个多项式的乘积。调用它的命令格式为:C=conv(A,B)命令的结果C为一个向量,由它构成一个多项式。【例11】 a(x)=x2+2x+3; b(x)=4x2+5x+6;
c(x) = (x2+2x+3)(4x2+5x+6)(3)多项式除法
当A、B是由多项式系数组成的向量时,DECONV函数用来对两个多项式作除法运算。调用的命令格式为:[Q,r]=deconv(A,B)本命令的结果:多项式A除以多项式B获商多项式赋予Q(也为多项式系数向量);获余项多项式赋予r(其系数向量的长度与被除多项式相同,通常高次项的系数为0)。DECONV是CONV的逆函数,即有A=conv(B,Q)+r。【例12】试用例9的4次多项式与多项式2x2-x+3相除。
A=[1 8 0 0 -10];B=[2 -1 3];[P,r]=deconv(A,B)P = 0.5000 4.2500 1.3750r = 0 0 0 -11.3750 -14.1250商多项式P为 0.5x2+4.25x+1.375,余项多项式r为 -11.375x-14.125。(4)多项式的求导
matlab提供了polyder函数多项式的微分。命令格式:polyder(p): 求p的微分polyder(a,b): 求多项式a,b乘积的微分例:a=[1 2 3 4 5]; poly2str(a,'x')ans = x^4 + 2 x^3 + 3 x^2 + 4 x + 5b=polyder(a)b = 4 6 6 4poly2str(b,'x')ans =4 x^3 + 6 x^2 + 6 x + 4