目 录
摘要... I
Abstract II
1概述... 1
1.1MATLAB的发展... 1
1.2 MATLAB优势... 2
2理论分析... 3
3程序设计与调试... 5
3.1基本矩阵运算... 5
3.2求解方程组并画图... 7
3.3总结... 8
4心得与体会... 9
5参考文献... 11
摘要
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。
MATLAB的基本数据单位是矩阵。MATLAB几乎包括了矩阵的所有运算,从简单的矩阵生成及简单的运算到大量的矩阵运算与转换。MATLAB应用于矩阵有很大的必要性和很重要的现实意义。
MATLAB具有强大的二维、三维绘图功能,提供了许多绘图语句。利用MATLAB,我们可以画出我们所需要的几乎所有图形。
关键词:矩阵;解方程组;画图
Abstract
MATLAB is released by the U.S. mathworks's main face of scientific computing, visualization and interactive program designed for high-tech computing environment. It numerical analysis, matrix computation, scientific data visualization and non-linear dynamic systems modeling and simulation, and many other powerful features in an easy to use integrated Windows environment for scientific research, engineering design and the need for effective numerical calculation many fields of science provides a comprehensive solution, which represents the current international advanced level of scientific computing software.
The basic data unit of MATLAB is matrix.MATLAB almost include all the matrix computation,from generate simple matrix and simple operation to a large number of matrix computations and conversion.It is necessary and important practical significance that used MATLAB for matrix
MATLAB has a powerful 2D and 3D graphics capabilities,and providing a lot of graphics statements. Using MATLAB, we can draw almost all graphics that we need.
Keywords: matrix; solve equations;paint
1概述
1.1MATLAB的发展
MATLAB系统最初是由CIeve Moler用FORTRAN语盲设计的,有关短阵的算法来自LINPACK和EIsPACK课题的研究成果;现在的MATLAB程序是MathWorks公司用 C语言开发的,第一版由steve Bangert主持开发编译解释程序,Steve Kleiman完成图形功能的设计,John Little和Cleve Moler主持开发了各类数学分分析的子模块,撰写用户指南和大部分的M文件。自从第1版发行以来,已有众多的科技工作者加入到MATLAB的开发队伍中,并为形成今天约MATLAB系统做出了巨大的贡献。 MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建。在时间进入20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。 到九十年代初期,在国际上30几个数学类科技应用软件中,MATLAB在数值计算方面独占鳌头,而Mathematica和Maple则分居符号计算软件的前两名。Mathcad因其提供计算、图形、文字处理的统一环境而深受中学生欢迎。 MathWorks公司于20##年推出MATLAB6.0版本,6.x版在继承和发展其原有的数值计算和图形可视能力的同时,出现了以下几个重要变化:(1)推出了SIMULINK。这是一个交互式操作的动态系统建模、仿真、分析集成环境。它的出现使人们有可能考虑许多以前不得不做简化假设的非线性因素、随机因素,从而大大提高了人们对非线性、随机动态系统的认知能力。(2)开发了与外部进行直接数据交换的组件,打通了MATLAB进行实时数据分析、处理和硬件开发的道路。(3)推出了符号计算工具包。1993年MathWorks公司从加拿大滑铁卢大学购得Maple的使用权,以Maple为“引擎”开发了Symbolic Math Toolbox 1.0。MathWorks公司此举加快结束了国际上数值计算、符号计算孰优孰劣的长期争论,促成了两种计算的互补发展新时代。(4)构作了Notebook 。MathWorks公司瞄准应用范围最广的Word ,运用DDE和OLE,实现了MATLAB与Word的无缝连接,从而为专业科技工作者创造了融科学计算、图形可视、文字处理于一体的高水准环境。 MTALAB系统由五个主要部分组成,下面分别加以介绍。 (1)MATALB语言体系 MATLAB是高层次的矩阵/数组语言.具有条件控制、函数调用、数据结构、输入输出、面向对象等程序语言特性。利用它既可以进行小规模端程,完成算法设计和算法实验的基本任务,也可以进行大规模编程,开发复杂的应用程序。 (2)MATLAB工作环境 这是对MA丁LAB提供给用户使用的管理功能的总称.包括管理工作空间中的变量据输入输出的方式和方法,以及开发、调试、管理M文件的各种工具。 (3)图形句相系统 这是MATLAB图形系统的基础,包括完成2D和3D数据图示、图像处理、动画生成、图形显示等功能的高层MATLAB命令,也包括用户对图形图像等对象进行特性控制的低层MATLAB命令,以及开发GUI应用程序的各种工具。 (4)MATLAB数学函数库这是对MATLAB使用的各种数学算法的总称.包括各种初等函数的算法,也包括矩阵运算、矩阵分析等高层次数学算法。 (5)MATLAB应用程序接口(API) 这是MATLAB为用户提供的一个函数库,使得用户能够在MATLAB环境中使用c程序或FORTRAN程序,包括从MATLAB中调用于程序(动态链接),读写MAT文件的功能。 可以看出MATLAB是一个功能十分强大的系统,是集数值计算、图形管理、程序开发为一体的环境。
1.2 MATLAB优势
(1)友好的工作平台和编程环境
(2)简单易用的程序语言
(3)强大的科学计算机数据处理能力
(4)出色的图形处理功能
(5)应用广泛的模块集合工具箱
(6)实用的程序接口和发布平台
(7)应用软件开发(包括用户界面)
2理论分析
(1)矩阵运算
MATLAB自带了许多简单矩阵,可以通过magic()和pascal()语句直接生成魔方矩阵和帕斯卡矩阵,然后直接进行加减乘与左除、右除运算。要查看非零元素,将零元素替换为空即可。
(2)解方程组与画图
用系数矩阵的逆矩阵乘以结果矩阵就是方程组的解。要画出平面,可以先取点,然后建立网格,最后通过MATLAB中的surf语句画出所需平面。为了同时画出三幅图,在画完图后用hold on语句防止图形重画。
(3)程序设计框图
图1 程序流程图
图2 程序流程图
3程序设计与调试
3.1基本矩阵运算
题目要求:用MATLAB生成3阶帕斯卡矩阵A,魔方矩阵B,分别计算其和差积商(A\B,A/B),并查看其非零元素;
程序代码:
A=magic(3) %生成一个三阶魔方矩阵%
B=pascal(3) %生成一个三阶帕斯卡矩阵%
C=A+B %矩阵和运算%
D=A-B %矩阵减法运算%
E=A*B %矩阵乘法运算%
F=A\B %矩阵左除运算%
G=A/B %矩阵右除运算%
C(find(C==0))=[] % 找出所有零元素并替换为空元素%
D(find(D==0))=[] % 找出所有零元素并替换为空元素%
E(find(E==0))=[] % 找出所有零元素并替换为空元素%
F(find(F==0))=[] % 找出所有零元素并替换为空元素%
G(find(G==0))=[] % 找出所有零元素并替换为空元素%
运行结果:
图3 矩阵加减运算结果
图4 矩阵乘除运算结果
图5矩阵运算结果并查看非零元素
结果分析:用magic和pascal语句生成所需矩阵,然后分别进行加减乘“/”、“\”运算。用find语句找出所有的零元素并替换为空,运行后,若矩阵含零元素,则在一行显示所有非零元素;若矩阵不含零元素,则按原矩阵输出。
3.2求解方程组并画图
(1)解方程组
题目要求:求解方程组
程序代码:
H=[1,-1,3;3,1,-1;4,-1,1] %生成系数矩阵%
L=[5;5;9] %生成结果矩阵%
inv(H)*L %用逆矩阵求解%
运行结果:
图6方程组的解
(2)画出方程表示的平面
题目要求:在一个图中分别画出每个方程表示的平面。
程序代码:
x1=linspace(-10,10,21) %从-10到10均匀取21个点%
x2=linspace(-10,10,21) %从-10到10均匀取21个点%
[X,Y]=meshgrid(x1,x2) %生成平面网格%
Z=(5-X+Y)./3 %建立x3关于x1,x2的函数。%
surf(X,Y,Z) %画出方程表示平面%
hold on %不要重画图形,从而同时显示三个平面。%
Z=9-4*X+Y %建立x3关于x1,x2的函数。%
surf(X,Y,Z) %画出方程表示平面%
hold on %不要重画图形,从而同时显示三个平面。%
Z=3*X+Y-5 %建立x3关于x1,x2的函数。%
surf(X,Y,Z) %画出方程表示平面%
运行结果:
图7 方程表示的平面
结果分析:通过逆矩阵求出方程组的解为x1=2,x2=0,x3=1。因为需要求逆矩阵,所以最后结果显示为浮点数。用surf语句之前必须先取点,然后生成平面网格,最后才能画出图形;而且为了在同一个图中显示三个平面,在平面生成后用hold on语句防止图形重画。
3.3总结
MATLAB自带了许多常用的矩阵和函数,合理的使用系统自带语句可以很快很方便的完成题目要求。当然,在使用语句时,必须注意语句使用细节,否则很可能会出错。
4心得与体会
经过数天的学习,我终于完成了《MATLAB》课程设计。看着手中的设计报告,心中充满成就感。
我所选的题目并不难,但是对于刚刚接触MATLAB的我,我还是无处下手。从图书馆借了一本关于MATLAB的书,从头开始慢慢的仔细研究。但是看着满篇的公式,很快我便失去了信心。于是我重新调整切入点:从题目入手。
我注意到我的第一个题目是关于矩阵运算的。于是我找到了借的书上关于矩阵的章节。很快我便解决了第一个题目。一旦入门之后,后面的路显得容易了许多。MATLAB设计窗口简洁友好,而且编程语言也十分简单易用。仅仅几行简单的程序就解决了我的问题。然而由于刚接触不久,难免忽略了一些细节问题,而这些问题也让我吃了不少苦头。在使用surf语句的时候,忘记生成网格,结果总是出错。最后查阅课本才最终解决。
在完成了所有的题目之后,我忽然意识到:MATLAB是一个很重要的学习工具。于是我没有满足于题目要求,继续学习。随着学习的深入,我发现同样的要求可能有几种不同的解决方法。比如,最初我用NaN替换零元素,但是后来我发现直接讲零元素替换为空更加直观简便。只需使用一个solve语句就能够很轻易的解出方程组。还有画图语句也有许多种。一开始我在画第一个平面的时候使用的是plot3语句。但是我发现画出来的只是一条直线。
在网上查阅相关资料时,我注意到有许多关于MATLAB的应用。让我眼镜为之一亮的是一片关于傅立叶变换处理图像的博文。我曾学习过傅立叶变换,但是由于太过抽象,总是提不起兴趣。于是我点开了这篇文章,我才终于意识到傅立叶变换的巨大魔力。也引起了我对傅立叶变换的好奇。我尝试着阅读了几页,我渐渐发现了MATLAB的强大。我意识到要真正的深入的学习MATLAB并非易事。
为了学好MATLAB,我找了一个熟悉编程的人来辅助我的学习。他交给了我很多编程的技巧问题。许多程序的结构设计问题,对于程序的运行效率非常有帮助。有的时候,我编出来的程序,能够运行,但是耗时太长,也就是说我的程序没有错,但是不适合实际。或者说,对于规模小的问题能够解决,但是规模大一点的问题就需要很长很长的时间,这就需要对程序的结构和算法问题进行改进。比如为了求一个函数与坐标面围成的体积,若使用将平面划分成许多网格,然后用网格面积乘以高度近似求解,那么为了达到一定精度循环的次数会很多,严重影响运行速度。但是若使用二次积分,问题迎刃而解,简洁明了。
其实如果你只是为了方便自己的工作或学习,那么你没有必要把MATLAB教程全部学会,只需要学你需要的那部分即可,比如,绘图,矩阵运算,等等。我也知道我没有这个精力,也没这个兴趣去学习所有的MATLAB功能。作为一名电信系学生,我们许多方面都需要用到MATLAB。我会尽力去学习我们常用的或者与专业相关的部分。当然还有感兴趣的部分。
5参考文献
[1]王亚芳,董楠.MATLAB仿真及电子信息应用.北京:人民邮电出版社,2011
[2]王正盛.MATLAB与科学计算.北京:国防工业出版社,2011
[3]胡晓东,董辰辉.MATLAB从入门到精通.北京:人民邮电出版社,2010
[4]马丽,崔梅萍.经济数学—线性代数.北京:高等教育出版社,2009
[5]楼顺天,陈生潭,雷虎民.MATLAB 5.x程序设计语言.西安:西安电子科技大学出版社,2000