• 1. MATLAB1 MATLAB简介1
  • 2. Matlab 简介 在欧美各高等院校,Matlab 已经成为线性代数、数值分析、数理统计、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课程的基本教学工具,已成为大学生必须掌握的基本技能之一。Matlab 功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。 Matlab是一种广泛应用于工程计算及数值分析领域的新型高级语言,自 1984 年推向市场以来,历经二十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。2
  • 3. Matlab 简介 Matlab: Matrix Laboratory 矩阵实验室 Matlab 的发展 1980年,Moler 教授用 Fortran 语言编写了集命令翻译、 科学计算于一身的一套交互式软件系统。 1984年,Moler 等成立了 The MathWorks 的公司,用 C 语言完全改写 Matlab,并推出第一个商业版。 增添图形图像处理、符号运算、以及与其他流行软件 的接口功能,使得 Matlab 的功能越来越强大。 到九十年代,在国际上 30 几个数学类科技应用软件中, Matlab 在数值计算方面独占鳌头。3
  • 4. 目前,Matlab 已成为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空航天、机械制造和工程建筑等领域发挥着越来越重要的作用。就影响而言,至今仍然没有一个别的计算软件可与 Matlab 匹敌。 Matlab 的发行1984年,Matlab 1.0 (DOS版,182K,20多个函数) 1992年,Matlab 4.0 (93年推出Windows版,加入 simulink) 1994年,Matlab 4.2(得到广泛重视和应用) 1999年,Matlab 5.3(真正实现32位运算) 2002年,Matlab 6.5(采用JIT加速器) 2004年,Matlab 7.0 自2006年起,Matlab每年更新两次Matlab 简介4
  • 5. 购买(下载)Matlab 软件Matlab 的安装 插入光盘,自动运行; 或点击安装程序 setup.exe 必须安装的部件 Matlab Symbolic Math Toolbox Extended Symbolic Math 这里以 Matlab 7.0.4 为例 自 R2008a 开始增加了激活要求5
  • 6. Matlab 的特点与功能 Matlab 具有很强的数值计算功能 Matlab 以矩阵作为数据操作的基本单位, 但无需预先指定矩阵维数(动态定维) 按照 IEEE 的数值计算标准进行计算 提供十分丰富的数值计算函数,方便计算,提高效率 Matlab 命令与数学中的符号、公式非常接近, 可读性强,容易掌握 Matlab 是一个交互式软件系统输入一条命令,立即就可以得出该命令的结果6
  • 7. Matlab 的特点与功能 Matlab 符号计算功能Matlab 和著名的符号计算语言 Maple 相结合 Matlab 的编程功能Matlab具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。通过 Matlab 进行编程完成特定的任务 Matlab 的绘图功能Matlab提供丰富的绘图命令, 很方便实现数据的可视化7
  • 8. Matlab 丰富的工具箱(toolbox)Matlab 的特点与功能根据专门领域中的特殊需要而设计的各种可选工具箱 Matlab 的 Simulink 动态仿真集成环境提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能Symbolic Math PDE OptimizationSignal process Image Process StatisticsControl System System Identification … …8
  • 9. Matlab 的基本用法 Matlab 系统的启动 使用 Windows “开始” 菜单 运行 Matlab 系统启动程序 matlab 双击 Matlab 快捷图标 Matlab 系统的退出 在 Matlab 主窗口 File 菜单中选择 Exit Matlab 在 Matlab 命令窗口输入 exit 或 quit 单击 Matlab 主窗口的“关闭”按钮9
  • 10. Matlab 的工作界面命令窗口当前工作目录当前工作空间输入命令的历史记录命令 提示符10
  • 11. 定义矩阵:直接输入法 矩阵用方括号 “[ ]” 括起例:>> A = [1 2 3; 4 5 6; 7 8 9] 矩阵同一行中的元素之间用 空格 或 逗号 分隔 矩阵行与行之间用 分号 分开 直接输入法中,分号可以用 回车 代替例:矩阵 Matlab 的操作对象是 矩阵 >> :命令提示符,不用输入 回车 :运行所输入的命令11
  • 12. 矩阵元素可以是任何数值表达式例:>> x=[-1.3, sqrt(3), (1+2+3)*4/5]矩阵元素赋值 矩阵元素的单独赋值例:>> x(5)=abs(x(1))例:>> x(5)=abs(x(6)) ??Matlab自动将向量 x 的长度扩展到 5, 并将未赋值部分置零。12
  • 13. 大矩阵可以把小矩阵作为其元素矩阵元素赋值例:>> A=[A ; 11 12 13]在原矩阵的下方加一行如何在原矩阵的右边添加一列?13
  • 14. 单个元素的引用例:>> A(2,3)矩阵元素的引用 多个元素的引用:冒号的特殊用法利用小括弧和元素所在的位置(下标)x ( i ) :向量 x 中的第 i 个元素 A ( i, j ) :矩阵 A 中的第 i 行,第 j 列元素a:b:c产生一个由等差序列组成的向量; a 是首项,b 是公差,c 确定最后一项;若 b=1,则 b 可以省略。例:>> x=1:2:5>> y=1:2:6例:>> x=2:1:5>> y=2:5例:>> x=3:2:114
  • 15. 例:>> x(1:3) >> A(3,1:3)矩阵元素的引用A(i:j, m:n) 表示由矩阵 A 的第 i 到第 j 行和第 m 到第 n 列交叉线上的元素组成的子矩阵。可利用冒号提取矩阵 的整行或整列。例:>> A(1, :) >> A(:, 1:3) >> A(:, :)15
  • 16. Matlab帮助系统 联机帮助 help 显示指定命令的简短使用说明例:>> help eig >> help help 详细使用帮助 doc 以网页形式显示指定命令的帮助页例:>> doc eig 其它相关命令helpdesk、helpwin16
  • 17. Matlab 查找命令 lookfor 按指定的关键词查询与之相关的命令例:>> lookfor inverse which 显示指定函数所在的目录例:>> which eig 其它相关命令cd、dir、more17
  • 18. 变量命名原则Matlab 变量 以字母开头 后面可以跟 字母、数字 和 下划线 长度不超过 63 个字符(6.5 版本以前为 19 个) 变量名 区分字母的 大小 写 Matlab 语句的通常形式变量 = 表达式表达式是用运算符将有关运算量连接起来的式子, 其结果被赋给赋值号“=”左边的变量18
  • 19. 分号和续行符的作用Matlab 变量 若不想在屏幕上输出结果,可以在语句最后加分号 如果语句很长,可用续行符 “…”(三个点)续行 续行符的前面最好留一个空格例:19
  • 20. 变量的查询Matlab 变量 who 显示工作空间中的所有变量 whos 查看工作空间中变量的详细属性20
  • 21. 系统预定义变量Matlab 变量 pi : 圆周率  ,其值为 imag(log(-1)) inf,Inf :无穷大 nan,NaN :Not-a-Number,一个不定值,如 0/0 eps :浮点运算相对精度 特殊变量 ans i,j :虚部单位,即应尽量避免给系统预定义变量重新赋值!21
  • 22. 数与算术表达式Matlab 数值运算 Matlab 中的数默认是双精度实数,表示方法同 C 语言3, -9, 0.4, 1.603e-12, 3.23e+20 浮点运算的相对误差为 eps 浮点数表示范围为:10-308 ~ 10308 复数的输入 z=3+4i (4 与 i 之间不能有空格) z=3+4*i复数作为矩阵元素输入时,加号两边不能有空格!22
  • 23. 数学运算符 + 加法Matlab 数值运算 - 减法 * 乘法 / 和 \ 除法(右除和左除) ^ 幂运算 命令分隔符:逗号和分号23
  • 24. 输出格式Matlab 的输出 Matlab 以双精度执行所有的运算,运算结果可以在屏幕上输出,同时赋给指定变量;若无指定变量,则系统会自动将结果赋给变量 “ans” Matlab 中数的输出格式可以通过 format 命令指定format 只改变变量的输出格式, 但不会影响变量的值!24
  • 25. 各种 format 格式格式解释例format短格式(缺省显示格式),同short3.1416format short短格式(缺省显示格式),只显示5位3.1416format long长格式,双精度数15位,单精度数7位3.14159265358979format short e短格式e方式(科学计数格式)3.1416e+000format long 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 (详情查看联机帮助)25
  • 26. 变量的存储 存储当前工作空间中的变量 save 将所有变量存入文件 matlab.mat save mydata 将所有变量存入指定文件 mydata.mat 存储指定的变量 save mydata.mat 将所有变量存入文件 mydata.matsave 文件名 变量名列表例:>> save mydata A x z 变量名列表中各变量之间用空格分隔26
  • 27. 变量的读取 将数据文件中的变量载入当前工作空间 load mydata 载入数据文件中的所有变量 load mydata A x 从数据文件中提取指定变量 清除当前工作空间中的变量 clear 清除当前工作空间中的所有变量 clear A x 清除指定的变量27
  • 28. 几个小技巧 Matlab 的命令记忆功能:上下箭头键 命令补全功能: Tab 键 可以先输入命令的前几个字符,再按上下键缩小搜索范围 用 Esc 键 删除命令行28
  • 29. Lecture 2 MATLAB矩阵(数值)运算29
  • 30. 利用函数建立数值矩阵:MATLAB提供了许多生成和操作矩阵的函数,可以利用它们去建立矩阵。 例如: reshape函数和diag函数等。 reshape函数用于建立数值矩阵。 diag函数用于产生对角阵。利用M文件建立矩阵:对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。其步骤为: 第一步:使用编辑程序输入文件内容。 第二步:把输入的内容以纯文本方式存盘(设文件名为 mymatrix.m)。 第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调用。1.建立矩阵30
  • 31. 利用M文件建立矩阵: 对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。其步骤为: 第一步:使用编辑程序输入文件内容。 第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。 第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调用。 子矩阵操作1.建立矩阵31
  • 32. 2.矩阵的基本运算 (1)矩阵转置 (2)矩阵加和减 (3)矩阵乘法 (4)矩阵除法 A\b=inv(A)*b (5)矩阵的乘方 a^232
  • 33. 3.矩阵的函数 >> help matfun Matrix functions - numerical linear algebra. Matrix analysis. norm - Matrix or vector norm. normest - Estimate the matrix 2-norm. rank - Matrix rank. det - Determinant. trace - Sum of diagonal elements. null - Null space. orth - Orthogonalization. rref - Reduced row echelon form. subspace - Angle between two subspaces. 33
  • 34. 3.矩阵的函数 Linear equations. \ and / - Linear equation solution; use "help slash". inv - Matrix inverse. rcond - LAPACK reciprocal condition estimator cond - Condition number with respect to inversion. condest - 1-norm condition number estimate. normest1 - 1-norm estimate. chol - Cholesky factorization. cholinc - Incomplete Cholesky factorization. lu - LU factorization. luinc - Incomplete LU factorization. qr - Orthogonal-triangular decomposition. lsqnonneg - Linear least squares with nonnegativity constraints. pinv - Pseudoinverse. lscov - Least squares with known covariance. 34
  • 35. 3.矩阵的函数 Eigenvalues and singular values. eig - Eigenvalues and eigenvectors. svd - Singular value decomposition. gsvd - Generalized singular value decomposition. eigs - A few eigenvalues. svds - A few singular values. poly - Characteristic polynomial. polyeig - Polynomial eigenvalue problem. condeig - Condition number with respect to eigenvalues. hess - Hessenberg form. qz - QZ factorization for generalized eigenvalues. schur - Schur decomposition. 35
  • 36. 3.矩阵的函数 Matrix functions. expm - Matrix exponential. logm - Matrix logarithm. sqrtm - Matrix square root. funm - Evaluate general matrix function. Factorization utilities qrdelete - Delete a column or row from QR factorization. qrinsert - Insert a column or row into QR factorization. rsf2csf - Real block diagonal form to complex diagonal form. cdf2rdf - Complex diagonal form to real block diagonal form. balance - Diagonal scaling to improve eigenvalue accuracy. planerot - Givens plane rotation. cholupdate - rank 1 update to Cholesky factorization. qrupdate - rank 1 update to QR factorization. 36
  • 37. 4.建立矩阵的函数 常用函数有: eye(size(A)) 产生与A矩阵同阶的单位矩阵 zeros(m,n) 产生0矩阵 ones(m,n) 产生幺矩阵 rand (m,n) 产生随机元素的矩阵 Size(a) 返回包含两个元素的向量。 Length(a) 返回向量的长度。 37
  • 38. 常见矩阵生成函数zeros(m,n)生成一个 m 行 n 列的零矩阵,m=n 时可简写为 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(A)提取一个矩阵的上三角部分rand(m,n)产生 0~1 间均匀分布的随机矩阵 m=n 时简写为 rand(n)randn(m,n)产生均值为0,方差为1的标准正态分布随机矩阵 m=n 时简写为 randn(n)其它特殊矩阵生成函数:magic、hilb、pascal38
  • 39. 5.数组运算 (1) 数组的加和减 (2) 数组的乘和除 (3) 数组的乘方39
  • 40. 6 应用举例1、行列式计算; 2、求解线性方程组; 3、解特征值问题40
  • 41. Lecture 3 MATLAB图形与可视化 (Graphic)41
  • 42. Lecture 3 Matlab图形可视化 基本要求 (1)掌握图形窗口的创建与控制,以及图形窗口的基本操作; (2)熟练掌握二维和三维绘图基本的命令、线型控制; (3)初步掌握用特殊的图形来表现特殊数据的性质,如面积图、直方 图、饼图等。 (4)掌握坐标轴的控制和图形标注命令及其用法。42
  • 43. Lecture 3 Matlab图形可视化A、二维平面图形与坐标系 1. 几个基本的绘图命令 a. 线性坐标曲线 plot 函数命令 plot 是 MATLAB 二维曲线绘图中最简单、最重要、使用最广泛的一个线性绘图函数。它可以生成线段、曲线和参数方程曲线的函数图形。 命令格式: plot(X,Y) plot(x1,y1,x2,y2,…):综合调用方式 43
  • 44. Lecture 3 Matlab图形可视化 用命令 plot(x,y)绘制函数 y=cos(x)在两个周期内的图形。 x=0:0.01:2*pi; y=cos(x); plot(x,y) 在同一图形窗口中用命令 plot(x,y)绘出正弦余弦函数的图形。 x=0:0.01:2*pi; y=[sin(x);cos(x)]; plot(x,y) 44
  • 45. Lecture 3 Matlab图形可视化 二维函数曲线专用命令 fplot 用plot绘图在确定自变量的取值间隔时,一般采用平均间隔,有时会因某处 间距太大,而不能反映出函数的变化情况。fplot是绘制函数 y=f(x)图形的专用命令,它的数据点是自适应产生的,对那些导数变化较大的函数,用 fplot 函数绘出的曲线比等分取点所画出的曲线更加接近真实。 fplot 函数命令的调用格式为: [X,Y]=fplot(‘fun’,lims) fun:函数名字符串; lims:定义 x 的取值区间,lims=[xmin,xmax]; 二维函数曲线专用命令 ezplot 45
  • 46. Lecture 3 Matlab图形可视化2.线型和颜色 plot 函数可以设置曲线的线段类型、定点标记和线段颜色。 常用的线段、颜色与定点标记参数 46
  • 47. 调用格式:plot(x,y,s) ,s 为类型说明参数,是字符串。 s 字符串可以是三种类型的符号之一,也可以是线型与颜色和定点标记与颜色的组合; 如果没有 s 参数,plot 将使用缺省设置(实线,前七种颜色顺序着色)绘制曲线; 在当前坐标系中绘图时,每调入一次绘图函数,MATLAB将擦掉坐标系中已有的图形对象。可以用 hold on 命令在一个坐标系中增加新的图形对象。注意MATLAB会根据新图形的大小,重新改变坐标系的比例。 用不同的线型和标注来绘制两条曲线。 t1=0:0.1:2*pi; t2=0:0.1:6; y1=sin(t1); y2=sqrt(t2); plot(t1,y1,':hb',t2,y2,'--g') Lecture 3 Matlab图形可视化47
  • 48. Lecture 3 Matlab图形可视化3. 图形窗口的分割 有时需要在一个图形窗口中显示几幅图,以便对几个函数进行直观、便捷的比较。由于每个绘图命令在绘制数据图像时都会将已有图形覆盖掉,而用 hold 命令不能实现同时显示几个不同坐标尺寸下的图形,用 figure 命令再创窗口又很难同时比较由不同的数据绘得的图像。 实现在同一个窗口中同时显示多个图像的命令subplot。 使用格式为: subplot(m,n,i) 其含义为 :把图形窗口分割为 m 行 n 列子窗口,然后选定第 i 个窗口为当前窗口。 subplot 命令不仅用于二维图形,对三维图形一样适用。其本质是将 figure 窗口分为几个区域,再在每个区域内分别绘图。48
  • 49. Lecture 3 Matlab图形可视化用 subplot 函数把两种不同的图形综合在一个图形窗口中。 subplot(2,2,1) t=0.1:0.1:2*pi; y=sin(t); semilogx(t,y) grid on subplot(2,2,2) t=0:0.1:4*pi; y=sin(t); plot(t,y) subplot(2,2,3) x=1:0.01:5; y=exp(x); plotyy(x,y,x,y,’semilogx’,’plot’) subplot(2,2,4) x=1:0.1:10; y=sqrt(x); plot(x,y,’:rd’) 49
  • 50. Lecture 3 Matlab图形可视化4. 坐标系的调整 实现坐标系的调整的命令是 axis 函数。 调用格式为: axis([xmin,xmax,ymin,ymax,zmin,zmax]) 坐标的最小值( xmin,ymin,zmin)必须小于相应的最大值( xmax,ymax,zmax),否则会出错。 自动坐标系与用 axis 函数调整后的坐标系的比较。 subplot(2,1,1) t=0:0.1:4*pi; y=sin(t); plot(t,y) subplot(2,1,2) t=0:0.1:4*pi; y=sin(t); plot(t,y) axis([0,max(t),min(y),max(y)]) 50
  • 51. Lecture 3 Matlab图形可视化B、三维绘图 1. 三维曲线绘图命令 三维函数 plot3主要用来表现单参数的三维曲线,与二维绘图函数 plot 相比,只多了第三维数据。 其调用格式为: plot3(X1,Y1,Z1,s1,X2,Y2,Z2,s2,…) 参数的含义如下: Xn、Yn、Zn:第一到三维数据,是尺寸相等的向量/矩阵; s、s1、s2:是字符串,用来设置线型、颜色、数据点标记。 51
  • 52. Lecture 3 Matlab图形可视化x、y、z 是向量时,plot3 命令的使用 t=0:0.1:8*pi; plot3(sin(t),cos(t),t) title(’绘制螺旋线’) %用命令 title 对图形主题进行标注 xlabel(’sin(t)’,’FontWeight’,’bold’,’FontAngle’,’italic’) ylabel(’cos(t)’,’FontWeight’,’bold’,’FontAngle’,’italic’) zlabel(’t’,’FontWeight’,’bold’,’FontAngle’,’italic’) %命令 zlabel 用来指定 z 轴的数据名称 grid on x、y、z 都是矩阵时,plot3 命令的使用 [X,Y]=meshgrid(-pi:0.1:pi); Z=sin(X)+cos(Y); plot3(X,Y,Z) 52
  • 53. Lecture 3 Matlab图形可视化2.三维曲面绘图命令 为了绘制定义在平面区域 D =[x0,xm]×[y0,yn ]上的三维曲面z=f(x,y) ,首先将[x0,xm]在 x 方向分成 m 份,将[y0,yn]在 y 方向分成 n 份,由各划点分别作平行于坐标轴的直线,将区域 D 分成 m×n 个小矩形;对于每个小矩形,计算出网格点的函数值,决定出空间中四个顶点( xi,yi,f(xi,yi)),连接四个顶点得到一个空间的四边形片;所有四边形片连在一起构成函数 z=f(x,y)定义在区域 D 上的空间网格曲面。 因此,三维曲面绘图命令可分为平面网格点的生成、在平面网格基础上绘制三维网格及对三维表面进行处理三个步骤。53
  • 54. a.平面网格点的生成 函数命令meshgrid 用来生成 x-y 平面上的网格点矩阵。 调用形式为: [X,Y]=meshgrid(x,y) [X,Y]=meshgrid(x) 等价于[X,Y]=meshgrid(x,x) 参数含义如下: x:是区间[x0,xm]上分划的向量; y:是区间[y0,yn]上分划的向量; X,Y:输出变量矩阵,矩阵 X 的行向量都是向量 x,矩阵 Y 的列向量都是向量 y。 函数 meshgrid 将由两个向量决定的区域转换为对应的网格点矩阵。Lecture 3 Matlab图形可视化54
  • 55. Lecture 3 Matlab图形可视化函数 ,定义区域为[-2,2]×[-2,2]。生成网格并计算其网格点上的函数值。 [X,Y] = meshgrid(-2:2:2, -2:2:2); [X,Y] %将划分结果输出至矩阵 ans = -2 0 2 -2 -2 -2 -2 0 2 0 0 0 -2 0 2 2 2 2 Z = X .* exp(-X.^2 - Y.^2); %计算网格点上的函数值赋予变量 Z Z = -0.0007 0 0.0007 -0.0366 0 0.0366 -0.0007 0 0.000755
  • 56. Lecture 3 Matlab图形可视化b.三维网格命令 mesh 利用函数mesh生成网格曲面。 调用格式为: mesh(X,Y,Z,C):X、Y、Z、C 是同维数的矩阵,X、Y、Z 对应空间上的网格点,网格线颜色由C决定; mesh(X,Y,Z):相当于上面的 C=Z 的情况; mesh(x,y,Z,C):x 和 y 是向量,Z 和 C 是同维数的矩阵,网格曲面的网格顶点是( x(j),y(i),Z(i,j)),网格线的颜色由矩阵 C 决定; mesh(x,y,Z):相当于上面的 C=Z 的情况; mesh(Z,C):等价于 mesh(x,y,Z,C),此时向量x=1:n,向量 y=1:m; mesh(Z):相当于上面的 C=Z 的情况 mesh(...,’PropertyName’,PropertyValue,...):给函mesh设置曲面属性。56
  • 57. Lecture 3 Matlab图形可视化用 mesh 命令绘制上例中的网格曲面。 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.^2 - Y.^2); mesh(Z) 与 mesh 相关的另外两个函数是 meshc 和 meshz,它们的调用形式与 mesh 相同。57
  • 58. Lecture 3 Matlab图形可视化c. 三维表面命令 surf 函数 surf 可实现对网格曲面片进行着色,将网格曲面转化为实曲面。surf 命令的调用格式与 mesh 相同。 利用三维网格表面命令 surf 绘制图形。 z=peaks; %绘制山峰的图像,将函数值赋予变量z surf(z) %对山峰的图像进行着色处理 shading interp %函数 shading 改变着色方式 58
  • 59. Lecture 3 Matlab图形可视化 3.等高线图形的绘制 4.三维视图可视效果的控制 5.柱面和球面的三维表达(<高数>书) 59
  • 60. Lecture 3 Matlab图形可视化a.柱面的表达cylinder cylinder命令中,柱面的轴线定义为 z 轴,只要给出母线的描述就可完成一个柱面。 调用格式为: [X,Y,Z] = cylinder(R,N); [X,Y,Z] = cylinder(R):缺省值 N=20; [X,Y,Z] = cylinder:缺省值 N=20,R=[1,1]。 R:是一描述柱面母线的向量; N:是旋转柱面上的分割线条数; [X,Y,Z] :是返回的x,y,z坐标向量。 绘制一个柱面。 t=pi:0.01:3*pi; r=sin(t)+t; cylinder(r,30) shading interp60
  • 61. Lecture 3 Matlab图形可视化 b.球面的表达sphere 调用格式为: [X,Y,Z]=sphere(N):产生一个( N+1)×( N+1)的矩阵,然后用函数 surf 命令绘制一个单位的球面,N 为设置分割线的条数; [X,Y,Z] = sphere:缺省 值 N = 20。 画一个球面。 [X,Y,Z]=sphere; surf(X,Y,Z)61
  • 62. Lecture 3 Matlab图形可视化四、特殊图形绘制 为了将抽象的数据表达得更形象,除了绘制二维、三维图形外,还要用到直方图、面积图、饼图等特殊图形。特殊图形指令 62
  • 63. Lecture 3 Matlab图形可视化 1.面积图命令 area 表现各个不同部分对整体所作的贡献 area(X,Y):与 plot 的命令的使用方法相似,将连线图到 x 轴的那部分填上了颜色; area(Y):缺省值 X=1:SIZE(Y); area(X,Y,LEVEL)或 area(Y,LEVEL):填色部分为由连线图到 y=level 的水平线之间的部分。 绘制一面积图 X=-2:2; Y=[3,5,2,4,1;5,4,2,3,5;3,4,5,2,1]; area(X',Y') legend('因素 1','因素 2','因素 3') grid on63
  • 64. Lecture 3 Matlab图形可视化2.直方图命令 bar 直方图常用于统计数据的作图, 有bar、bar3、barh 和 bar3h几种函数,其调用格式类似。 以函数 bar 为例: bar(X,Y):X 是横坐标向量,Y 可以是向量或矩阵。Y 是向量时,每一个元素对应一个竖条;Y 是 m 行 n 列矩阵时,将画出 m 组竖条,每组包括 n 个竖条; bar(Y):横坐标使用缺省值 X=1:M; bar(X,Y,WIDTH) 或 bar(Y,WIDTH):用 WIDTH 指定竖条的宽度,如果 WIDTH>1,条与条之间将重合。缺省宽度为 0.8; bar(...,’grouped’):产生缺省的组合直方图; bar(...,’stacked’):产生累积的直方图; bar(...,linespec):指定条的颜色; H = bar(...):返回条形图对象的句柄。 64
  • 65. Lecture 3 Matlab图形可视化 用绘制直方图的几种命令绘制直方图。 X=-2:2; Y=[3,5,2,4,1;5,4,2,3,5;3,4,5,2,1]; subplot(2,2,1) bar(X,Y','r') xlabel('x') ylabel('y') colormap(cool) subplot(2,2,2) barh(X,Y','grouped') xlabel('y') ylabel('x') colormap(cool) subplot(2,2,3) bar(X,Y','stacked') xlabel('x') ylabel('\Sigma y') colormap(summer) subplot(2,2,4) barh(X,Y','stacked') xlabel('y');ylabel('\Sigma x') colormap(summer)65
  • 66. Lecture 3 Matlab图形可视化 绘制三维直方图。 X=-2:2; Y=[3,5,2,4,1;5,4,2,3,5;3,4,5,2,1]; subplot(2,2,1) bar3(X,Y','r') zlabel('y') ylabel('x') colormap(cool) subplot(2,2,2) bar3h(X,Y','grouped') ylabel('x') zlabel('y') colormap(cool) subplot(2,2,3) bar3(X,Y','stacked') ylabel('x') zlabel('\Sigma y') colormap(summer) subplot(2,2,4) bar3h(X,Y’,’stacked’) zlabel(’x’) ylabel(’\Sigma y’) colormap(summer)66
  • 67. Lecture 3 Matlab图形可视化 3.饼图命令 pie 饼图又叫扇形图,用于显示向量中元素所占向量元素总和的百分比。 pie 和 pie3分别用于绘制二维和三维饼图。 调用格式: pie(X):向量 X 的饼图。把 X 的每一个元素在所有元素总和中占的比例表达出来; pie(X,EXPLODE):向量EXPLODE(和向量X长度相等)用于指定饼图中抽出一部分的块(非零值对应的块); pie(...,LABELS):LABELS 是用于标注饼图的字符串数组,其长度必须和向量 X相等; H = pie(...):返回包括饼图和文本对象句柄。 67
  • 68. 用函数 pie 和 pie3 绘制饼图。 x=[200,360,120,400,320]; subplot(2,2,1), pie(x,[0 0 0 1 0]) subplot(2,2,2), pie3(x,[0 0 0 1 0]) subplot(2,2,3), pie(x(2:5)) subplot(2,2,4), x=[0.1,0.12,0.21,0.34,0.11]; pie3(x ,{'A','B','C','D','E'})Lecture 3 Matlab图形可视化 68
  • 69. Lecture 3 Matlab图形可视化 五、极坐标、柱坐标和球坐标系下绘制图形 1.极坐标系下绘制图形 ploar是直接在极坐标系下绘图的命令 调用格式为: ploar(THETA, RHO,S) 其中 S 是字符串,用来控制图形的线型。 绘制半径为 2 的渐开线。 rhe=2; theta=0:pi/20:4*pi; rho=rhe+theta*rhe; polar(theta,rho,'r') 69
  • 70. Lecture 3 Matlab图形可视化 六、坐标轴的调整和图形的标注 1.坐标轴调整命令70
  • 71. Lecture 3 Matlab图形可视化 2.图形标注 坐标轴和图形标题标注 标注坐标轴 x、y 和 z 的命令函数为 xlabel、ylabel 和 zlabel ,调用格式为: xlabel(’text’) xlabel(’text’,’Property1’,PropertyValue1,’Property2’,PropertyValue2,...) H = xlabel(...) 返回坐标轴标注的句柄。 其中,’text’是要添加的标注文本。’Property’是文本的属性名,’PropertyValue’是属性值(所用字体、大小、标注角度等)。 图形加标题的函数为 title,其调用格式与坐标轴标注类似。71
  • 72. Lecture 3 Matlab图形可视化 b. 图例的标注 legend命令实现不同图例的说明。其调用格式为: legend(string1,string2,string3, ...) legend(string1,string2,string3,...,Pos) 按顺序把字符串添加到相应的曲线线型符号之后;Pos对图例的位置作出设置和调整: 0 = 自动把图例置于最佳位置( 和图中曲线重复最少); 1 = 置于图形窗口的右上角( 缺省值); 2 = 置于图形窗口的左上角; 3 = 置于图形窗口的左下角; 4 = 置于图形窗口的右下角; -1 = 置于图形窗口的右侧( 外部)。 72
  • 73. 3. 控制分格线 对二维和三维图形都适用。 有三种用法: grid on:打开分格线控制开关,以后绘制的图形都带有分格线; grid off:关闭分格线控制开关,以后绘制的图形都不带分格线; grid:用于实现分格线绘制切换。Lecture 3 Matlab图形可视化 73
  • 74. Lecture 3 Matlab图形可视化 绘制图形,并用函数 xlabel、title 和 legend 命令进行标注。 t=0:0.1:4*pi; y=sin(t); y1=cos(t); plot(t,y,':',t,y1,'r*') xlabel('x 轴 (0--4\pi)','fontsize',12,'fontweight','bold') ylabel('y 轴','fontsize',12,'fontweight','bold') title('绘制正弦波和余弦波 Pos=1','fontsize',10,'fontweight','bold','fontangle','italic') text(pi,0,'\leftarrowsin(\pi)=0') text(pi,-1,'\leftarrowcos(\pi)=-1') text(pi/2,0.9,['\uparrowsin(\pi/2)=',num2str(sin(pi/2))]) text(0,-0.6,['绘图日期:',date]) text(0,-0.8,['MATLAB 版本:',version]) legend('正弦波','余弦波') figure(2) plot(t,y,':',t,y1,'r*') title('绘制正弦波和余弦波 Pos=0','fontsize',10,'fontweight','bold','fontangle','italic') legend('正弦波','余弦波',0) grid on figure(3) plot(t,y,':',t,y1,'r*') title('绘制正弦波和余弦波 Pos=-1','fontsize',10,'fontweight','bold','fontangle','italic') 74
  • 75. Lecture 3 Matlab图形可视化 text(7*pi/2,0,'\rightarrowcos(\pi*7/2)=0') legend('正弦波','余弦波',-1) grid off75
  • 76. Lecture 4 MATLAB符号运算 (Symbolic)76
  • 77. MATLAB Matlab 符号运算77
  • 78. Matlab 符号运算介绍 Matlab 符号运算是通过符号数学工具箱(Symbolic Math Toolbox)来实现的。Matlab 符号数学工具箱是建立在功能强大的 Maple 软件的基础上的,当 Matlab 进行符号运算时,它就请求 Maple 软件去计算并将结果返回给 Matlab。 Matlab 的符号数学工具箱可以完成几乎所有得符号运算功能。主要包括:符号表达式的运算,符号表达式的复合、化简,符号矩阵的运算,符号微积分、符号作图,符号代数方程求解,符号微分方程求解等。此外,该工具箱还支持可变精度运算,即支持以指定的精度返回结果。 78
  • 79. Matlab 符号运算特点 计算以推理方式进行,因此不受计算误差累积所带来的困扰。 符号计算指令的调用比较简单,与数学教科书上的公式相近。 符号计算可以给出完全正确的封闭解,或任意精度的数值解(封闭解不存在时)。 符号计算所需的运行时间相对较长。79
  • 80. Matlab 符号运算举例 求一元二次方程 ax2 + bx + c = 0 的根 >> solve('a*x^2+b*x+c=0') 求的根 f (x) = (cos x)2 的一次导数>> x=sym('x'); >> diff(cos(x)^2) 计算 f (x) = x2 在区间 [a, b] 上的定积分>> syms a b x; >> int(x^2,a,b)80
  • 81. 在进行符号运算时,必须先定义基本的符号对象,可以是符号常量、符号变量、符号表达式等。符号对象是一种数据结构。符号对象与符号表达式 含有符号对象的表达式称为符号表达式,Matlab 在内部把符号表达式表示成字符串,以与数字变量或运算相区别。 符号矩阵/数组:元素为符号表达式的矩阵/数组。81
  • 82. sym 函数用来建立单个符号变量,一般调用格式为: 符号对象的建立:sym 和 syms符号对象的建立例:>> a=sym('a') 符号变量 = sym(A)参数 A 可以是一个数或数值矩阵,也可以是字符串a 是符号变量b 是符号常量>> b=sym(1/3)C 是符号矩阵>> C=sym('[1 ab; c d]')82
  • 83. 符号对象的建立:sym 和 syms符号对象的建立 syms 命令用来建立多个符号变量,一般调用格式为:syms 符号变量1 符号变量2 ... 符号变量n 例:>> syms a b c>> a=sym('a'); >> b=sym('b'); >> c=sym('c');83
  • 84. 符号表达式的建立:例:建立符号表达式通常有以下2种方法: (1) 用 sym 函数直接建立符号表达式。 (2) 使用已经定义的符号变量组成符号表达式。>> y=sym('sin(x)+cos(x)')>> x=sym('x'); >> y=sin(x)+cos(x)符号表达式的建立>> syms x; >> y=sin(x)+cos(x)84
  • 85. Matlab 符号运算采用的运算符和基本函数,在形状、名称和使用上,都与数值计算中的运算符和基本函数完全相同符号对象的基本运算 基本运算符 普通运算:+ - * \ / ^ 数组运算:.* .\ ./ .^ 矩阵转置:' .'例:>> X=sym('[x11,x12;x21,x22;x31,x32]'); >> Y=sym('[y11,y12,y13;y21,y22,y23]'); >> Z1=X*Y; Z2=X'.*Y;85
  • 86. 符号对象的基本运算sin、cos、tan、cot、sec、csc、…asin、acos、atan、acot、asec、acsc、…exp、log、log2、log10、sqrtabs、conj、real、imagrank、det、inv、eig、lu、qr、svddiag、triu、tril、expm三角函数与反三角函数、指数函数、对数函数等 基本函数86
  • 87. 查找符号表达式中的符号变量若表达式中有两个符号变量与 x 的距离相等, 则ASCII 码大者优先。查找符号变量findsym(expr) 按字母顺序列出符号表达式 expr 中的所有符号变量findsym(expr, N) 按顺序列出 expr 中离 x 最近的 N 个符号变量常量 pi, i, j 不作为符号变量87
  • 88. 例:>> f=sym('2*w-3*y+z^2+5*a') >> findsym(f)>> findsym(f,3)>> findsym(f,1)findsym 举例88
  • 89. 符号表达式的替换subs(f,x,a) 用 a 替换字符函数 f 中的字符变量 x a 是可以是 数/数值变量/表达式 或 字符变量/表达式若 x 是一个由多个字符变量组成的数组或矩阵, 则 a 应该具有与 x 相同的形状的数组或矩阵。 用给定的数据替换符号表达式中的指定的符号变量89
  • 90. subs 举例>> f=sym('2*u'); >> subs(f,'u',2) >> f2=subs(f,'u','u+2') >> a=3; >> subs(f2,'u',a+2) >> subs(f2,'u','a+2') >> syms x y >> f3=subs(f,'u',x+y) >> subs(f3,[x,y],[1,2])ans=4f2=2*(u+2)ans=14ans=2*((a+2)+2)f3=2*x+2*yans=6 例:指出下面各条语句的输出结果f=2*u90
  • 91. 符号矩阵>> A=sym('[1+x, sin(x); 5, exp(x)]') 使用 sym 函数直接生成 将数值矩阵转化成符号矩阵 符号矩阵中元素的引用和修改>> B=[2/3, sqrt(2); 5.2, log(3)]; >> C=sym(B)>> A=sym('[1+x, sin(x); 5, exp(x)]'); >> A(1,2) % 引用 >> A(2,2)=sym('cos(x)') % 重新赋值91
  • 92. 六类常见符号运算 因式分解、展开、合并、简化及通分等 计算极限 计算导数 计算积分 符号求和 代数方程和微分方程求解92
  • 93. 因式分解 因式分解factor(f)>> syms x; f=x^6+1; >> factor(f) factor 也可用于正整数的分解>> s=factor(100)>> factor(sym('12345678901234567890')) 大整数的分解要转化成符号常量93
  • 94. 函数展开 函数展开expand(f)>> syms x; f=(x+1)^6; >> expand(f) 多项式展开 三角函数展开>> syms x y; f=sin(x+y); >> expand(f)94
  • 95. 合并同类项 合并同类项collect(f,v): 按指定变量 v 进行合并 collect(f): 按默认变量进行合并>> syms x y; >> f= x^2*y + y*x - x^2 + 2*x ; >> collect(f) >> collect(f,y)95
  • 96. 函数简化 函数简化y=simple(f): 对 f 尝试多种不同的算法进行简化,返回其中最简短的形式[How,y]=simple(f): y 为 f 的最简短形式,How 中记录的为简化过程中使用的方法。fRHOW2*cos(x)^2-sin(x)^23*cos(x)^2-1simplify(x+1)*x*(x-1)x^3-xcombine(trig)x^3+3*x^2+3*x+1(x+1)^3factorcos(3*acos(x))4*x^3-3*xexpand96
  • 97. 函数简化 函数简化y=simplify(f): 对 f 进行简化>> syms x; f=sin(x)^2 + cos(x)^2 ; >> simplify(f)>> syms c alpha beta; >> f=exp(c*log(sqrt(alpha+beta))); >> simplify(f)97
  • 98. 函数简化举例>> syms x; >> f=(1/x^3+6/x^2+12/x+8)^(1/3); >> y1=simplify(f) >> g1=simple(f)>> g2=simple(g1) 多次使用 simple 可以达到最简表达。例:简化98
  • 99. 分式通分 函数简化[N,D]=numden(f): N 为通分后的分子,D 为通分后的分母>> syms x y; >> f=x/y+y/x; >> [N,D]=numden(f)>> [n,d]=numden(sym(112/1024))99
  • 100. horner 多项式 horner 多项式:嵌套形式的多项式>> syms x; >> f=x^4+2*x^3+4*x^2+x+1; >> g=horner(f)例:100
  • 101. 计算极限limit(f,x,a): 计算 limit(f,a): 当默认变量趋向于 a 时的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,'right'): 计算右极限 limit(f,x,a,'left'): 计算左极限例:计算 ,>> syms x h n; >> L=limit((log(x+h)-log(x))/h,h,0) >> M=limit((1-x/n)^n,n,inf)101
  • 102. 计算导数g=diff(f,v):求符号表达式 f 关于 v 的导数 g=diff(f):求符号表达式 f 关于默认变量的导数 g=diff(f,v,n):求 f 关于 v 的 n 阶导数 diff>> syms x; >> f=sin(x)+3*x^2; >> g=diff(f,x)102
  • 103. 计算积分int(f,v,a,b): 计算定积分 int(f,a,b): 计算关于默认变量的定积分 int(f,v): 计算不定积分 int(f): 计算关于默认变量的不定积分>> syms x; f=(x^2+1)/(x^2-2*x+2)^2; >> I=int(f,x) >> K=int(exp(-x^2),x,0,inf)例:计算 和103
  • 104. 符号求和>> syms n; f=1/n^2; >> S=symsum(f,n,1,inf) >> S100=symsum(f,n,1,100)symsum(f,v,a,b): 求和 symsum(f,a,b): 关于默认变量求和 例:计算级数 及其前100项的部分和例:计算函数级数>> syms n x; f=x/n^2; >> S=symsum(f,n,1,inf)104
  • 105. 代数方程求解solve(f,v):求方程关于指定自变量的解,f 可以是用字符串表示的方程、符号表达式或符号方程; solve 也可解方程组(包含非线性); 得不到解析解时,给出数值解。105
  • 106. 微分方程求解 dsolvey=dsolve('eq1','eq2', ... ,'cond1','cond2', ... ,'v')其中 y 为输出的解, eq1、eq2、. . . 为微分方程, cond1、cond2、...为初值条件, v 为自变量例 1:求微分方程 的通解,并验证。>> y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') >> syms x; diff(y)+2*x*y - x*exp(-x^2)106
  • 107. 微分方程求解 几点说明 如果省略初值条件,则表示求通解; 如果省略自变量,则默认自变量为 t dsolve('Dy=2*x','x'); % dy/dx = 2x dsolve('Dy=2*x'); % dy/dt = 2x 若找不到解析解,则返回其积分形式。 微分方程中用 D 表示对 自变量 的导数,如:Dy y'; D2y y''; D3y y'''107
  • 108. 微分方程求解例 2:求微分方程 满足初值条件 的特解,并画出解函数的图形。>> y=dsolve('x*Dy+y-exp(x)=0', ... 'y(1)=2*exp(1)', 'x') >> ezplot(y);108
  • 109. 微分方程求解例3:求微分方程组 在初值条件 下的特解,并画出解函数的图形。[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0', ... 'x(0)=1', 'y(0)=0', 't') ezplot(x,y,[0,1.3]);注:解微分方程组时,如果所给的输出个数与方程个数相同,则方程组的解 按词典顺序 输出。109
  • 110. 其它运算 反函数finverse(f,v):求 f 关于指定变量 v 的反函数 finverse(f):求 f 关于默认变量的反函数>> syms x t; f=x^2+2*t; >> g1=finverse(f,x) >> g2=finverse(f,t)例:计算函数 的反函数110
  • 111. Lecture 5 MATLAB程序设计 111
  • 112. 基本要求: (1)学会 Matlab 的M文件的编写方法,包括命令文件和函数文件。了解M件的调试命令和调试方法; (2) 熟练掌握 Matlab 的程序结构(顺序结构、循环结构和分支结构)与流程控制语句 . Outline M-file(M文件); 数据的输入和输出; 程序设计; 函数文件; 全局变量和局部变量 Lecture5 Matlab语言程序设计 112
  • 113. MATLAB有两种工作方式: 交互式的命令行工作方式 M文件的程序工作方式113
  • 114. 一. M文件114
  • 115. 一. M文件用MATLAB语言编写的程序,称为M文件。 M文件有两类:命令文件和函数文件。 命令文件:没有输入参数,也不返回输出参数。 函数文件:可以输入参数,也可返回输出参数。115
  • 116. 1.M文件的建立与编辑建立新的M文件: 从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令。一. M文件编辑已有的M文件: 从MATLAB命令窗口的Flie菜单中选择Open M-file命令。116
  • 117. 2.命令文件将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。 【例1】 建立一个命令文件将变量a,b的值互换。 一. M文件 a=1:9; b=[11,12,13;14,15,16;17,18,19]; c=a;a=b;b=c; a b 在MATLAB的命令窗口中输入e31,将会执行该命令文件。117
  • 118. 二.数据的输入输出118
  • 119. 1. input函数:用于向计算机输入一个参数。 调用格式: A=input(提示信息,选项); 注:‘s’选项,则允许用户输入一个字符串。 例如想输入一个人的姓名,可采用命令 xm=input('What''s your name:','s') 【例2】 求一元二次方程a2 +bx+c=0的根。二.数据的输入输出 a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)] 将该程序以aa.m文件存盘,然后运行aa.m文件。119
  • 120. 2. pause函数:暂停程序的执行。 调用格式: pause(延迟秒数) 注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。二.数据的输入输出 3. disp函数:命令窗口输出函数。 调用格式: disp(输出项) 注:输出项为字符串或矩阵。 例如 A='Hello,MATLAB'; disp(A) 输出为: Hello,MATLAB120
  • 121. 三.程序设计121
  • 122. 三.程序设计1、程序结构与流程控制语句 a) 顺序结构122
  • 123. b) 条件结构if- else- end 语句三.程序设计 或123
  • 124. 折扣问题 >> book=20; >> number=40; >> sums=0.0; >> if number>=30 sums=book*number*0.7; end >> sums sums = 560 绘出函数 的图像。 >> x=-3:0.1:3; >> if x>=1 y=2*x.^2+1; plot(x,y) elseif -1
  • 125. switch语句三.程序设计125
  • 126. (一)选择结构选择结构的语句有if语句和switch语句。 1. if语句 格式一: if 条件 语句组 end三.程序设计格式二: if 条件 语句组1 else 语句组2 end126
  • 127. (一)选择结构格式三: if 条件1 语句组1 elseif 条件2 语句组2 …… elseif 条件m 语句组m else 语句组m+1 end三.程序设计127
  • 128. 【例4】 输入三角形的三条边,求面积。 A=input('请输入三角形的三条边:'); if A(1)+A(2)>A(3) & A(1)+A(3)>A(2) & A(2)+A(3)>A(1) p=(A(1)+A(2)+A(3))/2; s=sqrt(p*(p-A(1))*(p-A(2))*(p-A(3))); disp(s); else disp('不能构成一个三角形。') end 运行: 请输入三角形的三条边:[4 5 6] 9.9216 三.程序设计(一)选择结构128
  • 129. 【例5】 输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。c=input('','s'); if c>='A' & c<='Z' disp(setstr(abs(c)+1)); elseif c>='a'& c<='z' disp(setstr(abs(c)-1)); else disp(c); end三.程序设计(一)选择结构129
  • 130. 2 switch语句switch语句根据变量或表达式的取值不同,分别执行不同的语句。其格式为: switch 表达式 case 值1 语句组1 case 值2语句组2 …… case 值m 语句组m otherwise 语句组m+1 end三.程序设计(一)选择结构130
  • 131. 【例6】 根据变量 num 的值来决定显示的内容。 num=input('请输入一个数'); switch num case -1 disp('I am a teacher.'); case 0 disp('I am a student.'); case 1 disp('You are a teacher.'); otherwise disp('You are a student.'); end 三.程序设计(一)选择结构131
  • 132. 三.程序设计多项选择>> No=input('Please input your choice! '); Please input your choice! 1 >> switch No case 0 disp('return to main menu'); case 1 disp('She is a girl'); case 2 disp('He is a boy'); otherwise disp('I can''t determine') end She is a girl132
  • 133. c) 循环结构while 语句:for语句:for 变量=初值:增量:结束值 程序模块; end三.程序设计133
  • 134. >> sum=0; >> i=0; >> while(i<=100) sum=sum+1; i=i+1; end >> sum sum = 14196774举例:三.程序设计>> for I=1:10 A(I)=1/(I+1) ; end >> A A = Columns 1 through 7 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 Columns 8 through 10 0.1111 0.1000 0.0909134
  • 135. break语句循环结构continue 语句循环结构三.程序设计d) 其它与流程控制有关的语句ifif135
  • 136. (二)循环结构实现循环结构的语句:for语句和while语句。 1. for语句: 格式: for 循环变量=表达式1:表达式2:表达式3 循环体语句 end 注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。三.程序设计136
  • 137. 2. while语句 格式为: while (条件) 循环体语句 end 【例7】 根据例3.6中求y的表达式,求: (1)y<3时的最大n值。 (2)与(1)的n值对应的y值。三.程序设计(二)循环结构137
  • 138. 求y的表达式y=0; i=1; while 1 %循环的条件为1,即循环条件总是满足的,这是一个永真循环 f=1/(2*i-1); y=y+f; if y>3 break; end i=i+1; end n=i-1 y=y-f 三.程序设计(二)循环结构138
  • 139. 3. 循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。 多重循环的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。 三.程序设计(二)循环结构139
  • 140. 【例8】 求[100,1000]以内的全部素数。 n=0; for m=100:1000 flag=1; j=m-1; i=2; while i<=j & flag if rem(m,i)==0 flag=0; end i=i+1; end if flag n=n+1; prime(n)=m; end end prime %变量prime存放素数 三.程序设计(二)循环结构140
  • 141. pause 指令使程序运行停止,等待用户按任意键继续; input 指令提示用户从键盘输入数值、字符串或表达式,并接受输入; disp指令在屏幕上显示字符串; echo on指令显示其后所有执行文件的指令; echo off指令关闭其后所有执行文件的指令显示。三.程序设计141
  • 142. 四.函数文件142
  • 143. 函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。四. 函数文件1.函数文件格式函数文件由function语句引导,其格式为: function 输出形参表=函数名(输入形参表) 注释说明部分 函数体 注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。143
  • 144. 【例9】 编写函数文件求小于任意自然数n的Fibonacci数列各项。 function f=ffib(n) %用于求Fibonacci数列的函数文件 %f=ffib(n) %1999年9月30日编 f=[1,1]; i=1; while f(i)+f(i+1)
  • 145. 2.函数调用 函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。 函数调用的一般格式是: [输出实参表]=函数名(输入实参表)四. 函数文件145
  • 146. 【例10】 利用函数文件,实现直角坐标(x,y)与极坐标(γ,θ)之间的转换。函数文件tran.m: function [gama,theta]=tran(x,y) gama=sqrt(x*x+y*y); theta=atan(y/x); 调用tran.m的命令文件main1.m: x=input('Please input x=:'); y=input('Please input y=:'); [gam,the]=tran(x,y); gam the已知转换公式为: 极坐标的矢径:γ= 极坐标的幅角:θ= 四. 函数文件146
  • 147. 【例11】 利用函数的递归调用,求n!。 function f=factor(n) if n<=1 f=1; else f=factor(n-1)*n; end return; %返回 在命令文件main2.m中调用函数文件factor.m: for i=1:10 fac(i)=factor(i); end fac程序运行结果是: fac = Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10 504 40320 362880 3628800 四. 函数文件147
  • 148. 3 .函数所传递参数的可调性MATLAB在函数调用上有一个与众不同之处:函数所传递参数数目的可调性。凭借这一点,一个函数可完成多种功能。 在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。四. 函数文件148
  • 149. 【例12】 nargin用法示例函数文件examp.m: function fout=charray(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; elseif nargin==3 fout=(a*b*c)/2; end命令文件mydemo.m: x=[1:3];y=[1;2;3]; examp(x) examp(x,y') examp(x,y,3)执行mydemo.m后的输出是: ans = 1 2 3 ans = 2 4 6 ans = 21四. 函数文件149
  • 150. 五.全局变量和局部变量150
  • 151. 在MATLAB中,全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。四. 函数文件151
  • 152. 四. 函数文件【例13】 全局变量应用示例先建立函数文件wadd.m,该函数将输入的参数加权相加。 function f=wadd(x,y) %add two variable global ALPHA BETA f=ALPHA*x+BETA*y;在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2) 输出为: s = 5152
  • 153. Lecture 6 Linear Algebra with MATLAB 线性变换及其特征(MATLAB)153
  • 154. 线性代数很抽象吗? 你应该感到它的概念都以形象作基础。 线性代数很冗繁吗? 你应该懂得它的计算全有简明的程序。 线性代数很枯燥吗? 你应该发现它的应用极其精彩而广泛。 通过的主要方法是利用软件工具的空间绘图能力、快捷计算能力和大量工程问题的解,建立学习线性代数的目标和热情。 Linear Algebra with Applications using MATLAB154
  • 155. Lecture 6 Linear Algebra with MATLAB 1 平面上线性变换的几何意义 2 二维矩阵特征值的几何意义 155
  • 156. 1 平面上线性变换的几何意义 例1 设x为二维平面上第一象限中的一个单位方块,其四个顶点的数据可写成 把不同的A矩阵作用于此组数据,可以得到多种多样的结果yi=Ai*x。用程序实现变换计算,并画出x及yi图形: x[0,1,1,0;0,0,1,1]; subplot(2,3,1), fill([x(1,:),0],[x(2,:),0],'r') A1[1,0;0,1], y1A1*x subplot(2,3,2), fill([y1(1,:),0],[y1(2,:),0],'g') …156
  • 157. 157
  • 158. 几种变换的行列式与特征值158
  • 159. 看出的基本关系可以看出,矩阵A1使原图对纵轴生成镜像,矩阵A2使原图在横轴方向膨胀,矩阵A3使原图在纵轴方向压缩,矩阵A4使原图向右方剪切变形,矩阵A5使原图沿反时针方向旋转tpi/6。分别计算出这五个矩阵的行列式和特征值; 对二维空间(平面),一个变换所造成的图形的面积变化,取决于该变换的行列式。A1,A4和A5的行列式绝对值都是1,所以它们不会使变换后图形的面积发生改变。而A2和A3的行列式分别为1.5和0.2, 159
  • 160. 2 二维矩阵特征值的几何意义 二维矩阵的特征值表示该变换在原图形的特征向量的方向上的放大量。 例如矩阵A1在第一特征向量 方向的特征值为 ,即横轴 正方向的增益为1,其结果是把原图中横轴正方向的部分变换到新图的负方向去了; A1在第二特征向量 的方向的特征值为λ1(2)=1, 即纵轴正方向的增益为1,因而保持了新图和原图在纵轴方向尺度不变。 160
  • 161. 用eigshow函数看特征值对于比较复杂的情况,完全凭简单的几何关系去想像是困难的,应当用eigshow函数,联系x和Ax的向量图来思考。 键入eigshow(A4) 。绿色的x表示原坐标系中的单位向量,可以用鼠标左键点住x并拖动它围绕原点转动。图中同时出现以蓝色表示的Ax向量,它表示变换后的新向量。当两个向量处在同一条直线上时(包括同向和反向),表示两者相位相同,只存在一个(可正可负的)实数乘子λ, Axλx 161
  • 162. Eigshow(A4)产生的图形162
  • 163. eigshow([1,2; 2,2])的图形163
  • 164. A是对称实矩阵的情况特别要注意A是对称实矩阵的情况,所谓对称矩阵是满足ATA的矩阵。 对22矩阵,只要求A(1,2)A(2,1)。例如令,A=[1,2;2,2] 再键入eigshow(A), 这时的特点是:Axλx出现在Ax椭圆轨迹的主轴上,所以两个特征值分别对应于单位圆映射的椭圆轨迹的长轴和短轴。此时A的特征值为 -0.5616和 3.5616,可以和图形对照起来看。 (注意:对称实矩阵,一般矩阵也是这个意义吗? why?)164
  • 165. 例:斜体字的生成(wzs091224.m)数据矩阵 表示英文大写空心字母N的各个节点 (1)用plot语句在子图1中画出其形状; (2)取 作为变换矩阵对x进行变换, 并在子图2中画出其图形; 画图的要点是要在给定的数据右方,补上第一点的坐标,使画出的图形封闭。 165
  • 166. 程序与图形结果 x0[0,0.5,0.5,6,6,5.5,5.5,0;0,0,6.42,0,8,8,1.58,8]; x[x0,x0(:,1)]; % 把首顶点坐标补到末顶点后 A[1,0.25;0,1]; yA*x; subplot(1,2,1),plot(x(1,:),x(2,:)) subplot(1,2,2),plot(y(1,:),y(2,:)) 画出的两个图形如右:166
  • 167. 线性代数模型举例 (略) 167
  • 168. 1 刚体平面运动描述 设三角形的三个顶点坐标为(1,1),(1,1),(0,2),今要使它旋转30度,右移2,上移3,以试设计变换矩阵A,并画出变换前后的图形。 解:程序的要点是: 1。列出三角形的数据矩阵 2。扩展为齐次坐标(第三行加1) 3。平移和转动变换矩阵也 要用三维的变换矩阵 4。按变换次序左乘 5。绘图168
  • 169. 2 空间线性变换的几何意义 三维空间线性变换最直接的几何意义和应用价值可以从飞行器的三维转动坐标中得到解释。飞行器在空中可以围绕三个轴旋转。假如它在向北飞行,机头正对北方,则它围绕铅垂轴的旋转角称为偏航角(Yaw),它描述了飞机左右的偏转,用u表示;围绕翼展轴的旋转角称为倾斜角(Pitch),它描述了飞机俯仰姿态,用v表示;围绕机身轴的旋转角称为滚动角(Roll),用w表示;u,v和w三个变量统称为欧拉角,它们完全地描述了飞机的姿态。169
  • 170. 演示程序quatdemo 170
  • 171. 演示画面的说明画面中。左方为飞行器在三维空间中的模型,其中红色的是飞行器。右上方为三个姿态角u,v,w的设定标尺和显示窗,右下方为在地面坐标系中的另外的三个姿态角:方位角、俯仰角和倾侧角。左下方还有【静态】和【动态】两个复选钮,我们只介绍【静态】,读者可自行试用【动态】进行演示。 用键入参数或移动标尺的方法分别给u,v,w赋值并回车后,就可以得出相应的飞行器姿态,同时出现一根蓝色的线表示合成旋转的转轴。171
  • 172. 程序的实现方法 把飞行器的三维图像用N个顶点描述,写成一个3N的数据矩阵G。用plot3命令时按顶点连线能绘制出飞行器的外观。例如以下的程序ag904a即可画出一个最简单的飞行器立体图。 Gw=[4,3,0;4,3,0;0,7,0;4,3,0]'; % 主翼的顶点坐标 Gt=[0,3,0;0,3,3;0,2,0;0,3,0]'; % 尾翼的顶点坐标 G=[Gw,Gt] % 整个飞行器外形的数据集 plot3(Gw(1,:),Gw(2,:),Gw(3,:),'r'),hold on plot3(Gt(1,:),Gt(2,:),Gt(3,:),'g'), axis equal 172
  • 173. 围绕各个轴的旋转变换矩阵飞行器围绕各个轴的旋转的结果,表现为各个顶点坐标发生变化,也就是G的变化。只要把三种姿态的变换矩阵Y,P和R乘以图形数据矩阵G即可。其中173
  • 174. 综合旋转的变换矩阵单独变化某个姿态角所生成的图形由G1Y*G,G2P*G,G3R*G算出,如果同时变化三个姿态角,则最后的图像数据成为GfY*P*R*GQ*G。这里假定转动的次序为:先滚动R,再倾斜P,最后偏航Y,由于矩阵乘法不服从交换律,转动次序不同时结果也不同。 用MATLAB实现的程序ag904b如下: syms u w v Y=[cos(u),sin(u),0;sin(u cos(u),0;0,0,1)] R=[1,0,0;0,cos(w),sin(w);0,sin(w),cos(w)] P=[cos(v),0,sin(v);0,1,0;sin(v),0,cos(v)] Q=Y*P*R 174
  • 175. 空间的齐次坐标系三维空间考虑了平移运动后,如同二维情况那样,也必须扩展一维,成为4N数据集G4,成为空间的齐次坐标系: 在四维空间的44变换矩阵为: 其中c1,c2,c3为在三个轴x1,x2,x3方向上的平移距离。这种方法在机器人运动学研究中很有用处。 175
  • 176. 3 基变换与坐标变换 在线性空间中常常需要进行坐标变换。用下图可以形象地说明这点。按照左图的笛卡儿坐标 ,x向量应该表为(1,6),这是x按标准基[e1,e2]度量的结果,在斜坐标纸上的x点坐标就成为沿b1方向为2个单位而沿b2方向3个单位,即(-2,3)了。这反映了不同的基对坐标值的影响。 176
  • 177. 基坐标变换的公式设线性空间Rn中的两组基向量u 和v都是n维列向量,它们在基准坐标系中的n个分量都是已知的,因此u和v都可表示为nn矩阵。如果Rn中的一个向量w在以u为基的坐标系内的坐标为wu(n1数组),在以v为基的坐标系内的坐标为wv(n1数组),它们在基准坐标系内的坐标应分别为u*wu和v*wv,这两者应该相等。 u* wu v*wv (9.18) 所谓基坐标的变换就是已知wu,求出wv。将上式左右均左乘以inv(v),得到 (9.19) 可见,坐标变换矩阵P可由u和v求得: P(u→v)v \ u (9.20)177
  • 178. 基变换的算例已知R4空间的两组基向量u,v如下: 试求把u变换为v的坐标变换矩阵P(u→v)。 解的方法为:输入u和v矩阵后 键入u\v ,得到 给出某点w的u坐标wu, 即可求其v坐标wv=P*wu178
  • 179. 4 对称矩阵与二次型主轴 对称矩阵的特点是所有元素关于主对角线对称,即A’A。所以对称矩阵一定是方阵。前面曾要求读者特别注意A是对称矩阵时x与Ax的对应关系,其特点就是Ax呈椭圆形状,在椭圆的两个主轴方向,Ax与x在一条直线上长度差λ倍,即Axλx。当Ax与x方向相同时,λ为正数;当Ax与x方向相反时,λ为负数;22变换有两个特征值,在相互正交的两个主轴方向,各有一个λ。 作为22正交变换的一个应用,我们来看看它对二次型图形的影响。二次型本身已经不是线性范围,不属于线性代数的范畴。现在要研究的是基坐标的线性变换对二次型图形发生何种影响。 179
  • 180. 例 二次型例设A=[5,-2;-2,5],则令A的二次型xT*A*x等于常数 得到的是一个椭圆方程,其图形如下图(a)所示。 如果做一个基坐标的旋转变换,让坐标轴转过45度,此椭圆的主轴就与新的坐标方向y1,y2相同,如图(b)所示,即令 y1x1cosθx2sinθ y2x1sinθx2cosθ 用矩阵乘法表为 180
  • 181. 线性变换后的二次型其逆变换R为, 因此 用此变换式代入二次型的表达式,有 本题中,θ=45º,代入P和R,可得 于是得到 181
  • 182. 182
  • 183. 二次型主轴等价于矩阵对角化所以从几何图形上寻找二次型主轴的问题,在线性代数中就等价于使矩阵经过正交变换或相似变换R(注意这又是一个几何名词,说明被变换的图形的形状和尺寸保持不变),使矩阵A对角化。图中的(c)和(d)表示了对另一种双曲线二次型(它的两个特征值一正一负)的坐标变换, 求主轴的方法就是把矩阵A对角化。找其主轴的大小和方向,也就是找它的特征值lamda和特征向量e。 183
  • 184. 双曲线二次型的算例根据 列出程序 A=[1,-4;-4,-5] [lamda,e]=eig(A) % 或R=orth(A) 得到 把两个特征向量e并列起来,即正交矩阵。landa就是对角化的矩阵D,故标准化的二次型方程为184
  • 185. 185
  • 186. 高维空间的算例化二次型 为标准型。 解:可以看出系数矩阵A,程序ag907为 A[1,1,3;1,2,1;3,1,5], Rorth(A), Dinv(R)*A*R 得知二次型最后的标准型为 其中186
  • 187. 5 人口迁徙模型 设在一个大城市中的总人口是固定的。人口的分布则因居民在市区和郊区之间迁徙而变化。每年有6%的市区居民搬到郊区去住,而有2%的郊区居民搬到市区。假如开始时有30%的居民住在市区,70%的居民住在郊区,问10年后市区和郊区的居民人口比例是多少?30年、50年后又如何? 这个问题可以用矩阵乘法来描述。把人口变量用市区和郊区两个分量表示,一年以后,市区人口为xc1 (10.06) xc00.02xs0,郊区人口xs1 0.06xc0  (10.02)xs0,187
  • 188. 问题的矩阵描述用矩阵乘法来描述,可写成: 从初始到k年,此关系保持不变,因此上述算式可扩展为 , 故可用程序ag961进行计算: A[0.94,0.02;0.06,0.98], x0[0.3;0.7] x1A*x0, x10A^10*x0, x30A^30*x0, x50A^50*x0 得到:188
  • 189. 本题特征值和特征向量的意义无限增加时间k,市区和郊区人口之比将趋向一组常数0.25/0.75。为了弄清为什么这个过程趋向于一个稳态值,我们改变一下坐标系统。在这个坐标系统中可以更清楚地看到乘以矩阵A的效果,先求A的特征值和特征向量,得到 令 它是特征向量的整数化,得到189
  • 190. 6 产品成本的计算 某厂生产三种成品,每件产品的成本及每季度生产件数如表9.1及表9.2所示。试提供该厂每季度在每种产品上的成本表。 解:应当用矩阵 来描述此问题,列 出成本矩阵为M, 季度产量矩阵为P 190
  • 191. 本例矩阵相乘的变换意义将M和P相乘,得到的矩阵设为Q,Q的第一行第一列元素为 Q(1,1)0.140000.320000.1558001870 不难看出,Q表示了夏季消耗的原材料总成本。从线性变换的角度来看,Q矩阵把以件数为单位的产品空间映射到了以元为单位的成本空间。 191
  • 192. 7 情报检索模型 假如数据库中包括了n个文件,而搜索所用的关键词有m个。可以把数据库表示为mn的矩阵A。比如有7本书,6个关键词x(初等,代数,矩阵,理论,线性,应用):则A就是6×7的矩阵。书名中有此关键词的就将该对应元素置1。 搜索结果可以表示为乘积yATx,它是n×1列向量。于是y的各个分量就表示各书与搜索向量匹配的程度。y值最大的元素对应于匹配最好的书籍,是读者可能最需要的。 可见‘变换’有很广泛的意义。在本例中,它是从‘关键词’子空间变换为‘文献目录’的子空间。 192