Matlab矩阵操作设计.docx
《Matlab矩阵操作设计.docx》由会员分享,可在线阅读,更多相关《Matlab矩阵操作设计.docx(32页珍藏版)》请在冰豆网上搜索。
Matlab矩阵操作设计
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
Matlab矩阵操作设计
要求完成的主要任务:
利用MATLAB-mathematics对矩阵操作进行设计,具体包括创建(普通、单位、零)矩阵、矩阵加减、矩阵相乘、矩阵的乘方、矩阵除法、矩阵转置、矩阵点乘、求矩阵的特征值和特征向量、矩阵的变形(reshape)、验证如下函数的功能:
all、any、find、isempty、isequal、xor。
课程设计的目的:
1.理论目的
课程设计的目的是加深对matlab理论知识的掌握,并将知识学以致用,解决矩阵的一些基本操作问题。
2.实践目的
《Matlab原理与应用》课程应用实践的目的是为了让学生熟悉matlab语言,并且利用matlab语言或者函数族进行专业课程理论知识的再现,让学生体会matlab的强大功能,为今后使用matlab语言奠定基础。
时间安排:
序
号
阶段内容
所需时间
1
方案设计
1天
2
程序编写及调试
3天
3
撰写报告
2天
4
答辩
1天
合计
7天
指导教师签名:
年月日
系主任(或责任教师)签字:
年月日
摘要
矩阵是高等代数学中的常见工具,在自然学科各分支和经济管理等领域有很多的应用,也常见于统计分析等应用数学学科中。
在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。
矩阵的运算是数值分析领域的重要问题。
由此可见,学习矩阵的运算及应用是十分重要的。
MATLAB是一种面向科学和工程计算的语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,具有编程效率高、调试手段丰富、扩展能力强等特点,MATLAB的矩阵处理程序具有强大的功能,可以解决很多矩阵的基本问题。
本次设计就是基于MATLAB进行矩阵的简单操作。
关键词:
矩阵MATLAB
Abstrct
Matrixisacommontoolofhigheralgebra,therearealotofapplicationsinthefieldofnaturalsciencebranchandeconomicmanagement,alsocommoninstatisticalanalysisandapplicationinmathematics.Inphysics,matrixincircuitry,mechanics,opticsandquantumphysicsareapplied;computerscience,3Danimationalsoneedtousematrix.Matrixoperationisanimportantissueinthefieldofnumericalanalysis.Therefore,learningalgorithmsandapplicationofmatrixisveryimportant.
MATLABisanewscienceandengineeringcomputinglanguage,whichcombinesnumericalanalysis,matrixcomputation,signalprocessingandgraphicaldisplayinone,withhighefficiencyofprogramming,debuggingmeansrich,strongexpandingabilityandothercharacteristics,matrixprocessingprogramMATLABhasapowerfulfunction,canbethebasicproblemsolvingalotofmatrix.ThisdesignisbasedonthesimpleoperationofMATLABmatrix.
Keyword:
matrix.MATLAB
1引言
1.1Matlab介绍
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
1.2矩阵简介
在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。
矩阵是代数学的一个主要研究对象,也是数学研究及应用的一个重要工具。
由mn个数排成的m行n列的数表
称为m×n矩阵,记作A或
也可记作(
)或
。
数
称为矩阵的第i行第j列的元素。
元全都是实数的矩阵称为实矩阵,元中有复数的矩阵称为复矩阵。
当m=n时,矩阵A称为n阶矩阵或n阶方阵,此时
…,
称为n阶矩阵的对角线元素,当所有的非对角线元素αij(i≠j)均为零时,A就称为n阶对角矩阵,简称对角矩阵。
当对角线下面(或上面)的所有元素均为0时,A就称为上(或下)三角矩阵。
2Matlab矩阵操作使用的符号及函数简介
符号或函数名功能描述
+加
-减
*矩阵乘
^矩阵乘方
’矩阵转置
\矩阵左除
/矩阵右除
[]矩阵生成
all测试向量中所用元素是否为真
any测试向量中是否有真元
find查找非零元素的下标
isempty若是空阵则为真
isequal若两数组相同则为真
xor或非逻辑
ones创建一个所有元素都为1的矩阵
zeros创建一个所有元素都为0的矩阵
inv矩阵的逆
dot维数相同的两个向量的点乘
eig求矩阵特征值和特征向量
3Matlab中创建矩阵的方法
3.1普通矩阵
3.1.1直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。
具体方法如下:
将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。
例:
(1)>>a=[23145;17319;31219]
a=
23145
17319
31219
(2)>>b=[-12,9,23;5,13,21;15,6,27]
b=
-12923
51321
15627
3.1.2利用m文件建立矩阵
当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。
例:
(1)>>a=[23145;17319;31219]
a=
23145
17319
31219
(2)>>b=[-12,9,23;5,13,21;15,6,27]
b=
-12923
51321
15627
3.2特殊矩阵
3.2.1单位矩阵
ones()函数:
产生全为1的矩阵。
ones(n):
产生n*n维的全1矩阵。
ones(m,n):
产生m*n维的全1矩阵。
例:
(1)>>c=ones(4)
c=
1111
1111
1111
1111
(2)>>d=ones(4,2)
d=
11
11
11
11
3.2.2零矩阵
zeros()函数:
产生全为0的矩阵。
zeros(n):
产生n*n维的全0矩阵。
zeros(m,n):
产生m*n维的全0矩阵。
例:
(1)>>e=zeros(4)
e=
0000
0000
0000
0000
(2)>>f=zeros(5,2)
f=
00
00
00
00
00
4Matlab矩阵操作的要求
利用MATLAB-mathematics对矩阵操作进行设计,具体包括矩阵加减、矩阵相乘、矩阵的乘方、矩阵除法、矩阵转置、矩阵点乘、求矩阵的特征值和特征向量、矩阵的变形(reshape)以及验证如下函数的功能:
any、all、find、isequal、isempty、xor。
要求自己单独完成课程设计内容。
5Matlab矩阵操作过程
5.1矩阵加减
5.1.1运算符号:
+(加),—(减)
5.1.2运算规则:
设有两个m×n矩阵A=(
)和B=(
),那么矩阵A与矩阵B的和记作A+B,规定为
注:
只有当两个矩阵是同型矩阵时,这两个矩阵才能进行加法运算
设矩阵B=(
),记—B=—(
),—B称为矩阵B的负矩阵,由此可规定矩阵的减法为
5.1.3程序设计:
>>a=[23145;17319;31219];
>>b=[-12,9,23;5,13,21;15,6,27];
>>c=a+b,d=a-b
5.1.4运行结果:
c=
112328
221640
46846
d=
355-18
12-10-2
16-4-8
5.2矩阵相乘
5.2.1运算符号:
*
5.2.1运算规则:
设A=
,B=
,那么规定矩阵A与矩阵B的乘积是一个m×n矩阵C=
,其中
并把此乘积记作C=AB。
注意:
只有当第一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时,乘积AB才是有意义的;并且AB的行数等于第一个矩阵A的行数,AB的列数等于第二个矩阵B的列数。
此外,注意AB不一定等于BA。
5.2.3程序设计:
>>a=[23145;17319;31219];
>>b=[-12,9,23;5,13,21;15,6,27];
>>e=a*b,f=b*a
5.2.4运行结果:
e=
-131419958
96306967
-774191268
f=
590-95548
987151671
1284282702
5.3矩阵乘方
5.3.1运算符号:
^
5.3.2运算规则:
(1)当A为方阵,P为大于0的整数时,A^P表示A的P次方,即A自乘P次;P为小于0的整数时,A^P表示A-1的P次方。
(2)标量的数组乘方P.^A,标量的数组乘方定义为
。
(3)A.^P:
表示A的每个元素的P次乘方。
5.3.3程序设计:
>>a=[2,5,1;3,2,6;1,4,3];
>>b=a^3,c=3.^a,d=a.^3
5.3.4运行结果:
b=
147288269
198308375
143271269
c=
92433
279729
38127
d=
81251
278216
16427
5.4矩阵除法
5.4.1运算符号:
\(左除)、/(右除)
5.4.2运算规则:
如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。
A\B即A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。
5.4.3程序设计:
>>a=[23145;17319;31219];
>>b=[-12,9,23;5,13,21;15,6,27];
>>c=a\b,d=a/b
5.4.4运行结果:
c=
0.5838-0.42710.4754
-1.82671.02120.6560
0.02920.90510.5763
d=
-1.40922.2043-0.3288
-0.2523-0.02890.9411
-0.86150.13541.3323
5.5矩阵转置
5.5.1运算符号:
’
5.5.2运算规则:
把矩阵A的行换成同序数的列得到一个新的矩阵,叫做A的转置矩阵,记作
或A’。
5.5.3程序设计:
>>a=[23145;17319;31219];
>>b=a'
5.5.3-
(2)运行结果:
b=
231731
1432
51919
5.6矩阵点乘
5.6.1运算符号:
函数dot
5.6.2运算规则:
(1)形式:
dot(A,B):
矩阵A与B有相同的维数,则A与B的点乘即为A的列与B的列的对应元素相乘然后再相加,得到新的一维行向量。
(2)形式:
dot(A,B,n):
若n为1,则运算与形式
(1)相同;若n为2,则结果为A的行与B的行的对应元素相乘然后再相加,得到新的一维列向量。
若n>2,则结果为A的元素与对应的B中的元素相乘,得到新的矩阵。
5.6.3程序设计:
>>a=[12345;678910;1112131415;1617181920;2122232425];
>>b=[2524232221;2019181716;1514131211;109876;54321];
>>c=dot(a,b),e=dot(a,b,1),f=dot(a,b,2),g=dot(a,b,3),h=dot(a,b,4),i=dot(a,b,5)
5.6.4运行结果:
c=
575590595590575
e=
575590595590575
f=
335
710
835
710
335
g=
25486988105
120133144153160
165168169168165
160153144133120
10588694825
h=
25486988105
120133144153160
165168169168165
160153144133120
10588694825
i=
25486988105
120133144153160
165168169168165
160153144133120
10588694825
5.7求矩阵特征值和特征向量
5.7.1运算符号:
函数eig
5.7.2运算规则:
(1)E=eig(A):
求矩阵A的全部特征值,构成向量E。
(2)[V,D]=eig(A):
求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
5.7.3程序设计:
>>a=[12,5,23;15,4,13;25,9,7];
>>b=eig(a),[V,D]=eig(a)
5.7.4运行结果:
b=
39.0802
-14.6147
-1.4655
V=
-0.6147-0.65370.3364
-0.4915-0.0018-0.9417
-0.61690.75680.0078
D=
39.080200
0-14.61470
00-1.4655
5.8矩阵变形
5.8.1运算符号:
函数Reshape
5.8.2运算规则:
reshape(A,m,n),将A变为m×n的矩阵,按列排列。
5.8.3程序设计:
>>a=[1234;5678;9101112];
>>b=reshape(a,3,4),c=reshape(a,4,3)
5.8.4运行结果:
b=
1234
5678
9101112
c=
1611
5104
938
2712
6函数功能验证
6.1all函数
6.1.1功能介绍:
测试向量中所用元素是否为真。
B=all(a),设a为一向量,若a都为非0则返回逻辑值1。
否则返回逻辑值0,对矩阵的话,分别考虑a的每列的值并返回逻辑值。
B=all(A,dim),按照指定的标量dim沿着A的维数检验。
all(A,1)表示按矩阵A的列向量判断,all(A,2)表示按矩阵A的行向量判断。
6.1.2程序设计:
>>a=[013;000;925];
>>b=all(a),c=all(a,1),d=all(a,2)
6.1.3运行结果:
b=
000
c=
000
d=
0
0
1
6.2any函数
6.2.1功能介绍:
测试向量中是否有真元素。
B=any(A),如果A是向量,如果向量里有非0的数,则返回1(true),如果A是矩阵,则把矩阵的列当做向量来处理,函数返回每个列向量的逻辑值。
B=any(A,dim),按照指定的标量dim沿着A的维数检验。
any(A,1)表示按矩阵A的列向量判断,any(A,2)表示按矩阵A的行向量判断。
6.2.2程序设计:
>>a=[013;000;925];
>>b=any(a),c=any(a,1),d=any(a,2)
6.2.3运行结果:
b=
111
c=
111
d=
1
0
1
6.3find函数
6.3.1功能介绍:
查找非零元素的下标。
[i,j]=find(A),运行的结果中i表示非零元素的行索引值,j表示非零元素的列索引值。
6.3.2程序设计:
>>a=[013;000;925];
>>b=find(a),[i,j]=find(a)
6.3.3运行结果:
b=
3
4
6
7
9
i=
3
1
3
1
3
j=
1
2
2
3
3
6.4isequal函数
6.4.1功能介绍:
判断若干个给定的数组容量是否是相等的。
对于矩阵,判断的是若干个矩阵对应的元素是否全部相等。
若相等,则输出1,否则输出0。
6.4.2程序设计:
>>a=[013;628;925];
>>b=[013;628;925];
>>c=[000;012;637];
>>d=isequal(a,b),e=isequal(a,c)
6.4.3运行结果:
d=
1
e=
0
6.5isempty函数
6.5.1功能介绍:
若是空阵则为真。
判断一个数组是否是空的(没有任何元素)。
对于矩阵,则是判断矩阵中是否有元素,若没有,则输出1,否则输出0。
6.5.2程序设计:
>>a=[013;628;925];
>>b=[];
>>c=zeros
(2);
>>d=isempty(a),e=isempty(b),f=isempty(c)
6.5.3运行结果:
d=
0
e=
1
f=
0
6.6xor函数
6.6.1功能介绍:
C=xor(A,B),对矩阵A和B对应元素执行异或操作。
若返回元素C(i,j,...)是逻辑1,则说明A和B对应元素不同,否则输出0。
其中矩阵元素非0的全部看做1。
6.6.2程序设计:
>>a=[013;628;925];
>>c=[000;012;637];
>>b=xor(a,c)
6.6.3运行结果:
b=
011
100
000
7心得体会
通过这次课程设计,我学会了用Matlab这个软件对矩阵进行一些基本操作。
由于以前没有接触过Matlab,刚开始课程设计的时候还是很困难,不知从何下手。
于是借了一些参考资料,边看边学,同时也向会的同学请教,慢慢地开始了自己的设计。
这让我意识到在做设计前,一定要将相关的知识吃透,因为这是做设计的基础,否则,在实际操作时就不会操作,这将使我们做设计时的难度加大,浪费做设计的宝贵时间。
做设计时,把基本的知识看过之后,就需要找一个实际的程序来动手编一下,不要等所有的知识都学好之后再去编程,要在编程的过程中学习,程序需要什么知识再去补充,编程是一点一点积累的,所以要需做一些随手笔记什么的。
一定要要做到不懂就问,问不出来就自己探索,务必要将每个原理,每个方法弄清楚,弄明白。
比如我在做矩阵的点乘时,书上没有详细的讲解,同学们也是一知半解,不是很懂。
我就自己在软件中编程,通过各种不同的程序结果的比较,最终弄懂了点乘的方法。
虽然学习MATLAB的时间虽然很短,但却让我了解到了它的强大和它的功能。
学习最终还是要靠自己。
我相信在摸索过程中,我们会发现和体会学习的快乐!
参考文献
1.《MATLAB基础及应用教程》.周开利、邓春晖主编.北京大学出版社.2007年出版
2.《经济数学----线性代数》第二版.吴传生主编.高等教育出版社.2009年出版
3.《MATLAB符号运算及其应用》.黄忠霖主编.国防工业出版社.2004年出版
4.《控制系统计算机辅助设计----MATLAB语言及应用》.薛定宇主编.清