MATLAB入门教程

随时随地阅读更多技术实战干货,充分利用闲暇时间,请关注源代码社区公众号(ydmsq666)和技术交流群。

转自:http://zangchao923.blog.163.com/blog/static/19326935201110932044682/

数学实验简明教程

2东南大学数学系

007.10.10

 

  1. 前 言

    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. 第1章 初识MATLAB

    本章介绍MATLAB软件的界面以及几个基本操作。

  2. 1.1 MATLAB界面

     

    1.1.1 安装MATLAB7.0

    和安装大多数软件一样,只要把MATLAB7.0安装盘插入光驱,它就会自动启动安装程序,用户可以根据安装程序的提示和个人需要顺利地完成MATLAB7.0的安装。当然,这里假定用户的硬件和软件系统是符合MATLAB7.0的安装需求的。

     

    1. 打开MATLAB

    如果桌面上有MATLAB快捷按钮,即图标,用户就可以点击该图标来打开MATLAB。用户也可以从开始菜单中打开MATLAB,如图1.1.1所示:

     

    图1.1.1 从开始菜单中打开MATLAB

     

    1. MATLAB7.0界面

    MATLAB7.0的界面包括:标题栏、菜单栏、工具栏、当前路径窗口、命令历史记录窗口、命令窗口等,如图1.1.2所示:

     

    图1.1.2 MATLAB界面窗口

     

    1. 获取帮助

    用户可以通过下列途径获取MATLAB软件自带的帮助信息:

    ①菜单栏的"Help"按钮;②工具栏的按钮;③命令窗口中的MATLAB Help链接;④命令窗口中的Demos链接。

     

    1. 自由探索

    用户可以尝试点击MATLAB界面上的各个按钮,看看它们的功能。如果不小心关闭了当前路径窗口、命令历史记录窗口或命令窗口,可以通过菜单栏的"Desktop"菜单中"Desktop Layout } Default"恢复,如图1.1.3所示:

     

    图1.1.3 把MATLAB界面窗口恢复为默认状态

     

  3. 1.2 简单的计算与图形功能

     

    1.2.1 大材小用

    在命令窗口中的>>后面输入:

    1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9

    并按回车键可得:

    图1.2.1 MATLAB的计算功能

     

    上面输入的"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.2 MATLAB的计算功能

     

    其中上面的两个窗口"Figure 1"和"Figure 2"中所展示的就是下面的窗口"Figure 3"中的两个函数"f = x"和"g = 1"在区间[-2p, 2p]上的图象。用户可以在"Figure 3"的窗口中填写适当的函数表达式,回车后就可以从上面的窗口中观察到该函数的图象了,也可以通过"Figure 3"中的功能键按钮,对所上述函数进行简单操作。

    求函数f(x)的导数;求函数f(x)的积分;对函数f(x)简化;求函数f(x)的分子部分;求函数f(x)的分母部分;求函数f(x)的倒数;求函数的反函数。

     

  4. 第2章 矩阵及其基本运算

    本章从最基本的运算单元(矩阵)出发,介绍MATLAB的命令及其用法。

  5. 2.1 矩阵的输入与生成

     

    2.1.1 实数值矩阵的输入

    不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一对方括号([ ])内。如:

    图2.1.1输入一个行矩阵

     

    注意:命令行中的百分号(%)起注释的作用,MATLAB自动将%以及其后的内容显示为绿色,在执行这个命令行的命令时,自动忽略%以及其后的内容。这一点与其他高级计算机语言是类似的。

     

    又如,在命令窗口的提示符>>后面输入

    X_Data=[2.32 3.43; 4.37 5.98] %这是一个2阶方阵

    并按回车键可得

    X_Data =

     

    2.3200 3.4300

    4.3700 5.9800

    再如:

    图2.1.2 可以分行输入一个行矩阵

     

    注意:上面的所提到的逗号和分号在输入的时候要注意输入法状态。以"智能ABC输入法"为例,在"全角"或"中文标点"格式下输入的逗号(,)和分号(;)将会被MATLAB用红色提示为错误输入,如图2.1.3所示:

     

    图2.1.3智能ABC输入法5.0版的几种输入状态

     

    图2.1.4 MATLAB提示

    因此,应该在"半角"及"英文标点"格式下输入标点符号,如逗号(,),分号(;),句号/小数点(.)。

     

     

    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阵

     

     

     

     

  6. 2.2 矩阵运算

     

    2.2.1 加、减运算(+,-)

    图2.2.1 矩阵的加减运算

     

    注意:如果把图2.2.1中的命令换成

    A=[1 2;3 4];B=[5,6;7,8];C=A+B,D=A-B

    则回车后,得到的结果就只有C和D的值了。由此可见其中的两个分号(一个紧接着A=[1 2;3 4]的后面,另一个紧接着B=[5,6;7,8]的后面)的作用。

     

     

    2.2.2 乘法

    1.两个矩阵相乘(*)。

     

    图2.2.2 两个矩阵的乘法运算

     

    2.矩阵的数乘(*)。

     

    图2.2.3 矩阵的数乘运算

     

    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.0000 1.0000

    1.5000 -0.5000

     

    注意:① 若A的行列式的值为0,则MATLAB在执行inv(A)这个命令时会给出警告信息。例如

     

    图2.2.11 对奇异矩阵求逆时MATLAB给出的警告信息

     

    ② 也可以用初等变换的方法来求逆矩阵。例如:

     

    图2.2.12 用初等变换的方法来求逆矩阵

     

    ③ 用format rat命令可以使输出格式为有理格式。例如:

    图2.2.13 以有理格式输出结果

     

  7. 第3章 线性方程组

    其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法:

    (1)x=inv(A)*b — 采用求逆运算解方程组;

    (2)x=A\b — 采用左除运算解方程组。

    例:

    x1+2x2=8

    2x1+3x2=13

    >>A=[1,2;2,3];b=[8;13];

    >>x=inv(A)*b

    x =

        2.00

        3.00

    >>x=A\b

    x =

       2.00

       3.00;

    即二元一次方程组的解x1和x2分别是2和3。

     

    对于用matlab解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出n位有效数字的数值解.具体步骤如下:

    第一步:定义变量syms x y z ...;

    第二步:求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN');

    第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。

    如:解二(多)元二(高)次方程组:

    x^2+3*y+1=0

    y^2+4*x+1=0

    解法如下:

    >>syms x y;

    >>[x,y]=solve('x^2+3*y+1=0','y^2+4*x+1=0');

    >>x=vpa(x,4);

    >> y=vpa(y,4);

    结果是:

    x = ;

         1.635+3.029*i

         1.635-3.029*i

         -.283

        -2.987

    y =

         1.834-3.301*i

         1.834+3.301*i

         -.3600

        -3.307。

    二元二次方程组,共4个实数根;

    用matlab解高次方程组(非符号方程组)

    解答如下:

    基本方法是:solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。

    具体例子如下:

    x^2 + x*y + y = 3

    x^2 - 4*x + 3 = 0

    解法:

    >> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

    运行结果为

    x =

          1 3

    y =

          1 -3/2

     

    即x等于1和3;y等于1和-1.5

     

    >>[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3= 0','x','y')

    x =

          1   3

    y =

          1 -3/2

    结果一样,二元二方程都是4个实根。

     

    通过这三个例子可以看出,用matlab解各类方程组都是可以的,方法也有多种,只是用到解方程组的函数,注意正确书写参数就可以了,非常方便。

     

     

  8.  

  9. 第4章 二维绘图和三维绘图

    MATLAB有很强的绘图功能。本章介绍一些简单的二维绘图和三维绘图命令。

  10. 4.1 二维图形的绘制

     

    4.1.1 二维曲线的简捷绘制

    例4.1.1. 画出y = xcosx在区间[-4p, 4p]上的图形。

    解:在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, p]内的图形。

    解:在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.1xsin2xy = xcosx在区间[-p, p]上的图形。

    解:在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,'o b') %两条曲线用不同的数据点形状和颜色

    运行后得:

    图4.1.4 在同一个坐标系内绘制多条曲线

     

  11. 4.2 三维图形的绘制

     

    4.2.1 三维曲线的绘制

    命令格式:plot3(x1,y1,z1,'s1',x2,y2,z2,'s2',…)

    其中:'s1', 's2'等为可选参数,与plot中的用法完全相同,不选则使用默认设置。

     

    如果只绘制一条三维曲线,也可以用简捷的绘制命令ezplot3,命令格式与ezplot类似。见下面的例子。

     

    例4.2.1. 绘制三维螺线在区间[0, 4p]上的图形。

    解:(方法一) 在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 = x2 - y2的图形,并用平行截面法观察马鞍面的特点。

    解:在MATLAB的命令窗口输入如下命令:

    edit %新建一个M文件

    或者点击MATLAB的菜单栏的"file"按钮, 并从弹出的菜单中选择"new", 然后从其子菜单中选择"M-File"(如图4.2.6所示).

    图4.2.6 新建一个M文件

     

    还可以直接点击MATLAB的工具栏的"/"按钮, 新建一个M文件.

    MATLAB会弹出如图4.2.7所示的M文件编辑器.

     

    图4.2.7 M文件编辑器

    在上述M文件编辑器中输入如下内容:

     

    %绘制马鞍面z = x^2 - y^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个块里建立起坐标系

    hold on %保留当前的绘图和确定轴的性质,使后续的图形命令加入现存的图形

    mesh(X,Y,Z) %绘制网线图

    plot3(px,py,pz,'r *') %用红色的星号绘制截痕曲线

    subplot(1,2,2) %在第2个块里建立起坐标系

    plot3(px,py,pz) %在第2个块里绘制"截痕"曲线

    % 要保存这个M文件可以点击工具栏上的"软盘图标"按钮,

    % 或从菜单栏选择"Save"或"Save as"

    % 首次保存(或用"Save as"另存)一个M文件都需要指定路径和文件名

    % 为了不引起麻烦,M文件应该用英文开头(可含数字)的字符串命名

    % 例如: ma_an_mian_2007

    % 要运行这个文件中的程序, 有以下三种方法:

    % [1] 点击文件编辑器上面的菜单[Debug](有些版本可能选[Tools])

    % 点击选项[run](或[Save and Run])

    % 这时在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的取值范围和取点间距

    [X,Y]=meshgrid(x,y); %x和y产生"格点"矩阵

    Z = X.^2+Y.^2; %计算"格点"矩阵的每个"格点"上的函数值

    ii = find(Z>4); %找到Z>4的点

    Z(ii) = NaN; %"镂空"Z>4的点(NaN=Not a Number不是数)

    mesh(X,Y,Z) %绘制曲面,这里用mesh比用surf效果好

    运行后得图4.2.11。

    图4.2.11 精细绘制的旋转抛物面

     

    注意:也可以用下面的程序精细绘制上述旋转抛物面:

    z = 0:0.01:4; %设置z的取值范围和取点间距

    y = sqrt(z); %y = z^(1/2)

    [xb,yb,zb]=cylinder(y,100); %y为半径产生"旋转面"上的点阵, 100点/圈

    mesh(xb,yb,zb) %绘制曲面

     

     

    4.2.5 在同一个坐标系里绘制多个曲面

    例4.2.6. 在同一个坐标系内观察三个平面

    p1: x + y - z = 0;p2: 2x - y - z + 2 = 0;p3: z = 0

    看它们是否交于一点。

    解:在MATLAB的命令窗口输入如下命令:

    x=-20:1:20;y=x;

    [X,Y]=meshgrid(x,y);

    Z1=X+Y; %平面p1

    Z2=2*X-Y+2*ones(size(X)); %平面p2

    Z3=zeros(size(X)); %平面p3

    surf(X,Y,Z1),hold on, mesh(X,Y,Z2),mesh(X,Y,Z3)

    运行后得图4.2.12。

    图4.2.12 在同一个坐标系内绘制多个曲面

    可见这3个平面交于一点。

你可能感兴趣的:(MATLAB,matlab)