MATLAB论文 1245243马卫兵.docx
《MATLAB论文 1245243马卫兵.docx》由会员分享,可在线阅读,更多相关《MATLAB论文 1245243马卫兵.docx(12页珍藏版)》请在冰豆网上搜索。
MATLAB论文1245243马卫兵
《MATLAB语言》课程论文
基于MATLAB的矩阵运算
姓名:
马卫兵
学号:
12010245243
专业:
电子信息工程
班级:
电子信息工程一班
指导老师:
汤全武
学院:
物理电气信息学院
完成日期:
2011.12.10
基于MATLAB的矩阵运算
(马卫兵120102452432010级电子信息工程
(一)班)
MATLAB可以用来做有限元的矩阵运算。
本文对MATLAB计算软件在矩阵运算方面带来的快捷、方便和高效作了介绍。
用具体实例对这个软件在矩阵方面的运用作了具体的演算。
从而证明了MATLAB在计算方面的先进和优越。
【关键字】矩阵运算MATLAB语言线性方程组求解
一、问题的提出
在当前信息化、全球化的大背景下,传统的手工计算已不能满足人们高效率、高准确度的决策需求。
因此计算机辅助决策当仁不让地成为了管理决策的新工具、新方法。
MAYLAB是由美国MathWork公司于1984年推出的一种科学计算软件,现已成为国际公认最优秀的科学计算与工程分析的高级语言和应用工具。
MATLAB是“矩阵实验室”的缩写,着重针对科学计算、工程计算和绘图的需求。
MATLAB大大提高了解题作业、分析研究的效率。
Matlab是以矩阵为计算单位的,所以说,矩阵运算是学习MATLAB的基础,了解MATLAB语言在矩阵中的应用在你以后的学习中也是很有必要的。
那么,MATLAB在矩阵运算中的应用有哪些呢?
二、用MATLAB解决矩阵的一些初等问题
1、矩阵的创建
MATLAB具有很多生成不同类型矩阵的函数,其规则是:
矩阵的所有元素必须在一对方括号之间,同一行不同元素之间用逗号或空格隔开,不同行之间用分号隔开。
(1)、直接输入法:
这是最简单创建矩阵的方法,是从键盘直接输入矩阵的元素。
(2)、利用MATLAB函数创建矩阵(GulimChe)
问题1、利用特殊函数来创建矩阵
MATLAB程序如下:
>>A=[1,2,3;4,5,6];%产生一个两行三列的矩阵A
B=[eye(size(A));,A]%利用矩阵A建立矩阵B
运行结果:
B=
100
010
123
456
(3)利用文件建立矩阵
当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件调入工作环境中使用即可。
(4)特殊矩阵的生成(几种格式类似)
a、全零阵(函数zeros)
B=zeros(n)%生成n×n全零阵
B=zeros(m,n)%生成m×n全零阵
B=zeros(size(A))%生成与矩阵A相同大小的全零阵
b、单位阵(函数eye)
c、全1阵(函数ones)
d、均匀分布随机矩阵(函数rand)
rand('state',s)%使状态重置为s
rand('state',0)%重置发生器到初始状态
2、矩阵的基本运算及其分析
(1)算术运算:
MATLAB的基本算术运算有:
+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)、’(转置)。
加减法:
若A和B矩阵的维数相同,则可以执行,A和B矩阵的相应元素相加减。
如果A与B的维数不相同,则MATLAB将给出错误信息。
乘法:
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵。
除法:
在MATLAB中,有两种矩阵除法运算:
\、/,分别表示左除和右除。
乘方:
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
转置:
对实数矩阵进行行列互换,对复数矩阵,共轭转置,特殊的,操作符.’。
点运算:
在MATLAB中,有一种特殊的运算,叫点运算。
点运算符有.*、./、.\和.^。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
问题2、怎样利用MATLAB解决矩阵的算术运算
MATLAB程序如下:
>>A=[11,22,33;10,20,30;44,55,66];%建立一个三行三列的矩阵A
B=[1,2,3;4,5,6;7,8,9];%建立一个三行三列的矩阵B
Z1=A+B%根据矩阵A、B建立矩阵Z1
Z2=A-B%根据矩阵A、B建立矩阵Z2
Z3=A^2%根据矩阵A、B建立矩阵Z3
Z4=A.^2%根据矩阵A、B建立矩阵Z4
Z5=A*B%根据矩阵A、B建立矩阵Z5
Z6=A.*B%根据矩阵A、B建立矩阵Z6
运行结果:
Z1=
122436
142536
516375
Z2=
102030
61524
374757
Z3=
179324973201
163022702910
393856987458
Z4=
1214841089
100400900
193630254356
Z5=
330396462
300360420
7268911056
Z6=
114499
40100180
308440594
(2)关系运算
MATLAB提供了6种关系运算符:
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
注意“=”和“==”的区别。
问题3、怎样利用MATLAB解决矩阵的关系运算:
MATLAB程序如下:
>>A=[1234;5678];%建立一个矩阵A
B=[0214;0772];%建立一个矩阵B
C1=A==B%根据矩阵A、B建立矩阵C1
C2=A>=B%根据矩阵A、B建立矩阵C2
C3=A~=B%根据矩阵A、B建立矩阵C3
运行结果:
C1=
0101
0010
C2=
1111
1011
C3=
1010
1101
(3)逻辑运算
MATLAB提供了3种逻辑运算符:
&(与)、|(或)和~(非)。
逻辑运算的运算法则:
a&ba,b全为非零时,运算结果为1,否则为0。
a|ba,b中只要有一个非零,运算结果为1。
~a当a是零时,运算结果为1;当a非零时,运算结果为0。
问题4、怎样利用MATLAB解决矩阵的逻辑运算
MATLAB程序如下:
>>A=[0234;1350]%建立一个矩阵A
B=[1053;1505]%建立一个矩阵B
C1=A&B%根据矩阵A、B建立矩阵C1
C2=A|B%根据矩阵A、B建立矩阵C2
C3=~A%根据矩阵A建立矩阵C3
运行结果:
A=
0234
1350
B=
1053
1505
C1=
0011
1100
C2=
1111
1111
C3=
1000
0001
注意:
在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
(4)矩阵分析——矩阵拆分
a、利用冒号表达式获得子矩阵:
A(:
j)表示取A矩阵的第j列全部元素;A(i,:
)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。
A(i:
i+m,:
)表示取A矩阵第i~i+m行的全部元素;A(:
k:
k+m)表示取A矩阵第k~k+m列的全部元素,A(i:
i+m,k:
k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。
b、利用空矩阵删除矩阵的元素。
问题5、在MATLAB中怎样用矩阵拆分来分析矩阵
MATLAB程序如下:
>>A=[1234;5678;9101112]%建立一个矩阵A,注意变量区分大小写
A(2,3)=5%改变位于第二列,第三行的元素值
A(:
2)=[]%删除第二列
程序运行结果:
A=
1234
5678
9101112
A=
1234
5658
9101112
A=
134
558
91112
3、关于矩阵结构处理运算
1、通过在矩阵变量后加’的方法来表示转置运算
MATLAB程序:
>>a=[10,2,12;34,2,4;98,34,6];%建立一个矩阵a
a'%求a矩阵的转置
运行结果:
ans=
103498
2234
1246
2、矩阵求逆矩阵和伪逆矩阵
MATLAB程序:
>>a=[10,2,12;34,2,4;98,34,6];%建立一个矩阵a
b=inv(a)%求a的逆矩阵
c=pinv(a)%求a的伪逆
运行结果:
b=
-0.01160.0372-0.0015
0.0176-0.10470.0345
0.0901-0.0135-0.0045
c=
-0.01160.0372-0.0015
0.0176-0.10470.0345
0.0901-0.0135-0.0045
3、左右翻转(上下翻转类似但利用函数flipud)
MATLAB程序:
>>a=[10,2,12;34,2,4;98,34,6];%建立一个矩阵a
fliplr(a)%把a左右翻转
运行结果:
ans=
12210
4234
63498
4、矩阵的特征值
MATLAB程序:
>>a=[10,2,12;34,2,4;98,34,6];%建立一个矩阵a
[u,v]=eig(a)%求矩阵的特征值
运行结果:
u=
-0.2960-0.36350.3600
-0.29250.4128-0.7886
-0.90930.8352-0.4985
v=
48.839500
0-19.84510
00-10.9943
5、求矩阵的范数
MATLAB程序:
>>a=[10,2,12;34,2,4;98,34,6];%建立一个矩阵a
a1=norm(a)%求a的2—范数
a2=norm(a,1)%求a的1—-范数
a3=norm(a,inf)%求a的∞—范数
运行结果:
a1=
109.5895
a2=
142
a3=
138
此外,还有一些特殊的运算,比如:
矩阵的变维(用函数“reshape”)、复制和平铺矩阵(用函数“repmat”)等等。
四、解决线性方程组的问题
一般将上组方程式以矩阵方式表示为AX=B。
其中A为等式左边各方程式的系数项,X为欲求解的未知项,B代表等式右边之已知项
1、一般情况下,我们可以用以下几种方法来解线性方程组
问题6、求解这一线性方程组
解题方法1、用矩阵左除\做运算,即是X=A\B来解这一方程组。
MATLAB程序如下:
>>A=[1/3,1/4,1/5;1/2.,1/4,1/6;1/4,1/5,1/6];%用方程左边的系数项建立矩阵A
B=[0.11,0.22,0.33]';%用方程右边的已知项建立矩阵B
R_A=rank(A)%求矩阵的秩
X=A\B%用左除来解方程组
运行结果:
R_A=
3
X=
15.8400
-81.4000
75.9000
解题方法2、用矩阵LU分解来解问题6中的方程组。
分析:
LU分解又称Gauss消去分解。
则:
A*X=b就变成L*U*X=B所以X=U\(L\B)这样可以大大提高运算速度。
其命令是[L,U]=lu(A)。
MATLAB程序如下:
>>A=[1/3,1/4,1/5;1/2.,1/4,1/6;1/4,1/5,1/6];%用方程左边的系数项建立矩阵A
B=[0.11,0.22,0.33]';%用方程右边的已知项建立矩阵B
[L,U]=lu(A)%对矩阵A进行LU分解
X=U\(L\B)%求解方程组
运行结果:
L=
0.66671.00000
1.000000
0.50000.90001.0000
U=
0.50000.25000.1667
00.08330.0889
000.0033
X=
15.8400
-81.4000
75.9000
解题方法3、用矩阵QR分解来解问题6中的方程组。
分析:
QR分解使方程A*X=b变形成QRX=B所以X=R\(Q\B)。
其命令是[Q,R]=qr(A)。
MATLAB程序如下:
>>A=[1/3,1/4,1/5;1/2,1/4,1/6;1/4,1/5,1/6];%用左边的系数项建立矩阵A
B=[0.11,0.22,0.33]';%用方程右边的已知项建立矩阵B
[Q,R]=qr(A)%对矩阵A进行QR分解
X=R\(Q\B)%求解方程组
运行结果
Q=
-0.51210.5410-0.6671
-0.7682-0.63590.0741
-0.38410.55050.7412
R=
-0.6509-0.3969-0.2945
00.08640.0940
000.0025
X=
15.8400
-81.4000
75.9000
特殊的:
[Q,R,E]=qr(A,0)%E的作用是使得R的对角线元素降序,且Q*R=A(:
E)。
R=qr(A,0)%针对稀疏矩阵A的经济型分解,[C,R]=qr(A,b,0)%针对稀疏最小二乘问题的经济型分解。
除此之外,还可以用矩阵Cholesky分解来解问题6中的方程组。
程序大致形同,只不过Cholesky分解利用的是函数chol。
2、当系数矩阵不满秩时用函数rref求解
问题2、求方程组
的一个特解。
分析:
观察方程组可知,系数矩阵不满秩,我们可以用rref比较精确的求出方程的解。
其命令是R="rref"(C)。
解、MATLAB程序如下:
>>A=[11-3-1;3-1-34;15-9-8];%由左边的系数建立矩阵A
B=[140]';%由方程右边构成矩阵B
C=[A,B]%构成增广矩阵
R=rref(C)%用rref求解方程组
运行结果:
C=
11-3-11
3-1-344
15-9-80
R=
1.00000-1.50000.75001.2500
01.0000-1.5000-1.7500-0.2500
00000
得解向量X=[1.2500–0.250000]’(一个特解)。
3、求解大型系数矩阵的方程组一般用的是迭代解法
迭代解法包括Jacobi、Gauss-Serdel、超松弛和两步迭代法。
其主要方法是将一组X代入右端,即可以得到另一组X,若两组X相等,就是方程的解;若不相等则继续迭代。
五、结论
由以上所陈述的利用MATLAB语言来解决矩阵的一些运算问题,我们可以看到矩阵是MATLAB的基本处理对象,也是它重要的特征。
MATLAB的矩阵运算功能非常丰富,应用也十分广泛,在数值计算、多项式和绘图、符号数学等方面都有较好的应用。
实践证明,将MATLAB融入其它课程的学习中,可以大大提高运算效率和准确性。
六、课程体会
到现在为止,接触到MATLAB语言差不多一学期了,虽然一星期只有一次课程,但不管从老师的授课中还是自己做实验,我都能感受到MATLAB语言的优势。
该软件有三大特点:
一是功能强大;二是界面友好、语言自然;三是开放性强,这是MATLAB最重要的特点之一。
相比其他的编程语言,MATLAB语言要方便简洁得多,这对于我们初学者来说就不会有太多的障碍。
同时也使得研究人员可直观、方便地进行分析计算,从而快速实现科研构想和提高工作效率。
而且我发现如果学习了C语言的话,编程基本的语法学习起来很快的。
MATLAB与C语言有诸多相似之处,可以方便地进行数值分析、图像处理等功能。
以后我一定会更多的查阅这方面的资料,让MATLAB成为我学习中的好帮手。
【参考文献】
【1】刘卫国.MATLAB程序设计与应用(第二版)【M】.北京:
高等教育出版社,2006.
【2】王亮.基于MATLAB的线性代数实用教程(第一版)【M】.北京:
高等教育出版社,2008.
【3】同济大学数学系.线性代数(第五版)【M】.北京:
高等教育出版社,2007.