MATLAB入门教程.docx
《MATLAB入门教程.docx》由会员分享,可在线阅读,更多相关《MATLAB入门教程.docx(40页珍藏版)》请在冰豆网上搜索。
MATLAB入门教程
数学实验简明教程
MATLAB入门
东南大学数学系
2007.10.10
前言
Matlab是美国MathWorks公司自20世纪80年代中期推出的数学软件,优秀的数值计算能力和卓越的数据可视化能力使其很快在数学软件中脱颖而出。
到目前为止,其最高版本7.0版已经推出。
随着版本的不断升级,它在数值计算及符号计算功能上得到了进一步完善。
Matlab已经发展成为多学科、多种工作平台的功能强大的大型软件。
在欧美等高校,Matlab已经成为线性代数、自动控制理论、概率论及数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具,是攻读学位的大学生、硕士生、博士生必须掌握的基本技能。
MATLAB的主要特点是:
•有高性能数值计算的高级算法,特别适合矩阵代数领域;
•有大量事先定义的数学函数,并且有很强的用户自定义函数的能力;
•有强大的绘图功能以及具有教育、科学和艺术学的图解和可视化的二维、三维图;
•基于HTML的完整的帮助功能;
•适合个人应用的强有力的面向矩阵(向量)的高级程序设计语言;
•与其它语言编写的程序结合和输入输出格式化数据的能力;
•有在多个应用领域解决难题的工具箱。
本教程提供了使用MATLAB的入门指导,它基于MATLAB7.0版,内容较浅,主要针对大学一年级的《几何与代数》的课程需要,对一些基本的命令的使用格式作了简单的说明,并配备了例题加以说明其用法,并安排了两个实验报告模板。
因此,对于初学者自学是很有帮助的。
需要了解MATLAB的更多内容的读者可以使用MATLAB软件自带的帮助系统,也可以参考有关书籍,如
[1]李继成,《数学实验》,高等教育出版社,2006年10月,第1版。
[2]罗建军,《MATLAB教程》,电子工业出版社,2005年07月,第1版。
[3]徐金明等,《MATLAB实用教程》,清华大学出版社,2005年7月,第1版。
[4]张圣勤,《MATLAB7.0实用教程》,机械工业出版社,2006年7月,第1版。
第1章初识MATLAB
本章介绍MATLAB软件的界面以及几个基本操作。
1.1MATLAB界面
1.1.1安装MATLAB7.0
和安装大多数软件一样,只要把MATLAB7.0安装盘插入光驱,它就会自动启动安装程序,用户可以根据安装程序的提示和个人需要顺利地完成MATLAB7.0的安装。
当然,这里假定用户的硬件和软件系统是符合MATLAB7.0的安装需求的。
1.1.2打开MATLAB
如果桌面上有MATLAB快捷按钮,即
图标,用户就可以点击该图标来打开MATLAB。
用户也可以从开始菜单中打开MATLAB,如图1.1.1所示:
图1.1.1从开始菜单中打开MATLAB
1.1.3MATLAB7.0界面
MATLAB7.0的界面包括:
标题栏、菜单栏、工具栏、当前路径窗口、命令历史记录窗口、命令窗口等,如图1.1.2所示:
图1.1.2MATLAB界面窗口
1.1.4获取帮助
用户可以通过下列途径获取MATLAB软件自带的帮助信息:
菜单栏的“Help”按钮;
工具栏的
按钮;
命令窗口中的MATLABHelp链接;
命令窗口中的Demos链接。
1.1.5自由探索
用户可以尝试点击MATLAB界面上的各个按钮,看看它们的功能。
如果不小心关闭了当前路径窗口、命令历史记录窗口或命令窗口,可以通过菜单栏的“Desktop”菜单中“DesktopLayoutDefault”恢复,如图1.1.3所示:
图1.1.3把MATLAB界面窗口恢复为默认状态
1.2简单的计算与图形功能
1.2.1大材小用
在命令窗口中的>>后面输入:
1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9
并按回车键可得:
图1.2.1MATLAB的计算功能
上面输入的“1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9”是一个命令,它要求MATLAB计算
的值。
经过MATLAB运算的结果为3.3097(近似值)。
可见MATLAB的数学表达式命令格式与很多常用的高级语言相似。
当然MATLAB的功能远远不止这种简单的计算。
点击命令窗口中的Demos链接就可以看到MATLAB的其他基本功能。
1.2.2打开简单的图形窗口
在命令窗口中的>>后面输入:
funtool
并按回车键可得如图1.2.2所示的三个窗口:
图1.2.2MATLAB的计算功能
其中上面的两个窗口“Figure1”和“Figure2”中所展示的就是下面的窗口“Figure3”中的两个函数“f=x”和“g=1”在区间[2,2]上的图象。
用户可以在“Figure3”的窗口中填写适当的函数表达式,回车后就可以从上面的窗口中观察到该函数的图象了,也可以通过“Figure3”中的功能键按钮,对所上述函数进行简单操作。
第2章矩阵及其基本运算
本章从最基本的运算单元(矩阵)出发,介绍MATLAB的命令及其用法。
2.1矩阵的输入与生成
2.1.1实数值矩阵的输入
不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:
同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。
所有元素处于一对方括号([])内。
如:
图2.1.1输入一个行矩阵
注意:
命令行中的百分号(%)起注释的作用,MATLAB自动将%以及其后的内容显示为绿色,在执行这个命令行的命令时,自动忽略%以及其后的内容。
这一点与其他高级计算机语言是类似的。
又如,在命令窗口的提示符>>后面输入
X_Data=[2.323.43;4.375.98]%这是一个2阶方阵
并按回车键可得
X_Data=
2.32003.4300
4.37005.9800
再如:
图2.1.2可以分行输入一个行矩阵
注意:
上面的所提到的逗号和分号在输入的时候要注意输入法状态。
以“智能ABC输入法”为例,在“全角
”或“中文标点
”格式下输入的逗号(,)和分号(;)将会被MATLAB用红色提示为错误输入,如图2.1.3所示:
图2.1.3智能ABC输入法5.0版的几种输入状态
图2.1.4MATLAB提示
因此,应该在“半角”及“英文标点”格式
下输入标点符号,如逗号(,),分号(;),句号/小数点(.)。
2.1.2特殊矩阵的生成
1.全零阵。
图2.1.5用函数zeros生成全零阵
2.单位阵。
图2.1.6用函数eye生成全零阵
3.全1阵。
函数ones
格式Y=ones(n)%生成n×n全1阵
Y=ones(m,n)%生成m×n全1阵
Y=ones(size(A))%生成与矩阵A相同大小的全1阵
2.2矩阵运算
2.2.1加、减运算(+,-)
图2.2.1矩阵的加减运算
注意:
如果把图2.2.1中的命令换成
A=[12;34];B=[5,6;7,8];C=A+B,D=A-B
则回车后,得到的结果就只有C和D的值了。
由此可见其中的两个分号(一个紧接着A=[12;34]的后面,另一个紧接着B=[5,6;7,8]的后面)的作用。
2.2.2乘法
1.两个矩阵相乘(*)。
图2.2.2两个矩阵的乘法运算
2.矩阵的数乘(*)。
图2.2.3矩阵的数乘运算
3.向量点积(dot)。
图2.2.4向量的点积
注意:
图2.2.4中的a和b都是2维行向量,c是2维列向量。
比较d_1和d_2可以看出MATLAB允许行向量a和列向量c进行向量的点积运算(只要维数相同即可)。
请比较d_1与d_3以及d_3与d_4。
4.向量叉乘(cross)
图2.2.5向量的叉乘
5.混合积
图2.2.6向量的混合积
2.2.3除法运算
MATLAB提供了两种除法运算:
左除(\)和右除(/)。
当矩阵A可逆时,X=A\B是方程A*X=B的解(这里当然还要求A的行数=B的行数),而X=C/A是方程X*A=C的解(这里当然还要求A的列数=C的列数)。
图2.2.7左除和右除
2.2.4矩阵乘方(^)
图2.2.8矩阵的乘方
注意:
上面的[1,2;2,1]^(-2)要求[1,2;2,1]是可逆的。
2.2.5矩阵转置(’)
图2.2.9矩阵的转置
注意:
若A为复数矩阵,则A’表示A的共轭转置。
对于复数矩阵A,若仅希望转置,则用如下命令:
A.’。
见图2.2.10。
图2.2.10复矩阵的转置与共轭转置
2.2.6方阵的行列式(det)
命令格式:
det(A)
例如:
>>det([1,2;3,4])
ans=
-2
又如:
>>A=[1,2,3;4,5,6;7,8,9];D=det(A)
D=
0
2.2.7方阵的逆矩阵(inv)
命令格式:
inv(A)
例如:
>>inv([1,2;3,4])
ans=
-2.00001.0000
1.5000-0.5000
注意:
若A的行列式的值为0,则MATLAB在执行inv(A)这个命令时会给出警告信息。
例如
图2.2.11对奇异矩阵求逆时MATLAB给出的警告信息
也可以用初等变换的方法来求逆矩阵。
例如:
图2.2.12用初等变换的方法来求逆矩阵
用formatrat命令可以使输出格式为有理格式。
例如:
图2.2.13以有理格式输出结果
2.2.8方阵的迹(trace)
命令格式:
trace(A)
例如:
>>trace([1,2;-1,3])
ans=
4
2.2.9矩阵的秩(rank)
命令格式:
rank(A)
例如:
图2.2.14矩阵的秩
第3章线性方程组
本章介绍利用MATLAB解线性方程组。
我们可以先利用前一章介绍的rank命令计算线性方程组的系数矩阵以及增广矩阵的秩,根据线性代数中关于线性方程组的理论判断一个线性方程组的解存在性,在有解的情况下进一步利用MATLAB解线性方程组。
3.1求线性方程的唯一解或特解
本节通过几个具体的例子介绍如何利用MATLAB求线性方程组的唯一解或特解。
3.1.1利用克拉默法则
例3.1.1.求方程组
的解.
[分析]记该方程组的增广矩阵的1-6列为a_1,a_2,a_3,a_4,a_5,b,并且令系数矩阵的行列式为D,依次用b替换D的1-5列所得到的行列式分别记为D_1,D_2,D_3,D_4,D_5。
根据克拉默法则,当D0时,该方程组有唯一解:
x_1=D_1/D,x_2=D_2/D,x_3=D_3/D,x_4=D_4/D,x_5=D_5/D。
见图3.1.1。
图3.1.1用克拉默法则解线性方程组
我们也可以编写如下程序来解上述方程组
>>a_1=[5;1;0;0;0];a_2=[6;5;1;0;0];a_3=[0;6;5;1;0];a_4=[0;0;6;5;1];
>>a_5=[0;0;0;6;5];b=[1;0;0;0;1];A=[a_1,a_2,a_3,a_4,a_5];D=det(A);
>>X=[];%空矩阵
>>fori=1:
5
A=[a_1,a_2,a_3,a_4,a_5];
A(:
i)=b;%把A的第i列换成b,下面一行的A的第i列就是b了
X=[X,det(A)/D];%把det(A)/D的值(即x_i的值)添到原X后面
i=i+1;
end
>>formatrat,X%这样得到的结果与图3.1.1中的结果是一样的
3.1.2利用矩阵除法
记例3.1.1中的方程组为AX=B,则X=A\B。
见图3.1.2。
图3.1.2用矩阵除法解线性方程组
3.1.3利用矩阵的初等变换
记例3.1.1中的方程组的增广矩阵为A,并用初等行变换把A化为行最简形矩阵B,则B的最后一列就是该方程组的解向量。
见图3.1.3。
图3.1.3用矩阵的初等变换解线性方程组
注:
比较图3.1.2和图3.1.3中的结果,想一想:
为什么不一样?
例3.1.2.求方程组
的一个特解。
解:
用MATLAB把该方程组的增广矩阵
化为行最简形(见图3.1.4),从中可以看出该方程组有无数多解,而且X=[1.2500–0.250000]’就是该方程组的一个特解。
图3.1.4用矩阵的初等变换解线性方程组
3.2求线性方程的通解
上一节中所介绍的利用MATLAB化矩阵为行最简形的方法当然可以用来求线性方程组的通解。
本节将介绍如何用函数null求齐次线性方程组的基础解系,以及如何编写简单的程序来求解非齐次线性方程组。
3.2.1求线性齐次方程组的通解
在MATLAB中,函数null用来求解矩阵A的零空间的一组基,即齐次线性方程组A*X=0的解空间的一组基(基础解系),由此可得齐次线性方程组的通解。
命令格式:
null(A)或null(A,’r’)
其中null(A)的返回值是一个矩阵,其列向量组为A的零空间的一组标准正交基,而null(A,’r’)的列向量组为A的零空间的一组基(一般不是单位向量组,也未必是两两正交的)。
例3.2.1.求方程组
的通解。
解:
先用函数null求系数矩阵A=
的零空间的一组基(见图3.2.1)。
图3.2.1比较null(A)与null(A,’r’)的区别
再写出通解(见图3.2.2和图3.2.3):
图3.2.2通解图3.2.3让通解的表达式更精美
3.2.2求非齐次线性方程组的通解
第一步:
判断AX=b是否有解,若有解则进行第二步;
第二步:
求AX=b的一个特解;
第三步:
求AX=0的通解;
第四步:
写出AX=b的通解。
例3.2.2.求解方程组
解:
根据线性代数知识可以编写一个简单的程序来求解这个方程组,见图3.2.4。
图3.2.4一个简单的MATLAB程序
可见该方程组无解。
例3.2.3.求方程组
的通解。
解:
在MATLAB的命令窗口输入如下图所示的命令,运行后得:
图3.2.5一个简单的MATLAB程序
可见原方程组有无数多组解,且
,即
.
所以原方程组的通解为X=k1
+k2
+
其中k1,k2为任意实数.
第4章二维绘图和三维绘图
MATLAB有很强的绘图功能。
本章介绍一些简单的二维绘图和三维绘图命令。
4.1二维图形的绘制
4.1.1二维曲线的简捷绘制
例4.1.1.画出y=xcosx在区间[4,4]上的图形。
解:
在MATLAB的命令窗口输入如下命令:
ezplot('x*cos(x)',[-4*pi,4*pi])
运行后得:
图4.1.1用ezplot命令绘制的y=xcosx的图象
例4.1.2.画出椭圆
在区域[3,3][4,4]内的图形。
解:
在MATLAB的命令窗口输入如下命令:
ezplot('x^2/4+y^2/5-1',[-3,3,-4,4])
运行后得:
图4.1.2用ezplot命令绘制的x2/4+y2/5=1的图象
例4.1.3.画出曲线
在区间[0,]内的图形。
解:
在MATLAB的命令窗口输入如下命令:
ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])
运行后得:
图4.1.3用ezplot命令绘制的参数曲线的图象
4.1.2在同一个坐标系内绘制多条曲线
命令格式:
plot(x1,y1,'s1',x2,y2,'s2',…)
其中:
's1','s2'等为可选参数,用来指定绘制曲线的线型、颜色、数据点形状等。
线型可选参数有:
-(实线),:
(虚线),-.(点划线)和--(双划线)。
颜色可选参数有:
y(黄色),m(品红色),c(青色),r(红色),g(绿色),b(蓝色),w(白色)和k(黑色)。
数据点可选参数有:
.(实心点),o(圆圈),x(叉),+(十字),*(星号),s(方块),d(菱形),v(下三角),^(上三角),<(左三角),>(右三角),p(五角星)和h(六角星)。
例4.1.4.在同一个坐标系内画出y=e0.1xsin2x和y=xcosx在区间[,]上的图形。
解:
在MATLAB的命令窗口输入如下命令:
x=-pi:
0.1:
pi;%设置x的取值范围和取点间距
y1=exp(0.1*x).*sin(2*x);y2=x.*cos(x);%注意其中的.*
plot(x,y1,'*r',x,y2,'ob')%两条曲线用不同的数据点形状和颜色
运行后得:
图4.1.4在同一个坐标系内绘制多条曲线
4.2三维图形的绘制
4.2.1三维曲线的绘制
命令格式:
plot3(x1,y1,z1,'s1',x2,y2,z2,'s2',…)
其中:
's1','s2'等为可选参数,与plot中的用法完全相同,不选则使用默认设置。
如果只绘制一条三维曲线,也可以用简捷的绘制命令ezplot3,命令格式与ezplot类似。
见下面的例子。
例4.2.1.绘制三维螺线
在区间[0,4]上的图形。
解:
(方法一)在MATLAB的命令窗口输入如下命令:
t=0:
0.1:
4*pi;
x=2*cos(t);
y=2*sin(t);
z=1.5*t;
plot3(x,y,z),xlabel('x'),ylabel('y'),zlabel('z')%标识坐标轴
运行后得图4.2.1。
图4.2.1用plot3绘制的三维螺线图4.2.2用ezplot3绘制的三维螺线
(方法二)在MATLAB的命令窗口输入如下命令
ezplot3('2*cos(t)','2*sin(t)','1.5*t',[0,4*pi])
运行后得图4.2.2。
4.2.2三维网线图与表面图的绘制
命令格式:
mesh(x,y,z)%绘制三维网线图
surf(x,y,z)%绘制三维表面图
也可以在调用命令时增加可选参数来改变图形的颜色和线型。
还可以用简捷的绘制命令ezmesh与ezsurf绘制三维网线图与表面图。
例4.2.2.画出曲面z=sin(xy)在区域[2,2][2,2]上的图形。
解:
在MATLAB的命令窗口输入如下命令:
x=-2:
0.1:
2;y=-2:
0.1:
2;%设置x的取值范围和取点间距
[X,Y]=meshgrid(x,y);%用x和y产生“格点”矩阵
Z=sin(X.*Y);%计算“格点”矩阵的每个“格点”上的函数值
mesh(X,Y,Z)%绘制网线图
运行后得图4.2.3。
图4.2.3用mesh绘制的三维网线图
如果将上面的mesh(X,Y,Z)换成surf(X,Y,Z),则运行后得图4.2.4。
图4.2.4用surf绘制的三维表面图
例4.2.3.画出曲面z=
的图形。
解:
在MATLAB的命令窗口输入如下命令:
ezsurf('x*exp(-x^2-y^2)')
运行后得图4.2.5。
图4.2.5用ezsurf绘制的三维表面图
4.2.3特殊曲面的绘制
对于空间曲面F(x,y,z)=0,我们通常采用平行截面法来认识该曲面的特性。
即用平行于坐标面的平面去“截”曲面F(x,y,z)=0,通过研究交线的性质来充分认识曲面的性质。
例4.2.4.绘制马鞍面z=x2y2的图形,并用平行截面法观察马鞍面的特点。
解:
在MATLAB的命令窗口输入如下命令:
edit%新建一个M文件
或者点击MATLAB的菜单栏的“file”按钮,并从弹出的菜单中选择“new”,然后从其子菜单中选择“M-File”(如图4.2.6所示).
图4.2.6新建一个M文件
还可以直接点击MATLAB的工具栏的“”按钮,新建一个M文件.
MATLAB会弹出如图4.2.7所示的M文件编辑器.
图4.2.7M文件编辑器
在上述M文件编辑器中输入如下内容:
%绘制马鞍面z=x^2y^2的图形,并用平行截面法观察马鞍面的特点
x=-4:
0.1:
4;y=x;%设置x的取值范围和取点间距
[X,Y]=meshgrid(x,y);%用x和y产生“格点”矩阵
Z=X.^2-Y.^2;%计算“格点”矩阵的每个“格点”上的函数值
ix=find(X==2);%找到x坐标=2的点的位置
px=2*ones(1,length(ix));%“截痕”上的点的x坐标
py=Y(ix);%“截痕”上的点的y坐标
pz=Z(ix);%“截痕”上的点的z坐标
subplot(1,2,1)%把图形窗口划分成1行2列,并在第1个块里建立起坐标系
holdon%保留当前的绘图和确定轴的性质,使后续的图形命令加入现存的图形
mesh(X,Y,Z)%绘制网线图
plot3(px,py,pz,'r*')%用红色的星号绘制截痕曲线
subplot(1,2,2)%在第2个块里建立起坐标系
plot3(px,py,pz)%在第2个块里绘制“截痕”曲线
%要保存这个M文件可以点击工具栏上的“软盘图标”按钮,
%或从菜单栏选择“Save”或“Saveas”
%首次保存(或用“Saveas”另存)一个M文件都需要指定路径和文件名
%为了不引起麻烦,M文件应该用英文开头(可含数字)的字符串命名
%例如:
ma_an_mian_2007
%要运行这个文件中的程序,有以下三种方法:
%[1]点击文件编辑器上面的菜单[Debug](有些版本可能选[Tools])
%点击选项[run](或[SaveandRun])
%这时在MATLAB工作空间中将会出现该程序执行的结果
%[2]按"F5"
%[3]直接在MATLAB命令窗中输入这个文件的文件名,然后回车
运行后得图4.2.8。
图4.2.8马鞍面及其被平面所截得的截痕
注意:
图4.2.8中左边所显示的是从该马鞍面的正上方俯视的效果。
在该窗口的工具栏中选择三维旋转工具
,可以改变视角,得到图4.2.9所示的效果。
图4.2.9马鞍面及其被平面所截得的截痕(新角度)
4.2.4精细绘制特殊的曲面
例4.2.5.绘制旋转抛物面z=x2+y2的图形。
解:
(粗糙绘制)在MATLAB的命令窗口输入如下命令:
x=-2:
0.1:
4;y=x;%设置x的取值范围和取点间距
[X,Y]=meshgrid(x,y);%用x和y产生“格点”矩阵
Z=X.^2+Y.^2;%计算“格点”矩阵的每个“格点”上的函数值
surf(X,Y,Z)%绘制曲面
运行后得图4.2.10(用三维旋转工具调整过角度)。
图4.2.10旋转抛物面
(精细绘制)在MATLAB的命令窗口输入如下命令:
x=-2:
0.01:
4;y=x;%设置x的取值