当前位置:文档之家› matlab下的矩阵运算

matlab下的矩阵运算

第二讲矩阵运算§1基本矩阵运算元我们在第一讲章已说明过 MATLAB 的运算是以数组(array>及矩阵 (matrix> 方式在做运算,而这二者在MATLAB的基本运算性质不同,数组强调元素对元素的运算,而矩阵则采用线性代数的运算方式。

我们就来说明矩阵运算的特点。

以下将数组及矩阵的运算符号及其意义列出>> A=[2 5 1。

7 3 8。

4 5 21。

16 13 0]。

>> A' % A的转置矩阵A =2 7 4 165 3 5 131 8 21 0>> A=[4 -1 3]。

B=[-2 5 2]。

>> dot_prod = sum(A.*B> % 二个数组做内积dot_prod =-7>> c=dot(A,B> % 以dot函数也可做内积运算c =-7>> A=[4。

-1。

3]。

>> dot_prod = sum(A'.*B>。

% 如果A是行数组则先做转置,再做内积>> F=[2 5 -1]。

G=[0 1 -3]。

>> out_prod=F'*G。

% 二矩阵做外积>> A=[2,5,1。

0,3,-1]。

>> B=[1,0,2。

-1,4,-2。

5,2,1]。

>> C=A*B % 矩阵相乘,注意二个矩阵的大小须相容C =2 22 -5-8 10 -7>> A=[2 1。

4 3]。

>> A^2 % 矩阵次方ans =8 520 13下面我们演示一个具体的例子。

假设我们把本地区的天气分为3种状态:晴,阴,雨。

若今天天阴,则明天天晴的概率为1/2,阴的概率为1/4,下雨的概率为1/4。

如果今天天阴,或者今天下雨,则明天天气是其它情况的概率会是其它的值,将这些概率值列入下面的表中。

天气状态转移概率表2行第3列(最后一列>的值为1/2,,这给出了今天下雨明天转阴的概率。

将上表内的概率数据用矩阵A表示矩阵A中概率称为转移概率,矩阵A称为转移矩阵。

已知今天天气晴、阴、雨的概率,可以用转移矩阵A提供的数据来计算明天天气晴、阴、雨的概率。

记、、分别为今天天气是晴、阴、雨的概率,、、分别为明天天气是晴、阴、雨的概率,两个列向量分别称为今日概率向量和明日概率向量,则有矩阵计算式以当前状态预测未来状态的概率模型称为Markov链。

如果在清晨我们听到的天气预报为,今天阴或雨的概率都是1/2,那么,今日概率向量。

利用上式计算明日概率向量的Matlab操作是:A=[3/4 1/2 1/4。

1/8 1/4 1/2。

1/8 1/4 1/4]。

%输入矩阵AP=[0 1/2 1/2]'。

%输入向量PP1=(A*P>'P1 =3/8 3/8 1/4这里,P1就是按行向量的形式输出的结果。

明天天气为晴、阴的概率都是3/8,下雨的概率是1 /4。

明日的概率向量可以用前面的Markov链求出,那么两天的概率向量可用公式给出。

这里需要计算,我们再用Matlab完成矩阵乘积的计算。

A2=A^2A2 =21/32 9/16 1/23/16 1/4 9/325/32 3/16 7/32用键盘敲入A2 = A^2后再按下【Enter】键就得到了结果A2。

从本例可见,Matlab的操作并不复杂,它用于矩阵运算十分方便。

§2 线性方程组的求解因为矩阵的乘法运算一般不具有可交换性,所以AX与XA一般不相同,为求解X,Matla b提供了两种除法运算符:斜杠“\”和“/”分别表示左除和右除。

左除“\”:用X=A\B表示AX=B的解;右除“/”:用X=B/A表示XA=B的解。

例解线性方程组输入:A=[2 1 -5 1 。

1 -3 0 -6。

0 2 -1 2。

1 4 -7 6],b=[8 9 -5 0]A =2 1 -5 11 -3 0 -60 2 -1 21 4 -7 6b =8 9 -5 0方程组的解为X=(A\b'>'X =3.0000 -4.0000 -1.0000 1.0000§3多项式与矩阵多项式一、多项式行向量的创建方法在MATLAB里,多项式由一个行向量表示,它的系数是按降序排列。

例如,输入多项式x4-12x3+0x2+25x+116>> p=[1 -12 0 25 116]p =1 -12 0 25 116注意,必须包括具有零系数的项。

除非特别地辨认,MATLAB无法知道哪一项为零。

给出这种形式,用函数roots找出一个多项式的根。

?>>r=roots(p>r =11.74732.7028-1.2251 + 1.4672i-1.2251 - 1.4672i因为在MATLAB中,无论是一个多项式,还是它的根,都是向量,MATLAB按惯例规定,多项式是行向量,根是列向量。

给出一个多项式的根,也可以构造相应的多项式。

在MATLAB中,命令poly执行这个任务。

>> pp=poly(r>pp =1.0e+002 *Columns 1 through 40.0100 -0.1200 0.0000 0.2500Column 51.1600 + 0.0000i>> pp=real(pp> %throw away spurious imaginary partpp =1.0000 -12.0000 0.0000 25.0000 116.0000因为MATLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,因为截断误差,则poly的结果有一些小的虚部,这是很普通的。

消除虚假的虚部,如上所示,只要使用函数real抽取实部。

二、多项式乘法函数conv支持多项式乘法(执行两个数组的卷积>。

考虑两个多项式a(x>=x3+2x2+3x+4和b(x>= x3+4x2+9x+16的乘积:>>a=[1 2 3 4] 。

b=[1 4 9 16]。

>> c=conv(a , b>c =1 6 20 50 75 84 64结果是c(x>=x6+6x5+20x4+50x3+75x2+84x+64。

两个以上的多项式的乘法需要重复使用conv。

三、多项式加法对多项式加法,MATLAB不提供一个直接的函数。

如果两个多项式向量大小相同,标准的数组加法有效。

把多项式a(x>与上面给出的b(x>相加。

>>d=a+bd =2 6 12 20结果是d(x>= 2x3+6x2+12x+20。

当两个多项式阶次不同,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次。

考虑上面多项式c和d相加:>>e=c+[0 0 0 d]e =1 6 20 52 81 96 84结果是e(x>= x6+6x5+20x4+52x3+81x2+96x+84。

要求首零而不是尾零,是因为相关的系数象x幂次一样,必须整齐。

如果需要,可用一个文件编辑器创建一个函数M文件来执行一般的多项式加法。

:function p=mmpadd(a,b>% MMPADD Polynomial addition.% MMPADD(A,B> adds the polynomial A and B% Copyright (c> 1996 by Prentice Hall,Inc.if nargin<2error(' Not enough input arguments '>enda=a(:>.' 。

% make sure inputs are polynomial row vectorsb=b(:>.' 。

na=length(a> 。

% find lengths of a and bnb=length(b> 。

p=[zeros(1,nb-na> a]+[zeros(1,na-nb> b] 。

% add zeros as necessary现在,为了阐述mmpadd的使用,再考虑前一页的例子。

>> f=mmpadd(c,d>f =1 6 20 52 81 96 84它与上面的e相同。

当然,mmpadd也用于减法。

>>g=mmpadd(c , -d>g =1 6 20 48 69 72 44结果是g(x>= x6+6x5+20x4+48x3+69x2+72x+44。

四、多项式除法在一些特殊情况,一个多项式需要除以另一个多项式。

在MATLAB中,这由函数deconv 完成。

用上面的多项式b和c>> [q , r]=deconv(c , b>q =1 2 3 4r =0 0 0 0 0 0 0这个结果是b被c除,给出商多项式q和余数r,在现在情况下r是零,因为b和q的乘积恰好是c。

五、多项式导数因为一个多项式的导数表示简单,MATLAB为多项式求导提供了函数polyder。

>> gg =1 6 20 48 69 72 44>> h=polyder(g>h =6 30 80 144 138 72六、多项式估值根据多项式系数的行向量,可对多项式进行加,减,乘,除和求导,也应该能对它们进行估值。

在MATLAB中,这由函数polyval来完成。

>> x=linspace(-1, 3> 。

% choose 100 data points between -1and 3.>> p=[1 4 -7 -10] 。

% uses polynomial p(x> = x3+4x2-7x-10>> v=polyval(p , x> 。

计算x值上的p(x>,把结果存在v里。

然后用函数plot绘出结果。

>> plot(x , v>,title(' x^3+4x^2-7x-10 '>, xlabel(' x '>多项式估值七、有理多项式在许多应用中,例如富里哀(Fourier>,拉普拉斯(Laplace>和Z变换,出现有理多项式或两个多项式之比。

在MATLAB中,有理多项式由它们的分子多项式和分母多项式表示。

对有理多项式进行运算的两个函数是residue和polyder。

函数residue执行部分分式展开。

相关主题