1 / 67

第二章 MATLAB 数值计算

第二章 MATLAB 数值计算. 本章学习目标 ● 掌握生成特殊矩阵的方法。 ● 掌握矩阵分析的方法。 ● 掌握求解线性方程组的各种方法。 ● 了解矩阵的稀疏存储方式。 ● 掌握数据统计和分析的方法。 ● 掌握多项式常用运算。. §2.5 稀疏矩阵的处理.

maddy
Download Presentation

第二章 MATLAB 数值计算

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 MATLAB数值计算 本章学习目标 ● 掌握生成特殊矩阵的方法。 ● 掌握矩阵分析的方法。 ● 掌握求解线性方程组的各种方法。 ● 了解矩阵的稀疏存储方式。 ● 掌握数据统计和分析的方法。 ● 掌握多项式常用运算。

  2. §2.5 稀疏矩阵的处理 稀疏矩阵中具有大量的零元素,而仅含极少量的非零元素。 2.5.1矩阵存储方式 matlab的矩阵有两种存储方式:完全存储方式和稀疏存储方式。 (1)完全存储方式 矩阵的全部元素按列存储。以前讲到的矩阵的存储方式都是按这个方式存储的,此存储方式对稀疏矩阵也适用。例如,不论是m×n阶普通的还是稀疏的实矩阵均需要m×n个存储单元,而复矩阵还要翻倍。在这种方式下,矩阵中的全部零元素也必须输入。

  3. §2.5 稀疏矩阵的处理 2.稀疏存储方式: 仅存储矩阵所有的非零元素的值及其位置,即行号和列号。在matlab中稀疏存储方式也是按列存储的。例: A=[1 0 0 0;0 5 0 0;2 0 0 7]是具有稀疏特征的矩阵,其完全存储方式是按列存储全部12个元素: 1,0,2,0,5,0,0,0,0,0,0,7 其稀疏存储方式如下: (1,1) 1 (3,1) 2 (2,2) 5 (3,4) 7

  4. §2.5 稀疏矩阵处理 2.5.2 矩阵的稀疏存储方式 1.将完全存储方式转化为稀疏存储方式 函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。当矩阵S是稀疏存储方式时,函数调用相当A=S。

  5. §2.5 稀疏矩阵的处理 X=[2,0,0,0,0;0,0,0,0,0;0,0,0,5,0;0,1,0,0,-1;0,0,0,0,-5]; A=sparse(X) A=  (1,1) 2 (4,2) 1 (3,4) 5 (4,5) -1 (5,5) -5

  6. §2.5 稀疏矩阵的处理 sparse函数还有其他一些调用格式。 ● sparse(m,n):生成一个m × n的所有元素都是0的稀疏矩阵。 ● sparse(u,v,S):u、v、S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵。 和稀疏矩阵操作有关的函数。 ● [u,v,S] = find(A):返回矩阵A中非0元素的下标和元素。这里产生的u、v、S可作为sparse(u,v,S)的参数。 ● full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。

  7. §2.5 稀疏矩阵的处理 >> A=sparse([1 2 5 7],[1 3 2 3],[1 1 2 4]) A = (1,1) 1 (5,2) 2 (2,3) 1 (7,3) 4 >> B=full(A) B = 1 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0

  8. §2.5 稀疏矩阵的处理 2.产生稀疏存储矩阵 B=spconvert(A) 其中A为一个m×3或m×4的矩阵,其每行表示一个非0元素,m是非0元素的个数,A中每个元素的意义是: (i,1) 第i个非0元素所在的行; (i,2) 第i个非0元素所在的列; (i,3) 第i个非0元素值的实部; (i,4) 第i个非0元素值的虚部,若矩阵的全部元素都是实数,则无须第4列。 该函数将A所描述的一个稀疏矩阵转化为一个稀疏存储矩阵。

  9. §2.5 稀疏矩阵的处理 【例2.16】 根据表示稀疏矩阵的矩阵A,产生一个稀疏存储方式矩阵B。

  10. §2.5 稀疏矩阵的处理 >> A=[2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12]; >> B=spconvert(A) B = (3,1) -1 (2,2) 1 (4,3) 3 (5,3) 8 (6,6) 12

  11. §2.5 稀疏矩阵的处理 3.带状稀疏存储矩阵

  12. §2.5 稀疏矩阵的处理 首先分析一下矩阵X,其特征数据:5×6阶矩阵,有三条对角线,它们的位置与值依次是:第一条在主对角线下方第三条,记d1=-3,该对角线的元素值为0,0,0,41,51;第二条为主对角线,记d2=0,元素值为11,21,31,42,52;第三条位于主对角线上方第三条,记d3=3,元素值为12,22,32,0,0. 将带状对角线之值构成下列矩阵B,将带状的位置构成向量d:

  13. §2.5 稀疏矩阵的处理 然后利用spdiags函数产生一个稀疏存储矩阵。 B=[0,0,0,41,51;11,21,31,42,52;12,22,32,0,0]'; d=[-3,0,3]'; A=spdiags(B,d,5,6) % 产生一个稀疏存储矩阵A A = (1,1) 11 (4,1) 41 (2,2) 21 (5,2) 51 (3,3) 31 (1,4) 12 (4,4) 42 (2,5) 22 (5,5) 52 (3,6) 32

  14. §2.5 稀疏矩阵的处理 A=spdiags(B,d,m,n) 其中,m、n为原带状矩阵的行数与列数。B为r×p阶矩阵,这里r=min(m,n),p为原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零对角线。取值方法是:若非零对角线上元素个数等于r,则取全部元素;若非零对角线上元素个数小于r,则应该用零补足到r个元素。补零的原则:当m<n,应从该对角线的第1行开始补零或向后补零至末行;当m≥n,则应从该对角线的第1列开始补零或向后补零至末列。d为具有p个元素的列向量,它的第i个元素为该带状矩阵的第i条对角线的位置k。k的取法: 若是主对角线,取k=0, 若位于主对角线的下方第s条对角线,取k=−s, 若位于主对角线的上方第s条对角线,则取k=s。

  15. §2.5 稀疏矩阵的处理 4.单位矩阵的稀疏存储 单位矩阵只有对角线元素为1,其他元素都为0,是一种具有稀疏特征的矩阵。函数eye产生一个完全存储方式的单位矩阵。MATLAB还有一个产生稀疏存储方式的单位矩阵的函数,这就是speye。函数speye(m,n)返回一个m × n的稀疏存储单位矩阵。 s = (1,1) 1 (2,2) 1 (3,3) 1

  16. §2.5 稀疏矩阵的处理 2.5.3 稀疏矩阵应用举例 稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的。当参与运算的对象不全是稀疏存储矩阵时,所得结果一般是完全存储形式。例如: A=[0,0,3;0,5,0;0,0,9]; B=sparse(A); B*B ans = (2,2) 25 (1,3) 27 (3,3) 81 rand(3)*B ans = 0 1.7643 2.4808 0 4.0658 4.5058 0 0.0493 1.9622

  17. §2.5 稀疏矩阵的处理 【例2.17】求下列三对角线性代数方程组的解。

  18. §2.5 稀疏矩阵的处理 B=[1,1,2,1,0;2,4,6,6,1;0,3,1,4,2]'; %取A对角线上元素构成B d=[-1,0,1]’; %产生带状位置向量 A=spdiags(B,d,5,5); %产生稀疏存储的系数矩阵 b=[0,3,2,1,5]’; %方程右边参数向量 x=(inv(A)*b)’ %求解 x = -0.1667 0.1111 2.7222 -3.6111 8.6111

  19. §2.5 稀疏矩阵的处理 >> A=full(A) A = 2 3 0 0 0 1 4 1 0 0 0 1 6 4 0 0 0 2 6 2 0 0 0 1 1 >> x=(inv(A)*b)' x = -0.1667 0.1111 2.7222 -3.6111 8.6111

  20. §2.6 数据统计处理 2.6.1 最大值和最小值 1.求最大值和最小值 ● max(A):如果A是向量,则返回向量A的最大值。如果A中包含复数元素,则按模取最大值。如果A是矩阵,则返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。 ● [Y,U]=max(A):如果A是向量,则返回向量A的最大值存入Y,最大值的序号存入U。如果A中包含复数元素,则按模取最大值。如果A是矩阵,则Y向量记录A的每列的最大值,U向量记录每列最大值的行号。 ● max(A,[],dim):仅用于矩阵。dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。

  21. §2.6 数据统计处理 【例2.18】分别求矩阵 中各列和各行元素中的最大值。 x=[54,86,453,45;90,32,64,54;-23,12,71,18]; [y,l]=max(x) %求矩阵x中各列元素的最大值及其这些元素的行下标 y = 90 86 453 54 l = 2 1 1 2

  22. §2.6 数据统计处理 y=max(x,[ ],2) %命令中dim=2,故查找操作在各行中进行 y = 453 90 71 求矩阵最小值的函数是min,其用法和max完全相同。

  23. §2.6数据统计处理 2.两个向量或矩阵对应元素的比较 函数max和min还能对两个同型的向量或矩阵进行比较。max函数调用格式如下。 ● max(A,B):A、B是两个同型的向量或矩阵,返回值是与A、B同型的向量或矩阵,其中的每个元素等于A、B对应元素的较大者。 ● max(A,n):n是一个标量,返回值是与A同型的向量或矩阵,其中的每个元素等于A对应元素和n中的较大者。

  24. §2.6 数据统计处理 【例2.19】已知 , 求矩阵x、y所有同一位置上的较小元素构成的新矩阵p。 x=[443,45,43;67,34,-43]; y=[65,73,34;61,84,326]; p=min(x,y) p = 65 45 34 61 34 -43

  25. §2.6 数据统计处理 Matlab还允许对一个矩阵和一个常数或单变量操作。例如,仍然用上例的矩阵x和已赋值为45的变量f,操作如下: x=[443,45,43;67,34,-43]; f=45; P=min(x,f) p = 45 45 43 45 34 -43

  26. §2.6 数据统计处理  2.6.2 求和与求积 数据序列求和的函数是sum。sum函数的调用格式如下。 ● sum(A):如果A是一个向量,则返回向量各元素的和。如果A是一个矩阵,则返回一个行向量,其第i个元素是A的第i列的元素和。 ● sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。 数据序列求积的函数是prod,其用法和sum完全相同。

  27. §2.6 数据统计处理 【例2.20】已知 ,求矩阵A的每行元素 的乘积和全部元素的乘积。 >> A=[1:4;5:8;9:12]; >> S=prod(A,2) S = 24 1680 11880 >> p=prod(S) p = 479001600

  28. §2.6 数据统计处理 5.1.3 平均值和中值 数据序列的平均值指的是算术平均值。中值是指在数据序列中其值的大小恰好处在中间的元素。例如数据序列2,5,7,9,12的中值为7;如果数据为偶数个,则中值等于中间的两项之平均值。例如,数据序列2,5,6,7,9,12中,处于中间的数是6和7,故其中值为此两数之平均值6.5。

  29. §2.6 数据统计处理 求数据序列平均值的函数是mean,mean函数的调用格式如下。 ● mean(A):如果A是一个向量,则返回向量的算术平均值。如果A是一个矩阵,则返回一个行向量,其第i个元素是A的第i列的算术平均值。 ● mean(A,dim):当dim为1时,该函数等同mean(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的算术平均值。 求数据序列中值的函数是median,其用法和mean完全相同。

  30. §2.6 数据统计处理 【例2.21】分别求向量x=[9 4 7 -8 2]与y=[9 4 7 -8 2 10] 的平均值和中值。 >> x=[9 4 7 -8 2]; >> mean(x) ans = 2.8000 >> median(x) ans = 4

  31. §2.6 数据统计处理 >> y=[9 4 7 -8 2 15]; >> mean(y) ans = 4.8333 >> median(y) ans = 5.5000

  32. §2.6 数据统计处理 5.1.4 累加和与累乘积 所谓累加和或累乘积,是指从数据序列的第1个元素开始直到当前元素进行累加或累乘,作为结果序列的当前元素值。 在MATLAB中,使用cumsum和cumprod函数求得向量和矩阵元素的累加和与累乘积向量。

  33. §2.6 数据统计处理 cumsum函数的调用格式如下。 ● cumsum(A):如果A是一个向量,则返回向量的累加和。如果A是一个矩阵,则返回一个矩阵,其第i列是A的第i列的累加和向量。 ● cumsum(A,dim):当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。 求累乘积的函数是cumprod,其用法和cumsum完全相同

  34. §2.6 数据统计处理 【例2.22】求 的值。 >> x=[1,ones(1,10)*2] x = 1 2 2 2 2 2 2 2 2 2 2 >> y=cumprod(x) y = Columns 1 through 7 1 2 4 8 16 32 64 Columns 8 through 11 128 256 512 1024 >> s=sum(y) s = 2047

  35. §2.6 数据统计处理 2.6.5 标准方差与相关系数 1.求标准方差 方差描述了一组数据波动的大小,方差越小,数据波动越小。对于具有n个元素的数据序列 标准方差的计算公式如下:              或                 其中

  36. §2.6 统计数据处理    在MATLAB中,提供了计算数据序列的标准方差的函数std。对于向量X,std(X)返回一个标准方差。对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。

  37. §2.6 数据统计处理 std函数的一般调用格式为 Y=std(A,flag,dim)    其中flag取0或1,当flag=0时,按σ1所列公式计算标准方差;当flag=1时,按σ2所列公式计算标准方差。dim取1或2,当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。默认flag=0,dim=1。

  38. §2.6 统计数据处理 例2.23 a=[7,4,9,8,10,7,8,7,8,7;7,6,10,5,9,8,10,9,5,6]'; mean(a) ans = 7.5000 7.5000 std(a) ans = 1.5811 1.9579 两人成绩的平均值相同,但小明的成绩的标准方差较小,说明小明的成绩波动较小,成绩更稳定。

  39. §2.6 统计数据处理 >> a=[7,4,9,8,10,7,8,7,8,7;7,6,10,5,9,8,10,9,5,6] a = 7 4 9 8 10 7 8 7 8 7 7 6 10 5 9 8 10 9 5 6 >> mean(a,2) ans = 7.5000 7.5000 >> std(a,0,2) ans = 1.5811 1.9579

  40. §2.6 统计数据处理 2.相关系数 相关系数用来衡量两组数据之间的线性相关程度。对于两组数据序列 ,可由下式计算出两组数据的相关系数。 相关系数的绝对值越接近1,说明两组数据相关程度越高。

  41. §2.6 统计数据处理 corrcoef函数用于求数据的相关系数矩阵。 ● corrcoef(X,Y):求向量X和Y的相关系数。 ● corrcoef(X):返回从矩阵X形成的一个相关系数矩阵。它把矩阵X的每列作为一个变量,然后求它们的相关系数。

  42. §2.6 统计数据处理 【例2.24】随机抽取15名健康成人,测定血液的凝血酶浓度及凝血时间,数据如下表所示。分析凝血酶浓度与凝血时间之间的相关性。 凝血酶浓度及凝血时间

  43. §2.6 统计数据处理 X=[1.1,1.2,1.0,0.9,1.2,1.1,0.9,0.6,1.0,0.9,1.1,0.9,1.1,1,0.7]'; Y=[14,13,15,15,13,14,16,17,14,16,15,16,14,15,17]'; R=corrcoef(X,Y) R = 1.0000 -0.9265 -0.9265 1.0000

  44. §2.6 统计数据处理 2.6.6 排序 MATLAB提供了对向量X进行排序的函数sort(X),函数返回一个对X中的元素按升序排列的新向量。sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为 [Y,I]=sort(A,dim,mode) 其中Y是排序后的矩阵,而I记录Y中的元素在A中的位置。dim指明对A的列还是行进行排序,若dim=1,则按列排;若dim=2,则按行排。mode指明按升序还是降序排序,'ascend'为升序,'descend'为降序。dim默认取1,mode默认取'ascend'。

  45. §2.6 统计数据处理 【例2.25】 对三维矩阵 做各种排序。 A=[1,-8,5;4,12,6;13,7,-13]; sort(A,2,‘descend’) %对A的每行按降序排序 Ans= 5 1 -8 12 6 4 13 7 -13

  46. §2.6 统计数据处理 [X,I]=sort(A) %对A按列排序,并将每个元素 所在行号送矩阵I X = 1 -8 -13 4 7 5 13 12 6 I = 1 1 3 2 3 1 3 2 2

  47. §2.7 多项式计算 2.7.1 多项式的四则运算 1.多项式的加减运算 在MATLAB中,多项式的加减运算就是其所对应的系数向量的加减运算。如果多项式的次数不同,则应该把低次的多项式系数不足的高次项用0补足,使同式中的各多项式具有相同的次数。例如,计算(x32x2+5x+3)+(6x1),命令如下: a=[1,-2,5,3]; b=[0,0,6,-1]; c=a+b c = 1 -2 11 2

  48. §2.7 多项式计算 2.多项式乘除运算 函数conv(P1,P2)用于求多项式的乘积,其中P1、P2是两个多项式的系数向量。 函数[Q,r]=deconv(P1,P2)用于对多项式作除法运算,其中P1、P2是两个多项式的系数向量,返回值Q是商式的系数向量,r是余式的系数向量。 【例2.26】求 和

  49. §2.7 多项式计算 >> a=[1 8 0 0 -10]; >> b=[2 -1 3]; >> c=conv(a,b) c = 2 15 -5 24 -20 10 -30 >> [p r]=deconv(a,b) p = 0.5000 4.2500 1.3750 r = 0 0 0 -11.3750 -14.1250

  50. §2.7 多项式计算 从上面的运行可知,两个多项式的乘积是一个6次多项式: 多项式A除以多项式B的商式P为 ,余式r为11.375x14.125。 deconv与conv是互逆的。 conv(B,p)+r ans = 1 8 0 0 -10

More Related