《MATLAB程序设计与应用(第二版).pdf》由会员分享,可在线阅读,更多相关《MATLAB程序设计与应用(第二版).pdf(392页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、阅阅读读时时:请请选选择择“视视图图|文文档档结结构构图图”,弹弹出出文文档档中中的的标标题题链链接接。数学软件MATLAB程序设计与应用第1章MATLAB系统环境1.1 MATLAB概貌1.2 MATLAB环境的准备1.3 MATLAB操作界面1.4 MATLAB帮助系统自上世纪80 年代以来,出现了科学计算语言 ,亦称 数学软件 。MATLAB Mathematica Mathcad Maple LINDO LINGO 1.1 MATLAB概貌 p3 MATLAB 是 MATrix LABoratory(矩阵实验室 ) 的缩写。1984 年由Math Works 公司推出,现已成为国际公认
2、的优秀的工程应用开发环境,是影响最大,流行最广的科学计算语言。1.1.1 MATLAB的发展版本编号建造编号发布时间版本编号建造编号发布时间MATLAB 1.0 1984 MATLAB 6.5.1 R13SP1 2003 MATALB 2 1986 MATLAB 6.5.2 R13SP2 2003 MATLAB 3 1987 MATLAB 7.0 R14 2004 MATLAB 3.5 1990 MATLAB 7.0.1 R14SP1 2004 MATLAB 4 1992 MATLAB 7.0.4 R14SP2 2005 MATLAB 4.2c R7 1994 MATLAB 7.1 R14SP
3、3 2005 MATLAB 5.0 R8 1996 MATLAB 7.2 R2006a 2006 MATLAB 5.1 R9 1997 MATLAB 7.3 R2006b 2006 MATLAB 5.1.1 R9.1 1997 MATLAB 7.4 R2007a 2007 MATLAB 5.2 R10 1998 MATLAB 7.5 R2007b 2007.10 MATLAB 5.2.1 R10.1 1998 MATLAB 7.6 R2008a 2008.3 MATLAB 5.3 R11 1999 MATLAB 7.7 R2008b 2008.10 MATLAB 5.3.1 R11.1 199
4、9 MATLAB 7.8 R2009a 2009.3 MATLAB 6.0 R12 2000 MATLAB 7.9 R2009b 2009.10 MATLAB 6.1 R12.1 2001 MATLAB 7.10 R2010a 2010.3 MATLAB 6.5 R13 2002 MATLAB 7.11 R2010b 2010.10 1. 从 MATLAB 4.2c开始,每个版本增加了一个建造编号 ;2. 例如 MATLAB7.6的建造编号是R2008a 。说明 MATLAB7.6与 MATLAB2008a是等同的;3. 对于建造编号,正规化 以后,每年出两个版本。一般来说。a 是测试版 ,b
5、 是正式版 。a 是前半年出, b 是后半年出。教材采用MATLAB7.0(R14 ,2004 )实验室采用MATLAB 7.8(R2009a ,2009.3 ,汉化)1.1.2 MATLAB的主要功能p4 数值计算和符号计算功能绘图功能语言体系MATLAB工具箱(1) 数值计算和符号计算功能MATLAB以矩阵作为数据操作的基本单位 ,还提供了十分丰富的数值计算函数。MATLAB先后和著名的符号计算语言Maple与 MuPAD (从 MATLAB 2008b开始使用MuPAD )相结合,使得MATLAB具有符号计算功能。(2) 绘图功能可以绘制二维和三维图形。MATLAB提供了两个层次的绘图操
6、作:对图形句柄进行的低层 绘图操作;建立在低层绘图操作之上的高层 绘图操作。(3) 语言体系MATLAB 具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。MATLAB是解释性语言 ,不能脱离MATLAB环境而独立运行。(4) MATLAB工具箱MATLAB包含两部分内容:基本部分 和各种可选的工具箱 。MATLAB工具箱分为两大类:功能性 工具箱和 学科性 工具箱。基本部分构成 MATLAB的核心内容,也是使用和构造工具箱的基础。功能性工具箱主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。学科性工具箱Control System
7、Toolbox 控制系统工具箱Signal Processing Toolbox 信号处理工具箱Neural Network Toolbox 神经网络工具箱Optimization Toolbox 最优化工具箱Financial Toolbox 金融工具箱Statistics Toolbox 统计学工具箱开始工具箱MATLAB具备很强的开放性除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。1.1.3 MATLAB功能演示p5 例1.1绘曲线图绘制函数y=2-|x|和 y=sin x 的曲线。在命令窗口
8、逐条输入以下命令:x=-2*pi:pi/180:2*pi; plot(x,2.(-abs(x),: ,x,sin(x); 例1.2求方程的根求方程 2x5-3x3+71 x2-9x+13=0 的全部根。p=2,0,-3,71,-9,13; x=roots(p) 例1.3解线性方程组2328234453923xyzxyzxyz法 1:调用求逆矩阵函数inv a=2,3,-1;8,2,3;45,3,9;%系数矩阵b=2;4;23; %常数项列向量x=inv(a)*b 法 2:左除运算a=2,3,-1;8,2,3;45,3,9; %系数矩阵b=2;4;23; %常数项列向量x=ab 法 3:符号计算
9、syms x y zx,y,z=solve(2*x+3*y-z-2,8*x+2*y+3*z-4,45*x+3*y+9*z-23) 例1.4求积分10ln(1)xx dx法 1:调用 quad quad( x.*log(1+x),0,1) 法 2:符号计算syms xint(x*log(1+x),0,1) 1.2 MATLAB环境的准备p7 1.2.1 MATLAB的安装安装 MATLAB系统,需运行系统自带的安装程序setup.exe,可以按照安装提示依次操作。1.2.2 MATLAB的启动与退出p8 启动有 3 种常见方法:(1) 使用 Windows“ 开始 ” 菜单。(2) 运行 MAT
10、LAB (文件夹)系统启动程序matlab.exe。(3) 利用(桌面)快捷方式。退出也有3 种常见方法:(1) 在主窗口File 菜单中选择Exit MATLAB。(2) 在命令窗口中键入Exit 或 Quit 命令。(3) 单击主窗口右上角的关闭按钮。1.3 MATLAB操作界面p9 1.3.1 主窗口MATLAB主窗口是MATLAB的主要工作界面。主窗口除了嵌入 一些子窗口外,还主要包括菜单栏和工具栏 。? MATLAB的菜单栏包括 6个菜单项 :File 实现有关 文件 的操作Edit 用于命令窗口的编辑 操作Debug 用于程序 调试Desktop 用于设置MATLAB集成环境的显示
11、方式(桌面 )Window 用于关闭所有打开的编辑器窗口 或选择活动窗口Help 用于提供 帮助 信息。? MATLAB的工具栏提供了一些 命令按钮 和一个 当前路径列表框。这些命令按钮有对应的菜单命令,但比菜单命令使用起来更快捷、方便。1.3.2 命令窗口 (Command Window) 命令窗口是MATLAB的主要 交互窗口 ,用于输入命令并显示除图形以外的所有执行结果。 为命令提示符表示 MATLAB正在处于准备状态。在命令提示符后键入命令并回车后,MATLAB就会 解释执行 所输入的命令,并在命令后面给出计算结果。该窗口既可以内嵌 在工作界面内,也可以浮动 到工作界面之外。 (右上角
12、的按钮)一般来说,一个命令行输入一条命令,命令行以回车结束。但一个命令行也可以输入若干条命令,各命令之间以逗号 分隔,若前一命令后带有分号 ,则逗号可以省略。例p=15, m=35 p=15; m=35 . 为续行符如果一个 命令行 很长,一个 物理行 之内写不下, 可以在第一个物理行之后加上续行符并按下回车键,然后接着下一个物理行继续写命令的其他部分。即把续行符下面的物理行看作该行的逻辑继续。表 1.1 命令行编辑中常用的控制及其功能p10 键名功能PgUp PgDn Home EndDel BackSpace Esc前寻式调回已输入过的命令后寻式调回已输入过的命令左移光标右移光标前寻式翻滚
13、一页后寻式翻滚一页光标移到行首光标移到行尾删除光标右边字符(删除键)删除光标左边字符(返消键)删除当前行(取消键)1.3.3 工作空间窗口 (Workspace) p10 工作空间 是 MATLAB用于存储各种变量和结果的内存空间。在该窗口中显示工作空间中所有的变量,可对变量进行观察、编辑、保存和删除。1.3.4 当前目录窗口和搜索路径(Cuurent Directory) p11 当前目录是指 MATLAB运行文件时的工作目录,只有在当前目录或搜索路径 下的文件、函数可以被运行或调用。在当前目录窗口中可以显示或改变当前目录,还可以显示当前目录下的文件并提供搜索功能。cd 命令: 将用户目录设
14、置成当前目录。例 将用户目录 e:matlab7work设置为当前目录。在命令窗口输入:cd e:matlab7work MATLAB的搜索路径当用户在MATLAB命令窗口输入一条命令后,MATLAB按照一定次序寻找相关的文件。基本的搜索过程是:(1) 检查该命令是不是一个变量 。(2) 检查该命令是不是一个内部函数 。(3) 检查该命令是否当前目录下的M 文件 。(4) 检查该命令是否MATLAB搜索路径中其他目录下的M 文件。用户可以将自己的工作目录列入MATLAB 搜索路径,从而将用户目录纳入MATLAB系统统一管理。设置搜索路径的方法有:(1) 用 path 命令设置搜索路径。例 将用
15、户目录 e:matlab7work加到搜索路径下。在命令窗口输入:path(path e:matlab7work) (2) 用对话框设置搜索路径文件设置路径(或在命令窗口执行pathtool命令)将出现搜索路径设置对话框。通过 “添加文件夹”或添加包含子文件夹“按钮将指定路径添加到搜索路径列表中。在修改完搜索路径后,则需要保存 搜索路径。pathdef.m保存搜索路径的信息,通过修改该文件也可以修改搜索路径。1.3.5 命令历史窗口 (Command History) 在默认设置下,历史记录窗口中会自动保留自安装起所有用过的命令的历史记录,并且还标明了使用时间,从而方便用户查询。通过 双击 命
16、令可以再次运行历史命令。要清除这些历史记录,可选择编辑菜单 中的 Clear Command History命令 。1.3.6 Start 菜单 p13 在 MATLAB主窗口左下角还有一个Start按钮 ,单击该按钮会弹出一个菜单,选择其中的命令可以快速访问MATLAB的各种工具和查阅MATLAB包含的各种资源。1.4 MATLAB帮助系统p13 1.4.1 帮助命令p14 MATLAB帮助命令包括help 、lookfor以及模糊查询。1help 命令在命令窗口中直接输入:help 显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。help 加函数名显示该函数的帮助说明。2l
17、ookfor命令help 命令只搜索出那些关键字完全匹配的结果。lookfor命令只对M 文件的第一行进行关键字搜索。若在lookfor命令加上 -all 选项,则可对M 文件进行全文搜索。 (列出的内容很长,可用Ctrl+C终止)3模糊查询用户只需要输入命令的前几个字母,然后按Tab 键 ,系统就会列出所有以这几个字母开头的命令。1.4.2 帮助窗口p15 进入帮助窗口可通过3 种方法:(1) 单击 MATLAB主窗口工具栏中的? 按钮。(2) 在命令窗口中输入helpwin、helpdesk或 doc 。(3) 选择 Help 菜单中 MATLAB Help命令。1.4.3 演示系统在帮助
18、窗口中选择演示系统(Demos) 选项卡,然后在其中选择相应的演示模块。在命令窗口输入Demos 。选择主窗口Help 菜单中的Demos子菜单,打开演示系统。第2章MATLAB数据及其运算2.1 MATLAB数据的特点2.2 变量及其操作2.3 MATLAB矩阵的表示2.4 MATLAB数据的运算2.5 字符串2.6 结构数据和单元数据2.1 MATLAB数据的特点p17 矩阵矩阵 是 MATLAB最基本、最重要的数据对象。MATLAB的大部分运算或命令都是在矩阵(在复数域 上)运算的意义下执行的。标量 对应仅含一个元素的矩阵。数值数据双精度数 ,占 64 位,转换函数double 单精度数
19、 ,占 32 位,转换函数single 带符号整数 ,转换函数int8,int16,int32 无符号整数 ,转换函数uint8,uint16,uint32 字符数据 ,转换函数char 结构体类型 (Structure)单元类型 (Cell )逻辑型 ,非 0 为 true ,0 为 false 2.2 变量及其操作2.2.1 变量与赋值1变量命名变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63 个字符。变量名 区分 字母的 大小写 。MATLAB提供的 标准函数名 以及 命令名 必须用 小写字母 。2赋值语句(1) 变量 =表达式(2) 表达式(值赋给预定义变量ans )其中
20、表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵 。例2.1 计算表达式的值p18 将05cos47172i的计算结果赋给变量x,然后显示出结果。x=(5+cos(47*pi/180)/(1+sqrt(7)-2*i) 其中 pi 和 i 都是 MATLAB预先定义的变量,分别代表圆周率和虚数单位。3. 预定义变量p18 表2.1常用的预定义变量及其含义预定义变量含义ans eps pi i,j inf,Inf NaN,nan nargin nargout realmax realmin lasterr lastwar默认赋值变量机器零阈值近似值虚数单位无穷大,如1/0 的结果非数,
21、如0/0,inf/inf的结果函数输入参数个数函数输出参数个数最大正实数最小正实数存放最新的错误信息存放最新的警告信息预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。i=2 %对预定义变量重新赋值2*i clear i%恢复预定义变量2*i 2.2.2 变量的管理p19 1内存变量的显示与删除显示工作空间中驻留的变量名清单及信息命令:who %显示变量名清单whos %显示变量名清单及信息删除工作空间中的变量命令:clear 变量名工作空间窗口专门用于内存变量的管理。在工作空间窗口中显示所有内存变量的属性。当选中某些变量(Ctrl 或 Shift+ 单击)后,再单击Delete
22、 按钮,就能 删除 这些变量。双击变量后, 将进入 变量编辑器 。通过变量编辑器可以直接观察变量中的具体元素,也可修改变量中的具体元素。输入 较大矩阵 时,可采用变量编辑器。2内存变量文件利用 MAT 文件 可以把当前工作空间中的一些有用变量长久地保留下来,扩展名是.mat 。MAT 文件的生成和装入由save 和 load 命令来完成。常用格式为:save 文件名 变量名表 -append-ascii load 文件名 变量名表 -ascii 文件名 可以带路径,但不需带扩展名.mat ,命令默认对.mat 文件进行操作。变量名表 中的变量个数不限,只要内存或文件中存在即可,变量名之间以空格
23、分隔。当变量名表省略时,保存或装入全部变量。-ascii选项使文件以ASCII 格式处理,省略该选项时文件将以二进制格式处理。-append选项控制将变量追加到MAT 文件中。2.2.3 数据的输出格式p20 用十进制数表示一个常数,具体可采用日常记数法 和科学记数法 两种表示方法。在一般情况下,内部每一个数据元素都是用双精度数 来表示和存储的。数据输出时可用format命令设置或改变数据输出格式。format命令的格式为:format 格式符其中格式符决定数据的输出格式表2.2控制数据输出格式格式符及其含义格式符含义short (默认)小数点后4 位,不超过7 位有效数字。大于 1000 的
24、实数用5 位有效数字的科学记数法long 15 位有效数字short e 5 位有效数字科学记数法long e 15 位有效数字科学记数法short g从 short和 short e选择最佳方式long g从 long 和 long e选择最佳方式rat近似有理数表示hex 十六进制表示+ 正数、负数、零分别用+、-、空格表示bank 银行格式,元、角、分表示compact输出变量之间无空行loose输出变量之间有空行例4/3 %当前输出格式format long%15位有效数字形式输出4/3 format rat%近似有理数表示4/3 format compact%输出变量之间没有空行4/
25、3 format loose%输出变量之间有空行4/3 format short%short为默认输出格式2.3 矩阵的表示p21 表 矩阵操作函数及其含义函数名含义eye ones linspace sub2ind ind2sub size length reshape end 单位矩阵全 1 矩阵生成行向量下标转换成序号序号转换成下标给出矩阵的行数和列数给出矩阵行数和列数中较大者矩阵重排预定义变量,某一维末尾下标空矩阵2.3.1 矩阵的建立1. 直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号 括起来,按矩阵行的顺序输入各元素,同一行的各元素之
26、间用空格 或逗号 分隔,不同行的元素之间用分号 分隔。(可用回车代替分号)例A=1,2,3;4 5 6;7,8 9 2. 利用 M 文件建立矩阵对于比较大且比较复杂的矩阵,可以为它专门建立一个M 文件。例2.2 利用 M 文件建立矩阵(1) 启动 MATLAB文本编辑器,输入:MYMAT=101,102,103,104,105; 201,202,203,204,205; 301,302,303,304,305 (2) 存盘 (文件名为mymatrix.m)。(3) 在命令窗口中输入mymatrix,即运行该M 文件,就建立一个名为MYMAT 的矩阵。3. 建立大矩阵(矩阵拼接)大矩阵可由方括号
27、中的小矩阵或向量建立。A=1,2,3;4,5,6;7,8,9; C=A,eye(3),ones(3),A eye(3) 为 3 阶单位矩阵ones(3) 为 3 阶全 1 矩阵2.3.2 冒号表达式用冒号表达式产生行向量,一般格式:e1:e2:e3 其中 e1 为初始值, e2 为步长, e3 为终止值。用 linspace函数产生行向量。调用格式:linspace(a,b,n) 其中 a 和 b 是生成向量的第一个和最后一个元素,n 是元素总数。2.3.3 矩阵的拆分1矩阵元素通过下标 引用 矩阵的元素,例如A=1,2,3;4,5,6 A(2,3) A(2,2)=22; A A(4,5)=1
28、0; A 采用矩阵元素的序号来引用矩阵元素。矩阵 元素的序号 是相应元素在内存中的排列顺序。在MATLAB中,矩阵元素 按列存储 ,先第一列,再第二列,依次类推。A=1,2,3;4,5,6; A(3) 序号 (Index) 与下标 (Subscript )是一一对应的,以m n 矩阵A 为例,矩阵元素A(i,j) 的序号为(j-1)*m+i 。其相互转换关系也可利用sub2ind和 ind2sub函数求得clc A=ones(3,4) size(A) %给出矩阵的行数和列数sub2ind(size(A),1,2) i,j=ind2sub(size(A),3) length(A) %给出矩阵行数
29、和列数中较大者reshape(A,m,n)在矩阵总元素保持不变的前提下,将矩阵重新排成m n 矩阵。x=1,2,3,4,5,6,7,8,9,10,11,12 y=reshape(x,3,4) z=reshape(y,2,7) %出错2. 矩阵拆分(1) 利用冒号表达式获得子矩阵A(:,j) 表示取 A 矩阵的第j 列全部元素;A(i,:) 表示 A 矩阵第 i 行的全部元素;A(i,j) 表示取 A 矩阵第 i 行、第 j 列的元素;A(i:i+m,:)表示取 A 矩阵第 ii+m 行的全部元素;A(:,k:k+m)表示取 A 矩阵第 kk+m 列的全部元素;A(i:i+m,k:k+m)表示取
30、 A 矩阵第 ii+m 行内,并在第kk+m 列中的所有元素;A(:) 将矩阵 A 每一列元素堆叠起来,成为一个列向量。end 表示某一维的末尾元素下标。A(end,:) A(:,end) (2) 利用空矩阵删除矩阵的元素给变量 X 赋空矩阵的语句:X= 注意, X= 与 clear X 不同, clear是将 X 从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。2.4 MATLAB数据的运算p26 2.4.1 算术运算1基本算术运算MATLAB的基本算术运算有:加减* 乘/ 右除 左除 乘方注意,运算是在矩阵意义下进行的。(1) 矩阵加减运算假定有两个矩阵A 和 B,则可以由A+
31、B 和 A-B 实现矩阵的加减运算。运算规则是:若 A 和 B 矩阵的 维数相同 ,则可以执行矩阵的加减运算,A 和 B 矩阵的相应元素相加减。若 A 与 B 的维数不相同 ,将给出错误信息,提示用户两个矩阵的维数不匹配。(2) 矩阵乘法若 A 为 m n 矩阵, B 为 n p 矩阵,则C=A*B 为 m p 矩阵。(3) 矩阵除法有两种矩阵除法运算: 左除/ 右除如果 A 矩阵是非奇异方阵,则AB 和 B/A 运算可以实现。AB 等效于 inv(A)*B B/A 等效于 B*inv(A) 对于含有标量的运算,两种除法运算的结果相同。如 3/4 和 43 有相同的值,都等于0.75。又如设
32、a=10.5,25 ,则 a/5=5a=2.1000 5.0000。对于矩阵运算,一般BB/A。(4) 矩阵的乘方一个矩阵的乘方运算可以表示成Ax要求 A 为方阵, x 为标量。2点运算有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.* 点乘./ 点右除. 点左除. 点乘方两矩阵进行点运算是指它们的对应元素 进行相关运算,要求两矩阵的维数相同。3. MATLAB常用数学函数p29 函数的自变量规定为矩阵变量。运算法则是将函数逐项作用于矩阵的元素上。结果是一个与自变量同维数的矩阵。表2.3常用数学函数及其含义p29 函数名含义三角函数sqrt log log1
33、0 log2 exp pow2 abs angle real imag conj rem mod fix floor ceil round sign gcd lcm略平方根函数自然对数函数常用对数函数以 2 为底的对数函数自然指数函数2 的幂绝对值函数复数的幅角复数的实部复数的虚部复数共轭运算求余数或模运算模运算向零方向取整不大于自变量的最大整数不小于自变量的最小整数四舍五入到最邻近的整数符号函数最大公因子最小公倍数函数使用说明:(1) 三角函数以弧度为单位计算。(2) abs 函数可以求实数的绝对值、复数的模、字符串的ASCII 码值。abs(-10) abs(2+3i) abs( abc
34、) (3) 用于取整的函数有fix向 0 方向取整floor向-方向取整ceil向 +方向取整round四舍五入到最邻近的整数(4) rem(x,y) 和 mod(x,y) 要求 x,y 必须为相同大小的实矩阵或为标量。rem求余数或模运算mod模运算当 y 0 时rem(x,y)=x-y.*fix(x./y) mod(x,y)=x-y.*floor(x./y) 当 y=0 时rem(x,0)=NaN(非数)mod(x,0)=x 2.4.2 关系运算p30 6 种关系运算符: 小于 大于= 大于或等于= 等于 = 不等于运算法则:(1) 两个标量的比较若关系成立,结果为1,否则为0。(2) 两
35、个同维数矩阵的比较对相同位置的元素比较。(3) 标量与矩阵的比较标量与矩阵的每一个元素比较。例2.3建立 5 阶方阵,判断 A 的元素是否能被3 整除。A=24,35,13,22,63;23,39,47,80,80;. 90,41,80,29,10;45,57,85,62,21;. 37,19,31,88,76 P=rem(A,3)=0 %判断元素是否被3 整除2.4.3 逻辑运算p31 逻辑运算符:& 与| 或非运算法则:(1) 在逻辑运算中,确认非零元素为真,用 1 表示,零元素为假,用 0 表示。(2) a 和 b 是两个标量a&b a,b 全为非零时,结果为1,否则为0。a|b a,b
36、 中只要有一个非零,结果为1,否则为 0。a 当 a 是零时,结果为1;当 a 非零时,结果为0。(3) 两个运算量是同维矩阵相同位置上的元素按标量规则逐个进行。(4) 一个是标量,另一个是矩阵标量与矩阵中的每个元素之间按标量规则逐个进行。(5) 逻辑非是 单目运算符 ,也服从矩阵运算规则。(6) 在算术、关系、逻辑运算中,算术运算优先级 最高,逻辑运算优先级最低。例2.4在0, 3 区间,求 y=sin x 的值。要求: 消去负半波,即( , 2 )内的函数值置0。2,33和78,33内取均值为sin3。%方法 1 x=0:pi/100:3*pi; y=sin(x); y1=(x2*pi).
37、*y; %消去负半波q= (xpi/3 & x7*pi/3 & x=0).*y; %消去负半波p=sin(pi/3); y2=(y=p)*p+(y=10 & A=a & ch= A & c= a & c= 0 & c= 9disp(abs(c)-abs(0); elsedisp(c); end2switch语句根据表达式的取值,分别执行不同的语句,其语句格式为:switch 表达式case 表达式 1 语句组 1 case 表达式 2 语句组 2 case 表达式 m 语句组 m otherwise 语句组 n end 当任意一个分支的语句执行完后,直接执行switch语句的下一句。例4.5(
38、switch case)打折销售p63 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示 ):price200 没有折扣200price500 3%折扣500price1000 5%折扣1000price2500 8%折扣2500price0 sum mean=sum/n end例4.12 (while) 求矩阵指数根据矩阵指数的幂级数展开式求矩阵指数。232!3!nXXXXeIXnLLclc; X=input(输入方阵 X: ); E=zeros(size(x); F=eye(size(X); n=1; while norm(F,1)0 %项很小时终止循环E=E+F
39、; F=F*X/n; n=n+1; endE expm(X) 3. break语句和 continue语句与循环结构相关的语句还有break 语句和 continue语句。它们一般与if 语句配合使用。break 当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。continue当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。例4.13 使用 continue和 break 语句 p69 求100,200之间第一个能被21 整除的整数。程序如下:for n=100:200 if rem(n,21)=0 continueendbreakendn
40、 4. 循环的嵌套若一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套 ,或称为 多重循环结构。例4.14 (for 二重循环 )求完数p70 若一个数恰好等于除它本身外的因子之和,这个数就称为完数,如6=1+2+3 ,所以 6 是完数。求1,500 之间的全部完数。for m=1:500 s=0; for k=1:m/2 %求m 的真因子 kif rem(m,k)=0 s=s+k; endendif m=s disp(m); endend例4.15 (for) 用筛选法求某自然数范围内的全部素数p70 m=input(m= ); p=1:m; p(1)=0; for i=2:sqrt(
41、m) for j=2*i:i:m p(j)=0; endendn=find(p=0); p(n) %利用矩阵运算m=input(m= ); p=2:m; for i=2:sqrt(m) n=find(rem(p,i)=0 & p=i); p(n)= endp 4.3 函数文件4.3.1 函数文件的基本结构函数文件由function语句引导,其基本结构为:function 输出形参表 =函数名 (输入形参表 ) 注释说明部分函数体语句其中以 function开头的一行为引导行 ,表示该M 文件是一个函数文件。函数名的 命名规则 与变量名相同。当 输出形参 多于一个时,则应该用方括号括起来。说明:
42、(1) 关于文件名函数文件名通常由函数名再加上扩展名.m 组成,不过函数文件名与函数名也可以不相同。当两者不同时, MATLAB将忽略函数名而确认函数文件名,因此调用时使用函数文件名。不过最好把文件名和函数名统一,以免出错。(2) 关于注释说明部分注释说明包括3 部分 内容: 紧随函数文件引导行之后以%开头的 第一注释行 。这一行一般包括大写的函数文件名和函数功能简要描述,供lookfor关键词查询和help 在线帮助时使用。 第一注释行及之后连续的注释行。通常包括函数输入/输出参数的含义及调用格式说明等信息,构成全部在线帮助文本。 与在线帮助文本相隔一空行的注释行。包括函数文件编写和修改的信
43、息,如作者、修改日期、版本等内容,用于软件档案管理。(3) 关于 return语句若在函数文件中插入了return语句 ,则执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。通常,在函数文件中也可不使用return语句,这时在被调用函数执行完成后自动返回。例4.16 (函数文件)求圆的面积和周长p72 function s,p=fcircle(r) %FCIRCLE 计算半径为 r的圆的面积和周长。%r 圆半径%s 圆面积%p 圆周长%s,p=fcircle(r)%2011 年3月1日编s=pi*r*r; p=2*pi*r; 4.3.2 函数调用函数调用的一般格式是:输出实参表 =函
44、数名 (输入实参表 )各实参 出现的顺序、个数,应与函数定义时形参 的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递 ,然后再执行函数的功能。例4.17 (函数调用)坐标转换p73 利用函数文件,实现直角坐标(x,y) 与极坐标 ( , )之间的转换。转换公式:矢径:22xy极角:arctanyx%函数文件 tran.m function rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); %命令文件 main1.m x=input(Please input x=:); y=input(Please
45、 input y=:); rho,the=tran(x,y); rho the 在 MATLAB中,函数可以嵌套调用 ,即一个函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为函数的递归调用 。例4.18 (递归)求 n! p73 11!(1)!1nnn nnfunction f=factor(n) if n1 error( RNDPRM1 只接受向量的输入); endY= ; %从一个空矩阵开始l=n; %X的元素个数for i=1:n k=1+fix(l*rand);%随机选择 Y的下一个元素的位置x=X(k); %被选择的元素Y=Y,x; %将x添加到 Y中X(k)= ; %从
46、X中删除 x元素l=l-1; %更新 X的元素个数end%循环结构,函数文件function Y=rndprm2(X) %RNDPRM1 用递归产生一行向量的任意排列%RNDPRM1(X) 产生行向量 X的任意排列m,n=size(X); l=n; if m1 error( RNDPRM1 只接受向量的输入); endif n 后输入 变量名 ,检查变量的值。 选择“调试”菜单中的“继续” 命令,程序继续运行,在断点处又暂停,这时又可输入变量名,检查变量的值。如此重复,一直到发现问题为止。 切换工作空间,结束对程序的调试。打开编辑窗口中的中的“堆栈” 下拉列表框,从中选择“基本” ,即将工作空
47、间切换到主工作空间。然后选择“调试”菜单中的“设置 / 清除断点” 命令,这时红色圆点去除,绿色箭头变为白色箭头。再选择“调试”菜单中的“继续” ,去除白色箭头,完成调试。4.4.3 调试命令除了采用调试器调试程序外,MATLAB还提供了一些命令用于程序调试。命令的功能和调试器菜单命令类似,具体使用方法请读者查询MATLAB帮助文档。表 4.1 调试命令及其功能p80 命令功能dbstop dbclear dbcont dbdown/dbup dbquit dbstack 设置断点清除已设置好的断点继续执行修改当前工作空间的上、下文关系退出调试状态显示当前堆栈的状态dbstatus dbste
48、p dbtype显示所有的已设置的断点执行程序的一行或多行代码显示 M 文件代码和相应的行号表 命令或函数及其功能命令或函数功能edit 文件名打开指定的M 文件。input( 提示信息,选项) 从键盘输入数据,若采用s 选项,则输入一个字符串。disp( 输出项 ) 数据输出到命令窗口。pause( 延迟秒数 ) 程序暂停指定的秒数。pause 暂停程序,直到用户按任一键后继续执行。Ctrl+c 组合键,强行中止程序的运行。break 当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。continue 当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下
49、一次循环。randperm(n) 产生一个从整数1 到整数 n 的任意排列。error( 错误提示信息 ) 退出运行并显示给定的错误提示信息。nargin 记录调用函数时的输入实参个数。nargout 记录调用函数时的输出实参个数。global 变量名定义全局变量。keyboad 键盘终止函数。表 选择结构语句及其功能语句功能if 条件语句组end 当条件成立时, 则执行语句组, 执行完之后继续执行if 语句的后继语句;否则直接执行if 语句的后继语句。if 条件语句组 1else 语句组 2end 当条件成立时,执行语句组1,否则执行语句组2,语句组1 或语句组 2 执行后,再执行if 语句
50、的后继语句。单分支。if 条件语句组 1else 语句组 2end 当条件成立时,执行语句组1,否则执行语句组2,语句组1 或语句组 2 执行后,再执行if 语句的后继语句。双分支。if 条件 1语句组 1elseif 条件 2语句组 2实现多分支选择结构。elseif 条件 m语句组 melse 语句组 nend switch表达式case表达式 1语句组 1 case表达式 2语句组 2 case表达式 m语句组 m otherwise语句组 n end当任意一个分支的语句执行完后,直接执行switch语句的下一句。try 语句组 1catch 语句组 2 end try 语句先试探性执行