《数学matlabppt课件》由会员分享,可在线阅读,更多相关《数学matlabppt课件(108页珍藏版)》请在金锄头文库上搜索。
1、Matlab 简介简介q Matlab: Matrix Laboratory 矩阵实验室q Matlab 的发展的发展l 1980年,Moler 教授用 Fortran 语言编写了集命令翻译、 科学计算于一身的一套交互式软件系统。l 1984年,Moler 等成立了 The MathWorks 的公司,用 C 语言完全改写 Matlab,并推出第一个商业版。l 增添图形图像处理、符号运算、以及与其他流行软件 的接口功能,使得 Matlab 的功能越来越强大。l 到九十年代,在国际上 30 几个数学类科技应用软件中, Matlab 在数值计算方面独占鳌头。1Matlab 的特点与功能的特点与功能
2、q Matlab 具有很强的数值计算功能具有很强的数值计算功能q Matlab 是一个交互式软件系统是一个交互式软件系统输入一条命令,立即就可以得出该命令的结果输入一条命令,立即就可以得出该命令的结果l Matlab 以以矩阵矩阵作为数据操作的基本单位,作为数据操作的基本单位, 但无需预先指定矩阵维数(但无需预先指定矩阵维数(动态定维动态定维)l 提供十分丰富的数值计算函数,方便计算,提高效率提供十分丰富的数值计算函数,方便计算,提高效率l Matlab 命令与数学中的符号、公式非常接近,命令与数学中的符号、公式非常接近, 可读性强,容易掌握可读性强,容易掌握2Matlab 的特点与功能的特点
3、与功能q Matlab 符号计算功能符号计算功能q Matlab 的编程功能的编程功能q Matlab 的绘图功能的绘图功能Matlab提供丰富的绘图命令,提供丰富的绘图命令,很方便实现数据的可视化很方便实现数据的可视化Matlab 和著名的符号计算语言和著名的符号计算语言 Maple 相结合相结合Matlab具有具有程序结构控制程序结构控制、函数调用函数调用、数据结构数据结构、输入输输入输出出、面向对象面向对象等程序语言特征,而且等程序语言特征,而且简单易学简单易学、编程效率编程效率高高。通过。通过 Matlab 进行编程完成特定的任务进行编程完成特定的任务3Matlab 的特点与功能的特点
4、与功能q Matlab 丰富的工具箱(丰富的工具箱(toolbox)根据专门领域中的特殊需要而设计的各种可选工具箱根据专门领域中的特殊需要而设计的各种可选工具箱Symbolic Math PDEOptimizationSignal processImage ProcessStatisticsControl SystemSystem Identification q Matlab 的的 Simulink 动态仿真集成环境动态仿真集成环境提供建立系统模型、选择仿真参数和数值算法、启动仿提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察真程序对该系统进行
5、仿真、设置不同的输出方式来观察仿真结果等功能仿真结果等功能4Matlab 的工作界面的工作界面命令窗口命令窗口当前工当前工作目录作目录当前工当前工作空间作空间输入命令的输入命令的历史记录历史记录命令命令提示符提示符5% 后为注释,不被执行后为注释,不被执行不加分号,则显示结果不加分号,则显示结果冒号表达式冒号表达式. / () 为数组右除为数组右除t . 2 为向量求幂为向量求幂6矩阵矩阵q 定义矩阵:直接输入法定义矩阵:直接输入法l 矩阵用方括号矩阵用方括号 “ ” 括起括起例:例: A = 1 2 3; 4 5 6; 7 8 9l 矩阵同一行中的元素之间用矩阵同一行中的元素之间用 空格空格
6、 或或 逗号逗号 分隔分隔l 矩阵行与行之间用矩阵行与行之间用 分号分号 分开分开l 直接输入法中,分号可以用直接输入法中,分号可以用 回车回车 代替代替例:例:l :命令提示符,不用输入:命令提示符,不用输入:命令提示符,不用输入:命令提示符,不用输入l l 回车回车回车回车 :运行所输入的命令:运行所输入的命令:运行所输入的命令:运行所输入的命令q Matlab 的操作对象是的操作对象是 矩阵7矩阵元素赋值矩阵元素赋值q 矩阵元素可以是任何数值表达式矩阵元素可以是任何数值表达式q 矩阵元素的单独赋值矩阵元素的单独赋值例:例: x(5)=abs(x(1)例:例: x(5)=abs(x(6)
7、?MatlabMatlab自动将向量自动将向量 x 的长度扩展到的长度扩展到 5,并将未赋值部分置零。并将未赋值部分置零。例:例: x=-1.3, sqrt(3), (1+2+3)*4/58矩阵元素的引用矩阵元素的引用例:例: A(2,3)q 多个元素的引用:冒号的特殊用法多个元素的引用:冒号的特殊用法利用小括弧和元素所在的位置利用小括弧和元素所在的位置(下标下标)x ( i ) :向量:向量 x 中的第中的第 i 个元素个元素A ( i, j ) :矩阵:矩阵 A 中的第中的第 i 行,第行,第 j 列元素列元素a:b:c产生一个由产生一个由等差序列等差序列组成的向量;组成的向量; a 是首
8、项,是首项,b 是公是公差,差,c 确定确定最后一项;若最后一项;若 b=1,则,则 b 可以省略。可以省略。q 单个元素的引用单个元素的引用例:例: x=1:2:5 y=1:2:6例:例: x=2:1:5 y=2:59矩阵元素的引用矩阵元素的引用例:例: x(1:3) A(3,1:3)A(i:j, m:n) 表示由矩阵表示由矩阵 A 的第的第 i 到第到第 j 行和第行和第 m 到第到第 n列交叉线上的元素组成的列交叉线上的元素组成的子矩阵子矩阵。可利用冒号提取矩阵可利用冒号提取矩阵 的整行或整列。的整行或整列。例:例: A(1, :) A(:, 1:3) A(:, :)10Matlab 变
9、量变量q 变量命名原则变量命名原则u 以以字母开头字母开头u 后面可以跟后面可以跟 字母、数字字母、数字 和和 下划线下划线u 长度长度不超过不超过 63 个字符个字符(6.5 版本以前为版本以前为 19 个个)u 变量名变量名 区分字母的区分字母的 大小大小 写写q Matlab 语句的通常形式语句的通常形式变量变量 = 表达式表达式表达式是用运算符将有关运算量连接起来的式子,表达式是用运算符将有关运算量连接起来的式子,其结果被赋给赋值号其结果被赋给赋值号“=”左边的变量左边的变量11q 分号和续行符的作用分号和续行符的作用Matlab 变量变量例:例:l 若不想在屏幕上输出结果,可以在语句
10、最后加若不想在屏幕上输出结果,可以在语句最后加分号分号 l 如果语句很长,可用如果语句很长,可用续行符续行符 “”(三个点)续行(三个点)续行 续行符续行符的前面最好留一个空格的前面最好留一个空格12Matlab 变量变量q 变量的查询变量的查询l who 显示工作空间中的所有变量显示工作空间中的所有变量l whos 查看工作空间中变量的详细属性查看工作空间中变量的详细属性13Matlab 变量变量u pi : 圆周率圆周率 ,其值为,其值为 imag(log(-1)u inf,Inf :无穷大无穷大 u eps :浮点运算相对精度浮点运算相对精度 u i,j :虚部单位,虚部单位,即即应尽量
11、避免给系统预定义变量重新赋值!应尽量避免给系统预定义变量重新赋值!q 系统预定义变量系统预定义变量u nan,NaN :Not-a-Number,一个不定值,如,一个不定值,如 0/014Matlab 数值运算数值运算q 数与算术表达式数与算术表达式u 复数的输入复数的输入l z=3+4i (4 与与 i 之间不能有空格之间不能有空格)l z=3+4*i复数作为矩阵元素输入时,加号两边不能有空格复数作为矩阵元素输入时,加号两边不能有空格! !u Matlab 中的数默认是中的数默认是双精度实数双精度实数,表示方法同,表示方法同 C 语言语言3, -9, 0.4, 1.603e-12, 3.23
12、e+2015Matlab 数值运算数值运算q 数学运算符数学运算符u + 加法加法u - 减法减法u * 乘法乘法u / 和和 除法(右除和左除)除法(右除和左除)u 幂运算幂运算q 命令分隔符:命令分隔符:逗号逗号和和分号分号16Matlab 的输出的输出q 输出格式输出格式format 只改变变量的输出格式,只改变变量的输出格式,但不会影响变量的值!但不会影响变量的值!u Matlab 以双精度执行所有的运算,运算结果可以以双精度执行所有的运算,运算结果可以在在屏幕上输出屏幕上输出,同时,同时赋给指定变量;赋给指定变量;若无指定变量,则系若无指定变量,则系统会自动将结果赋给变量统会自动将结
13、果赋给变量 “ans” u Matlab 中数的输出格式可以通过中数的输出格式可以通过 format 命令指定命令指定17各种各种 format 格式格式格式格式解释解释例例format短格式(缺省显示格式),同短格式(缺省显示格式),同short3.1416format short短格式(缺省显示格式),只显示短格式(缺省显示格式),只显示5位位3.1416format long长格式,双精度数长格式,双精度数15位,单精度数位,单精度数7位位3.14159265358979format short e短格式短格式e方式(科学计数格式方式(科学计数格式)3.1416e+000format l
14、ong e长格式长格式e方式方式3.141592653589793e+000format short g短格式短格式g方式方式3.1416format long g长格式长格式g方式方式3.14159265358979format compact压缩格式压缩格式format loose自由格式自由格式format + / format bank / format rat / format hex (详情查看联机帮助详情查看联机帮助)18向量与矩阵运算19q 向量与矩阵的生成向量与矩阵的生成向量与矩阵运算向量与矩阵运算u 向量的生成向量的生成 直接输入直接输入: : a=1,2,3,4 冒号运算
15、符冒号运算符 从矩阵中抽取行或列从矩阵中抽取行或列 a = 1:4 b = 0:pi/3:pi c = 5:-2:0例例:20q 向量与矩阵的生成(续)向量与矩阵的生成(续)向量与矩阵运算向量与矩阵运算u 矩阵的生成矩阵的生成 直接输入直接输入: : A=1, 2, 3; 4, 5, 6; 7, 8, 9 由向量生成由向量生成 通过编程生成通过编程生成 由函数生成由函数生成例例: x = 1,2,3; y = 2,3,4; A = x,y B = x;y21常见矩阵生成函数常见矩阵生成函数zeros(m,n)生成一个生成一个 m 行行 n 列的零矩阵,列的零矩阵,m=n 时可简写为时可简写为
16、zeros(n)ones(m,n)生成一个生成一个 m 行行 n 列的元素全为列的元素全为 1 的矩阵的矩阵, m=n 时可写为时可写为 ones(n)eye(m,n)生成一个主对角线全为生成一个主对角线全为 1 的的 m 行行 n 列矩阵列矩阵, m=n 时可简写为时可简写为 eye(n),即为,即为 n 维单位矩阵维单位矩阵diag(X)若若 X 是矩阵,则是矩阵,则 diag(X) 为为 X 的主对角线向量的主对角线向量若若 X 是向量,是向量,diag(X) 产生以产生以 X 为主对角线的对角矩阵为主对角线的对角矩阵tril(A)提取一个矩阵的下三角部分提取一个矩阵的下三角部分triu
17、(A)提取一个矩阵的上三角部分提取一个矩阵的上三角部分rand(m,n)产生产生 01 间均匀分布的随机矩阵间均匀分布的随机矩阵 m=n 时简写为时简写为 rand(n)randn(m,n)产生均值为产生均值为0,方差为,方差为1的标准正态分布随机矩阵的标准正态分布随机矩阵m=n 时简写为时简写为 randn(n)其它特殊矩阵生成函数:其它特殊矩阵生成函数:magic、hilb、pascal22矩阵操作矩阵操作q 提取矩阵的部分元素:提取矩阵的部分元素: 冒号运算符冒号运算符u A(:) A 的所有元素的所有元素u A(:,:) 矩阵矩阵A 的所有元素的所有元素u A(:,k) A 的第的第
18、k 列列, A(k,:) A 的第的第 k 行行 u A(k:m) A 的第的第 k 到第到第 m 个元素个元素u A(:,k:m) A 的第的第 k 到第到第 m 列组成的子矩阵列组成的子矩阵23子矩阵的提取子矩阵的提取q 从大矩阵中提取一个子矩阵从大矩阵中提取一个子矩阵A(I,J)其中其中 I=i1, i2, , im, J= j1, j2, , jm表示由表示由 A 的第的第 i1, i2, , im 行和第行和第 j1, j2, , jm 列组成的子矩阵。列组成的子矩阵。例:例: A(1,3,5, 2,3)24矩阵操作矩阵操作q 矩阵的转置与共轭转置矩阵的转置与共轭转置u 共轭转置共轭
19、转置u . 转置,矩阵元素不取共轭转置,矩阵元素不取共轭点与单引号之间不能有空格点与单引号之间不能有空格! A = 1, 2; 3i, 4i B = A C = A.例例:25矩阵操作矩阵操作q 矩阵的旋转矩阵的旋转u fliplr(A) 左右旋转左右旋转u flipud(A) 上下旋转上下旋转 A = 1 2 3;4 5 6 B = fliplr(A) C = flipud(A)例例:26矩阵操作矩阵操作q 查看矩阵的大小:查看矩阵的大小:size、lengthu size(A) 返回矩阵返回矩阵 A 的的行数和列数行数和列数u size(A,1) 返回矩阵返回矩阵 A 的的行数行数u si
20、ze(A,2) 返回矩阵返回矩阵 A 的的列数列数u length(x) 返回向量返回向量 X 的的长度长度u length(A) 等价于等价于 max(size(A) A = 1,2,3; 4,5,6 size(A) size(A,1) size(A,2)例例: length(A) x = 5:2:10; length(x)27矩阵基本运算矩阵基本运算q 矩阵的加减矩阵的加减:对应分量进行运算对应分量进行运算q 矩阵的普通乘法矩阵的普通乘法参与加减运算的矩阵具有参与加减运算的矩阵具有 相同的维数!相同的维数! A = 1,2; 3,4; B = 5,6; 7,8 C = A+B D = B-
21、A例例:参与运算的矩阵须满足线性代数中矩阵相乘的原则!参与运算的矩阵须满足线性代数中矩阵相乘的原则! A = 1,2,3; 4,5,6; B = 2,1; 4,3 C = B*A例例:28矩阵基本运算矩阵基本运算q 矩阵的除法矩阵的除法:/、 右除和左除右除和左除 若 A 可逆方阵,则AB A 的逆左乘的逆左乘 B = inv(A)*BB/A A 的逆右乘的逆右乘 B B*inv(A)X=AB A*X=BX=B/A X*A=B 通常,矩阵除法可以理解为 当当 A 和和 B 行数相等行数相等时可进行时可进行左除左除 当当 A 和和 B 列数相等列数相等时可进行时可进行右除右除29矩阵的乘方矩阵的
22、乘方u A 是方阵,p 是正整数Ap 表示 A 的 p 次幂,即 p 个 A 相乘。 u 若 A 是方阵,p 不是正整数 Ap 的计算涉及到的计算涉及到 A 的特征值分解,即若的特征值分解,即若 A = V*D*V-1 则 Ap=V*(D.p)/V30矩阵的数组运算矩阵的数组运算q 数组运算:数组运算:对应元素进行运算u 数组运算包括:数组运算包括:点乘点乘、点除点除、点幂点幂u 相应的四个数组运算符为:相应的四个数组运算符为: .* ./ . . 点与算术运算符之间不能有空格!点与算术运算符之间不能有空格!参与运算的对象必须具有相同的形状!参与运算的对象必须具有相同的形状! A = 1,2,
23、3; 4,5,6; B = 3,2,1; 6,5,4; C = A.*B D = A./B E = A.B例例:31函数取值函数取值设设 x 是变量,是变量, f 是一个函数是一个函数u 当当 x = a 是标量时,是标量时,f(x) = f(a) 也是一个标量也是一个标量u 当当 x = a, b, 是向量时,则是向量时,则 f(x) = f(a), f(b), 是一个与是一个与 x 长度相同的向量长度相同的向量q 函数作用在矩阵上的取值函数作用在矩阵上的取值u 若若 A 是矩阵,则是矩阵,则 f(A) 是一个与是一个与 A 同形状的矩阵同形状的矩阵f 作用在作用在 x 的的每个分量上每个分
24、量上!32函数取值函数取值怎样计算怎样计算 eA ?例例: x = 0:pi/4:pi; A = 1,2,3; 4,5,6; y1 = sin(x) y2 = exp(A) y3 = sqrt(A)例例:33矩阵的超越函数矩阵的超越函数q Matlab 提供了三种矩阵函数:expm、sqrtm、logm详情参见联机帮助详情参见联机帮助(help expm / sqrtm / logm )q 更一般的矩阵函数: funmu funm(A,fun)参数参数 fun 的可以是的可以是 exp,,log,cos,sin,cosh,sinh 34矩阵与数的运算矩阵与数的运算q 加减加减:矩阵的每个元素都
25、与数作加减运算矩阵的每个元素都与数作加减运算q 数乘数乘:矩阵的每个元素都与数作乘法运算矩阵的每个元素都与数作乘法运算q 矩阵除以一个数矩阵除以一个数:每个元素都除以这个数每个元素都除以这个数q 点幂点幂:l 底为矩阵,指数为标量l 底为标量,指数为矩阵352 .x = ? 2 .x; y = ?数与数组的点幂数与数组的点幂x.y =14,25,36=1,32,729 x.2 =12,22,32=1,4,9 . 前最好留个空格前最好留个空格例例:x=1 2 3; y=4 5 6;Matlab中的所有中的所有标点符号标点符号必须在必须在英文状态下输入英文状态下输入36l 特征值函数特征值函数 函
26、数函数x,y=eig(A)x,y=eig(A)可以给出特征值和特征向量的值可以给出特征值和特征向量的值,x,x为特征向量矩阵,为特征向量矩阵,y y为特征值矩阵。为特征值矩阵。矩阵的基本函数运算矩阵的基本函数运算A=7 3 -2;3 4 -1;-2 -1 3;x,y=eig(A)x = 0.5774 0.0988 -0.8105 -0.5774 -0.6525 -0.4908 0.5774 -0.7513 0.3197y = 2.0000 0 0 0 2.3944 0 0 0 9.605637矩阵的基本函数运算矩阵的基本函数运算q 条件数函数条件数函数Cond(A)Condest(A)Cond
27、(A,p)q 范数函数范数函数norm(A) 2-范数范数norm(A,p) p-范数,范数,p = 1,2,inf,fronormest(A) 2-范数估范数估计值计值q 秩函数秩函数 rank(A)q 迹函数迹函数 trace(A)38Matlab中常见数学函数中常见数学函数sin、cos、tan、cot、sec、csc、asin、acos、atan、acot、asec、acsc、exp、log、log2、log10、sqrtabs、conj、real、imag、signfix、floor、ceil、round、mod、remmax、min、sum、mean、sort、det、inv、ei
28、g、rank、log 是自然对数,即以是自然对数,即以 e 为底数为底数mod(x,y) 结果与结果与 y 同号,同号,rem(x,y) 则与则与 x 同号同号max 等函数的参数是矩阵时,是作用在矩阵各列上等函数的参数是矩阵时,是作用在矩阵各列上39Matlab 绘图40Matlab 绘图绘图如何画出如何画出 ysin(x) 在在 0, 2*pi 上的图像?上的图像?41q 手工作图手工作图Matlab 绘图绘图u 找点:找点: x=0, pi/4, pi/2, 3*pi/4, pi, u 计算函数值:计算函数值: y=sin(0), sin(pi/3), sin(pi/2), u 描点:在
29、坐标系中画出这些离散点描点:在坐标系中画出这些离散点u 用直线或曲线连接这些点,得到函数的大致图形用直线或曲线连接这些点,得到函数的大致图形42q Matlab 作图作图Matlab 绘图绘图u 给出离散点列:给出离散点列: x=0:pi/10:2*piu 计算函数值:计算函数值: y=sin(x)u 画图:用画图:用 matlab 二维绘图命令二维绘图命令 plot 作出函数图形作出函数图形 plot(x,y) 例例: x=0:pi/10:2*pi; y=sin(x); plot(x,y);43Matlab 二维作图二维作图u plot(x,y)q 基本形式基本形式l x, y 都是向量,则
30、以都是向量,则以 x 中元素为横坐标,中元素为横坐标, y 中元素为中元素为纵坐标作平面曲线。此时纵坐标作平面曲线。此时 x, y 必须具有必须具有相同长度相同长度。 x, y 都是矩阵,则将都是矩阵,则将 x 的列和的列和 y 中相应的列相组合,中相应的列相组合,绘制多条平面曲线。此时绘制多条平面曲线。此时 x, y 必须具有必须具有相同的大小相同的大小。 x 是向量是向量, y 是矩阵,若是矩阵,若 x 的长度与的长度与 y 的行数相等,的行数相等,则将则将 x 与与 y 中的各列相对应,绘制多条平面曲线;否中的各列相对应,绘制多条平面曲线;否则,若则,若 x 的长度与的长度与 y 的列数
31、相等,则将的列数相等,则将 x 与与 y 中的各中的各行相对应,绘制多条平面曲线。此时行相对应,绘制多条平面曲线。此时 x 的长度必须等的长度必须等于于 y 的行数或列数的行数或列数。44plot 举例举例 x=0:0.1:4*pi; y=cos(x); plot(x,y);例例:y=cos(x) 在在 0, 4*pi 上的图像上的图像自己动手指出以下各个绘图命令的输出图形分别是什么,并上机验证指出以下各个绘图命令的输出图形分别是什么,并上机验证 t=0 1; x=1 2; y=x;3 4; z=y;5 6; plot(t,x); plot(t,y); plot(t,y); plot(t,z)
32、; plot(t,z);4546q 点和线的基本属性点和线的基本属性图形的属性图形的属性u plot(x,y,string)其中其中 string 是用是用 单引号单引号 括起来的字符串,用来指定图括起来的字符串,用来指定图形的属性形的属性(点、线的形状和颜色)(点、线的形状和颜色)属性可以全部指定,也属性可以全部指定,也可以只指定其中某几个可以只指定其中某几个排列顺序任意排列顺序任意红色、虚线、红色、虚线、离散点用加号离散点用加号蓝色、点划线蓝色、点划线离散点为菱形离散点为菱形黑色、实线黑色、实线离散点用星号离散点用星号 x=0:0.2:2*pi; plot(x,cos(x); plot(x
33、,cos(x),r+:); plot(x,cos(x),bd-.); plot(x,cos(x),k*-);47图形的基本属性图形的基本属性线型线型点标记点标记颜色颜色- - 实线实线: : 虚线虚线-.-. 点划线点划线- 间断线间断线. . 点点o o 小圆圈小圆圈x x 叉子符叉子符+ + 加号加号* * 星号星号s s 方格方格d d 菱形菱形 朝上三角朝上三角v v 朝下三角朝下三角 朝右三角朝右三角 legend(cos(x);例例:50图形的其他属性图形的其他属性u 在指定地方添加文本text(x,y,string1,string2, .) text(pi/2,cos(pi/2)
34、,leftarrowy=cos(x);xlable, ylabel, text 命令也可以指定文本的属性直观方法:可以直接在图象上进行编辑51其他相关命令其他相关命令u 保持当前窗口的图像hold on 或或 hold offu 新建绘图窗口figure(n)u 显示网格grid on 或或 grid off52同时绘制多个函数图像同时绘制多个函数图像u plot(x1,y1,s1,x2,y2,s2, . ,xn,yn,sn)属性选项属性选项可以省略可以省略等价于:等价于:hold onplot(x1,y1,s1)plot(x2,y2,s2).plot(xn,yn,sn)53上机作业上机作业u
35、 利用 plot 函数在一个坐标系下绘制以下函数的图形:y1 用黑色间断线点标记为星号y2 用红色实线点标记为小方格y3 用蓝色虚线点标记为小圆圈要求:u 教材第 54 页 6、8(选做)54Matlab 绘图空间三维作图与符号作图空间三维作图与符号作图 55空间三维作图空间三维作图q 三维曲线 : plot3设三维曲线的参数方程为:x=x(t),y=y(t),z=z(t),则其图形可由下面的命令绘出:例:例:三维螺旋线三维螺旋线plot3的用法与的用法与 plot 类似类似 t=0:0.1:10*pi; x=2*t; y=sin(t); z=cos(t); plot3(x,y,z);plot
36、3(x,y,z,s)56空间三维作图空间三维作图q 空间曲面 57空间三维作图空间三维作图q 空间曲面 l mesh(Z) :绘出矩阵绘出矩阵 Z 的三维消隐图。的三维消隐图。l mesh(x,y,Z) x, y 是向量,是向量,length(x)=n,length(y)=m,m,n=size(Z)l mesh(X,Y,Z) 绘制由矩阵绘制由矩阵 X,Y,Z 所确定的曲面所确定的曲面网格图网格图58空间三维作图空间三维作图q 带等高线的带等高线的空间曲面 meshc调用方式与调用方式与 mesh 相同,在相同,在 mesh 基础上增加等高线基础上增加等高线meshz调用方式与调用方式与 mes
37、h 相同,在相同,在 mesh 基础上屏蔽边界面基础上屏蔽边界面q 屏蔽边界面的屏蔽边界面的空间曲面 59空间三维作图空间三维作图u 网格生成函数:网格生成函数:meshgridx, y 为给定的向量,为给定的向量,X, Y 是网格划分后得到的网格矩阵是网格划分后得到的网格矩阵u 绘制由函数绘制由函数 z=z(x,y) 确定的曲面时,首先需产生一确定的曲面时,首先需产生一个网格矩阵,然后计算函数在各网格点上的值。个网格矩阵,然后计算函数在各网格点上的值。若 x = y, 则可简写为 X,Y= meshgrid(x)X,Y= meshgrid(x,y)60空间三维作图空间三维作图 x=-8:0.
38、5:8; y=-8:0.5:8; X,Y=meshgrid(x,y); r=sqrt(X.2+Y.2)+eps; Z=sin(r)./r; mesh(X,Y,Z)例:由函数 确定的曲面绘图区域取为 -8,8-8,861线线: 分别沿分别沿 x 方向和方向和 y 方向方向 连接这些点即可连接这些点即可得到得到空间曲面作图空间曲面作图先画点 (x,y,z),后连线,构成曲面网格图点点: :62q 例:“墨西哥帽子”空间曲面作图举例空间曲面作图举例( a x a, -a y x=-8:0.5:8; y=-8:0.5:8; X,Y=meshgrid(x,y); r=sqrt(X.2+Y.2)+eps;
39、 Z=sin(r)./r; mesh(X,Y,Z)1) x 与 y 可以取不同的步长2) 注意这里采用的数组运算epseps?最后一个命令能否改为最后一个命令能否改为 mesh(Z)?X,Y=meshgrid(-8:0.5:8);64例:绘制等高线 meshc空间曲面作图举例空间曲面作图举例 X,Y=meshgrid(-8:0.5:8); r=sqrt(X.2+Y.2)+eps; Z=sin(r)./r; meshc(X,Y,Z)65例:绘制边界面屏蔽 meshz空间曲面作图举例空间曲面作图举例 X,Y=meshgrid(-8:0.5:8); r=sqrt(X.2+Y.2)+eps; Z=si
40、n(r)./r; meshz(X,Y,Z)66空间三维作图空间三维作图q 空间曲面其它作图函数 u sphere(n) 专用于绘制单位球面专用于绘制单位球面mesh 绘制网格图,surf 绘制着色的三维表面图u surf(X,Y,Z) 绘制由矩阵绘制由矩阵 X,Y,Z 所确定的曲面图,参数含义同所确定的曲面图,参数含义同 meshsphere 只能画单位球面!只能画单位球面!自己动手绘制球面绘制球面 x2 + y2 + z2 = 16X,Y,Z=sphere(n)67surf 作图举例作图举例 X,Y=meshgrid(-8:0.5:8); r=sqrt(X.2+Y.2)+eps; Z=sin
41、(r)./r; surf(X,Y,Z)68mesh 与与 surf 的比较的比较69如果没有给出如果没有给出 n 的值,的值,则系统默认为则系统默认为 n=20sphere 作图作图70u ezplot(f)Matlab 符号作图符号作图q 二维曲线绘图: ezplotu ezplot(f,a,b)u ezplot(f(x,y)u ezplot(f(x,y),a,b,c,d)u ezplot(f,g,a,b)缺省的绘图区间为缺省的绘图区间为 -2 , 2 71例:ezplot 作图作图72Matlab 符号作图符号作图q 空间曲线绘图: ezplot3缺省的绘图区间为缺省的绘图区间为 0, 2
42、 u ezplot3(x,y,z,a,b)u ezplot3(x,y,z)符号作图时要注意符号作图时要注意 使用使用 单引号单引号!ezplot3(2*t,sin(t),cos(t),0,20)73Matlab 符号作图符号作图q 空间曲面绘图: ezmesh、ezsurfu ezmesh(z(x,y),a,b,c,d)u ezmesh(z(x,y),a,b)u ezmesh(z(x,y)u ezmesh(x(s,t),y(s,t),z(s,t),a,b,c,d)u ezmesh(x(s,t),y(s,t),z(s,t),a,b)u ezmesh(x(s,t),y(s,t),z(s,t)ezs
43、urf 的用法与 ezmesh 相同74Mesh 绘图小结绘图小结u 显式方程:z=z(x,y), a x b, c y d x=a:hx:b; y=c:hy:d; X,Y=meshgrid(x,y); Z=z(X,Y); mesh(X,Y,Z)u 参数方程:x=x(u,v),y=y(u,v),x=z(u,v) u=a:hu:b; y=c:hv:d; U,V=meshgrid(u,v); X=x(U,V); Y=y(U,V); Z=z(U,V); mesh(X,Y,Z)a u b, c v d75Matlab 编程入门(一)76.;Matlab 编程入门编程入门q Matlab 编程简介u M
44、atlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和 C、FORTRAN 等高级语言一样进行程序设计。u 在 Matlab 程序设计中,要充分利用 Matlab 数据结构的特点,提高编程效率。u 利用 Matlab 的程序控制功能,可以将有关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕。77q 用 Matlab 语言编写的程序称为 M 文件。q M 文件是由若干 Matlab 命令组合在一起构成的,它可以完成某些操作
45、,也可以实现某种算法。事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言开发的 M 文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。q M 文件根据调用方式的不同可以分为两类:u Script:脚本文件/命令文件 u Function:函数文件 M 文件文件q M 文件以 .m 为扩展名。78q M 文件是一个文本文件,可以用任何文本编辑器来建立和编辑,通常使用 Matlab 自带的 M 文件编辑器。M 文件的建立与打开文件的建立与打开q 新建一个 M 文件u 菜单操作 ( File New M-File )u 命令操作 ( edit M 文件名 )u
46、 命令按钮 ( 快捷键 )q 打开已有的 M 文件u 菜单操作 ( File Open )u 命令操作 ( edit M 文件名 )u 命令按钮 ( 快捷键 )u 双击 M 文件 79编程示例编程示例u=0:pi/60:2*pi; v=0:pi/60:pi; U,V=meshgrid(u,v);R=3; X=R*sin(V).*cos(U);Y=R*sin(V).*sin(U); Z=R*cos(V); mesh(X,Y,Z); axis equal;u 编程方式:新建一个 M 文件 myprg1.m,内容如下:例:例:用用 mesh 绘制半径为绘制半径为 4 的球的球 u 命令行 方式: u
47、=0:pi/60:2*pi; v=0:pi/60:pi; U,V=meshgrid(u,v); R=3; X=R*sin(V).*cos(U); Y=R*sin(V).*sin(U); Z=R*cos(V); mesh(X,Y,Z); axis equal;在命令窗口中输入 myprg1,执行该 M 文件80q 程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成。u 顺序结构M文件控制流文件控制流l 按排列顺序依次执行各条语句,直到程序的最后。l 这是最简单的一种程序结构,一般涉及数据的输入输出、数据的计算或处理等。81例:例:A=input(Please
48、input A: )u 数据的输入:inputA=input(提示信息提示信息)l 其中 提示信息 为字符串,l 该命令要求用户输入 A 的值 (可以是数或字符串)数据输入数据输入 inputname=input(Whats your name? )例例:l 输入字符串时必须带单引号82disp(X)输出变量 X 的值的值,可以是数值矩阵或字符串 B=1 2 3; 4 5 6; 7 8 9; disp(B)数据输出数据输出 dispu 数据的输出:disp A=Hello,Tom !; disp(A)例:例:83pauseu 程序的暂停:pausepause 或或 pause(n)若想强行终止
49、程序的运行,可以使用 Ctrl+c其中 n 是延迟时间,以秒为单位;若缺省,则将暂停程序,直到用户按任意键后继续l pause off 屏蔽程序中所有屏蔽程序中所有 pause 的作用的作用l pause on 打开打开 pause 的作用的作用84选择结构选择结构 是根据给定的条件成立或不成立,分别执行不同的语句。Matlab 用于实现选择结构的语句有 if 语句和 switch 语句。选择结构选择结构85l 单分支结构if expression (条件)(条件) statements (语句组)(语句组)endif 条件语句条件语句if expression (条件)(条件) statem
50、ents1(语句组(语句组1)else statements2(语句组(语句组2)endl 双分支结构86if expression1 (条件1) statements1(语句组1)elseif expression2 (条件2) statements2(语句组2) . . elseif expressionm (条件m) statementsm(语句组m)else statements(语句组)endl 多分支结构if 条件语句条件语句87if 语句举例语句举例u 数论中的一个有趣问题:3n+1 问题任取一个正整数,如果是偶数,用 2 除,如果是奇数,用 3 乘再加 1,反复这个过程,直到所
51、得到的数为 1。问:是否存在使该过程永不中止的整数? (exp01.m)88while 1 n=input(Please enter n(nonpositive quit):); if n1 if rem(n,2)=0 n=n/2; else n=3*n+1; end fprintf(n n=%d,n); end fprintf(n n=%d is not we need! continue . n, nt);endif 语句举例语句举例89l 根据表达式的不同取值,分别执行不同的语句。switch expression (表达式)(表达式) case value1 (表达式(表达式1) st
52、atement1(语句组(语句组1) case value2 (表达式(表达式2) statement2(语句组(语句组2) . . case valuem (表达式(表达式m) statementm(语句组(语句组m) otherwise statement (语句组)(语句组)endswitch 语句语句90l Matlab 首先计算 expression 的值,然后将它依次与各个 case 指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出 switch 结构。l switch 后面的表达式 expression 的值可以是一个标量或字符串。switch 语句语句l
53、otherwise 指令可以不出现。l 如果所有的比较结果都为假,则执行 otherwise 后面的语句组,然后跳出 switch 结构。91循环结构循环结构 是按照给定的条件,重复执行指定的语句。Matlab 用于实现循环结构的语句有 for 语句语句和 while 语句语句循环结构循环结构92for variable=expression statement(循环体)end循环变量循环变量l 表达式 expression 可以是行向量,也可以是矩阵for 循环循环clear;y=0; n=100;for k=1:n y=y+1/(2*k-1);end例:例:已知 ,当,当 n=100 时,
54、求时,求 y 的值的值93l 循环语句可以嵌套使用while 循环循环while expression (条件) statement(循环体)endl 不能在 for 循环体内改变循环变量的值l 为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免 for 循环的使用l 如果预先就知道循环的次数,则可以采用 for 循环;否则,如果预先无法确定循环的次数,则可以使用 while 循环。94l 这个例子给出了计算 eps 的一种方法。l 这里我们用大写 EPS,因此系统中 eps 的值不会被覆盖。当 EPS=eps 时,条件仍成立;而当 EPS=eps/2 时,条件为假,退出循环,所以最后
55、应有 EPS=eps/2。num 用来记录循环次数。u 计算 Matlab 中 eps 值 (exp02.m)while 循环举例循环举例num=0; EPS=1;while (1+EPS)1 EPS=EPS/2; num=num+1;end95u break 和 continuel break 语句用于终止循环的执行,即跳出最内层循环 l continue 语句用于结束本次循环,进行下一次循环 l break 和 continue 一般与 if 语句配合使用其它流控制语句其它流控制语句u returnl return 语句用于退出正在运行的脚本或函数,通常用在函数文件中。96Matlab 编
56、程 (二) 函数文件97.;function 输出形参列表输出形参列表=函数名函数名(输入形参列表输入形参列表)% 注释说明部分注释说明部分(可选可选)函数体语句函数体语句(必须必须)u 第一行为第一行为引导行引导行,表示该,表示该 M文件是函数文件文件是函数文件u 函数名的命名规则与变量名相同函数名的命名规则与变量名相同 ( 必须以字母开头必须以字母开头 )u 当当输出形参输出形参多于一个时,用多于一个时,用方括号方括号括起来括起来u 函数必须是一个函数必须是一个单独的单独的 M文件文件u 函数函数文件名必须与函数名一致文件名必须与函数名一致u 以以百分号百分号开始的语句为开始的语句为注释语
57、句注释语句函数文件函数文件q 函数文件由函数文件由 function 语句引导语句引导98function y = myfliplr(x)% returns X with row preserved and columns% flipped in the left/right direction% % X = 1 2 3 becomes 3 2 1% 4 5 6 6 5 4% y = x(:,end:-1:1);函数文件举例函数文件举例例:例:myfliplr.m99function printyh(n)% 打印杨辉三角形打印杨辉三角形, 本函数没有输出参数本函数没有输出参数yh=1; dis
58、p(yh); if n=1, return; endyh=1,1; disp(yh);for k=3:n yh_old=yh; k2=ceil(k/2); for l=2:k2 yh(l)=yh_old(l-1)+yh_old(l); end yh(k2+1:k)=yh(k-k2:-1:1); disp(yh);end函数文件举例函数文件举例例:例:printyh.m100q 函数调用的一般格式函数调用的一般格式输出实参列表输出实参列表=函数名函数名(输入实参列表输入实参列表)u 函数调用时,函数调用时,实参的顺序实参的顺序应与函数定义时的应与函数定义时的形参的顺形参的顺序序一致。一致。 u
59、函数可以函数可以嵌套调用嵌套调用,即一个函数可以被其它函数调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为甚至可以被它自身调用,此时称为递归调用递归调用。u 函数所传递的参数具有可调性,函数所传递的参数具有可调性,Matlab 用两个永久变用两个永久变量量 nargin 和和 nargout 分别记录调用该函数时的输入实分别记录调用该函数时的输入实参和输出实参的个数。参和输出实参的个数。函数调用函数调用101% 函数文件函数文件 myfactor.mfunction f=myfactor(n)if (n=1) f=1;else f=n*myfactor(n-1);end% m
60、ain.m% 计算计算 s=1!+2!+3!+4!+5!%clear;s=0;for i=1:5 s=s+myfactor(i);endfprintf( s=%g n,s)例:利用函数的递归调用计算例:利用函数的递归调用计算 n!递归函数举例递归函数举例102% ex4argin.mfunction out=ex4argin(a,b)if (nargin=1) out=a;elseif (nargin=2) out=a*b;end参数的可调性举例参数的可调性举例% ex4argout.mfunction p,q=ex4argout(a,b)if (nargout=1) p=a+b;elseif
61、 (nargout=2) p=a+b; q=a-b;end103q 函数通过函数通过输入和输出参数输入和输出参数与其它与其它 M 文件进行数据传递。文件进行数据传递。q 当函数调用完毕后,该函数文件中定义的所有局部变量当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即都将被释放,即全部被清除全部被清除。q 如果在若干个如果在若干个 M文件中,文件中,都把某个变量定义为全局变量都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作。行存取和修改操作。q 函数文件中的变量都是函数文件中的变量都是局
62、部局部的,即一个函数文件中定义的,即一个函数文件中定义的变量不能被另一个函数文件或其它的变量不能被另一个函数文件或其它 M 文件使用。文件使用。全局变量与局部变量全局变量与局部变量q 定义全局变量是定义全局变量是 M文件间传递信息的一种手段。文件间传递信息的一种手段。104l 变量名列表中的各个变量变量名列表中的各个变量用空格隔开用空格隔开,不能用逗号!,不能用逗号!全局变量给函数间的数据传递带来了方便,但却破坏全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而了函数对变量的封装,降低了程序的可读性,因而在在结构化程序设计中,全局变量是不受欢迎的结构化程
63、序设计中,全局变量是不受欢迎的。特别是。特别是当程序较大,子程序较多时,全局变量将个程序调试当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。和维护带来不便,故不提倡使用全局变量。global 变量名列表变量名列表全局变量的定义全局变量的定义l 在使用全局变量的所有在使用全局变量的所有M文件中,都要对其所使用的全文件中,都要对其所使用的全局变量进行定义。局变量进行定义。105程序示例程序示例% ex4global.mclear; global a ba=1; b=3;y=mysquaresum(a,b);fprintf( a=%g, b=%g n,a,b);z
64、=myproduct(a,b);fprintf( a=%g, b=%gn,a,b);% mysquaresum.mfunction square_sum=mysquaresum(x,y)square_sum=x2 + y2; a=x+y;% myproduct.mfunction product=myproduct(x,y)global aproduct=x*y; a=x+y;106子函数子函数u 函数文件中可以含有一个或多个子函数函数文件中可以含有一个或多个子函数u 子函数由子函数由 function 语句引导语句引导u 主函数必须位于最前面,子函数出现的次序任意主函数必须位于最前面,子函数
65、出现的次序任意u 子函数只能被主函数和位于同一个函数文件中的其它子子函数只能被主函数和位于同一个函数文件中的其它子函数调用函数调用u 除了用除了用 global 定义的全局变量外,子函数中的变量都定义的全局变量外,子函数中的变量都是局部变量,子函数与主函数及其它子函数之间通过输入、是局部变量,子函数与主函数及其它子函数之间通过输入、输出参数进行数据传递输出参数进行数据传递q 调用一个函数时,调用一个函数时,Matlab 会首先检查该函数是否为一个会首先检查该函数是否为一个子函数。子函数。107子函数子函数% ex4subfun.mfunction avg, med = ex4subfun(x) % 主函数主函数 n = length(x);avg = mean(x, n);med = median(x, n);function a = mean(x, n) % 子函数,计算平均值子函数,计算平均值a = sum(x)/n;function m = median(x, n) % 子函数,计算中值子函数,计算中值x = sort(x);if rem(n, 2) = 1 m = x(n+1)/2);else m = (x(n/2)+x(n/2+1)/2;end108