付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022/9/2第二章 MATLAB程序设计Chapter Two: MATLAB ProgrammingMATLAB 语 言MATLAB Language2022/9/2MATLAB ProgrammingMATLAB具有以下两种操作方式: 1.命令行交互操作方式 2. M文件编程模式Neither of the two can be dispensed.(二者缺一不可)2022/9/2M文件是用Matlab语言编写的原程序(脚本),是一系列命令的集合。有如下两类M文件。1. 命令文件它没有输入参数和输出参数。它可以通过键入文件名在命令窗口运行。2. 函数文件它可以有输入参数和输出参数。它需
2、要由命令文件或命令窗口的命令调用。一. M文件(M-File)2022/9/21. 建立与编辑M文件(Setting up and editing M-file)建立M文件(Setting up new M-file) MATLAB default windows File New M-file MATLAB7.0或更低版本新建脚本(script) 更高版本的MATLAB 编辑M-文件(Editing existing M-file) MATLAB default windows File Open M-file.一. M文件(M-File)2022/9/2.命令文件(Command file
3、)命令文件是包含一个或多个命令的文件。用户可以把文件名作为命令执行它。命令解释器可以按顺序接受命令文件中的命令。【例1】 建立一个命令文件将变量a,b的值互换。 先建立e31.m程序文件: a=1:9; b=11,12,13;14,15,16;17,18,19; c=a; a=b; b=c; a, b在MATLAB命令窗口中输入e31,将会执行该命令文件。问题:如何只使用a, b两个变量实现a, b的交换?一. M-文件(M-File)答:当a, b是同维数组时:a=a+b; b=a-b; a=a-b2022/9/21. Input函数功能: 给出文本字符串提示并等待键盘输入。格式: A=in
4、put(prompt message,option);注释: s 选项指定字符串输入。举例: xm=input(Whats your name:, s)注意Whats your name:, 字符串中有时要使用!二数据输入输出(Data input/output)【例2】求一元二次方程ax2 +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文件。2022/9/22. Pause函数功能: Su
5、spend the execution of a running program.格式: pause(seconds of delay) Note:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。 3. Disp 函数功能: Display the array without printing the array name. 格式: disp(string or matrix)举例: A=Hello, MATLAB; disp(A)输出为:Hello, MATLAB %无空行无变量名%二数据输入输出(Data i
6、nput/output)2022/9/24. Fprintf函数格式:Count = fprintf(Fid, Format, A, .) 功能:将格式应用于数组A及省略的其他数组的所有元素的实数部分,按列顺序将数据写入文本文件或屏幕。二数据输入输出(Data input/output)格式字符串作用%dDisplay value as an integer.%eDisplay value in exponential format.%fDisplay value in floating point format.%sDisplay character vector or string arr
7、ay. .rCarriage returnnSkip to a new line.Format=格式字符串,其用法和作用见下表。Fid为fopen函数打开文件时生成的文件标识符,去除Fid或令Fid=1则输出到屏幕。(请试试Fid=2的结果)2022/9/25. Keyboard命令 遇到keyboard命令时,将“控制权”交给键盘,用户可以从键盘输入各种MATLAB命令。仅当用户输入return命令后,“控制权”才交还给程序。它与input的区别是:它允许输入任意多个MATLAB命令,而input只能输入赋给变量的“值”。二数据输入输出(Data input/output)Matlab数据的
8、最大有效值是1. 88*21023, 或1.797693134*10308 溢出上限为21024 2022/9/2Including if statement and switch statement.1. 判断语句 (if.else.end)格式1: if 表达式 执行代码块 end三程序设计(program design)格式2: if 表达式1 执行代码块1 else 执行代码块2 end(一)选择结构 (Selective structure)2022/9/2(一)选择结构 (Selective structure)格式3:if 表达式1 执行代码块1elseif 表达式2 执行代码块
9、2elseif 表达式m 执行代码块melse 执行代码块m+1end三程序设计(program design)其中可以包含任意多个 elseif 语句,且 elseif 和 else 均可省略。2022/9/2【例3】 输入三角形的三条边,求面积。程序如下: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(三角形面积为:, num2str(s); %将s转换成字符串else disp(
10、不能构成一个三角形。)end运行:请输入三角形的三条边:4 5 6结果:三角形面积为9.9216(一)选择结构 (Selective structure)三程序设计(program design)2022/9/2num2str 将数字转换为数字字符串str2num 将数字字符串转换为数字mat2str 将数组转换成字符串int2str 把数值数组转换为整数数字组成的字符数组lower(str) 将字符串中的字母转换成小写upper(str) 将字符串中的字母转换成大写strcmp 比较两个字符串是否完全相等, 是,返回真,否则,返回假strncmp 比较两个字符串前n个字符是否相等, 是,返回
11、真,否则,返回假strcmpi 比较两个字符串是否完全相等,忽略字母大小写strncmpi 比较两个字符串前n个字符是否相等, 忽略字母大小写(一)选择结构 (Selective structure)三程序设计(program design)2022/9/2【例4】输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。c=input(,s);if c=A & c=a& c=z disp(setstr(abs(c)-1);else disp(c);end(一)选择结构 (Selective structure)三程序设计(program desig
12、n)2022/9/22.分支语句(Switch statement)分支语句的结构为:switch 分支表达式 case 条件表达式 语句序列 case条件表达式1, 条件表达式2, 条件表达式3, 语句序列 otherwise 语句序列end(一)选择结构 (Selective structure)三程序设计(program design)分支表达式是一个变量,可以是数值变量,也可以是字符串变量。当分支表达式取值与条件表达式相同时则执行相应的语句序列。否则,执行otherwise后面的语句序列。注意:otherwise可以省略! 引入元胞(cell)数组,引入普通数组。2022/9/2【例5
13、】 根据变量 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(一)选择结构 (Selective structure)三程序设计(program design)2022/9/2【例6】某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示): price200 没有折
14、扣 200price500 3%折扣 500price1000 5%折扣 1000price2500 8%折扣 2500price5000 10%折扣 5000price 14%折扣输入所售商品的价格,求其实际销售价格。(一)选择结构 (Selective structure)三程序设计(program design)2022/9/2price=input(请输入商品价格);switch fix(price/100) %fix()向0取整 See round() case 0,1 %价格小于200 rate=0; case 2,3,4 %价格大于等于200但小于500 rate=3/100;
15、case num2cell(5:9) %价格大于等于500但小于1000 rate=5/100; case num2cell(10:24) %价格大于等于1000但小于2500 rate=8/100; case num2cell(25:49) %价格大于等于2500但小于5000 rate=10/100; otherwise %价格大于等于5000 rate=14/100;endprice=price*(1-rate) %输出商品实际销售价格(一)选择结构 (Selective structure)三程序设计(program design)2022/9/2语句格式为: try 语句组1 cat
16、ch 语句组2 endtry语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。(一)选择结构 (Selective structure)三程序设计(program design)3. 检测语句(try statement)2022/9/2【例7】矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。A=1,2,3;4,5,6; B=7,8,9;10,11,12;try C=A*B;catch C=A.*B;enddisp(C)lasterr %显示出错原因(一)选择结构 (Sel
17、ective structure)三程序设计(program design)3. 检测语句(try statement)2022/9/2(二)循环结构 (Loop structure)循环结构包含for语句和while语句。1. For语句(for statenent)格式: for loop_var = expr1:expr2:expr3 语句序列(循环体) end 注释: expr1是循环变量loop_var的初值,expr2是步长,expr3是终值。当expr2=1时可将其省略,变成 loop_var = expr1:expr3.三程序设计(program design)2022/9/2
18、2. while语句(while statement)格式: while 条件 语句序列(循环体) end当条件为真(值非零)时执行语句序列.【例8】 y=1+1/3+1/(2*n-1) ,求: (1) y=3 break; end i=i+1; end n=i-1 y=y-f(二)循环结构 (Loop structure)三程序设计(program design)2022/9/23.循环嵌套 (Nested loop) 一个循环包含在另一循环中时称为循环嵌套,也叫多重循环。嵌套重数可以是任意正整数。根据嵌套数分别称为双循环、三循环等。内循环结构称为内环,外循环结构称为外环。(二)循环结构 (
19、Loop structure)三程序设计(program design)2022/9/2【例9】求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; endendprime %变量prime存放素数(二)循环结构 (Loop structure)三程序设计(program design)3.循环嵌套 (Nested loop) 2022/9/2 与循环结构相关的语句还有br
20、eak语句和continue语句。它们一般与if语句配合使用。 break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,不再执行该循环的任何操作,接着执行该循环语句下面的语句。 continue语句通常用在循环控制中,包括for循环和while循环,用于结束当次循环,继续执行下一次循环,但不结束当前循环。一般continue语句和if语句相结合,当满足一定条件时执行 continue 语句。(二)循环结构 (Loop structure)三程序设计(program design)4. break语句和continue语句2022/9/2【例10】求100,200之间第一个
21、能被21整除的整数。程序如下: for n=100:200 if rem(n,21)=0 continue end breakendn(二)循环结构 (Loop structure)三程序设计(program design)4. break语句和continue语句2022/9/2函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。四函数文件(function file)(一)函数文件格式 (function file form)函数文件由function命令引导,其格式为: function y1,y2,yn=fname(
22、x1,x2,xm) annotate function body return 注:函数名的命名规则与变量名相同。y1,y2,ym为输出形参(参数)表,x1,x2,xn为输入形参(参数)表。当输出形参为1个时,可以省略方括号。2022/9/2四函数文件(function file)(一)函数文件格式 (function file form) 注意:任何一个函数文件中, function 命令都必须是第一个可执行命令,其前面不能有任何可执行语句。 Return 命令结束它所在函数的执行,而把控制转至主调函数或者命令窗口。否则,只有等整个被调用函数执行完毕时才会转出error(message)显示
23、出错信息message,终止程序。warning(message)显示告警信息message,程序继续运行。2022/9/2【例11】 编写函数文件求后两项之和小于任意自然数n的Fibonacci数列各项。数列为1, 1, 2, 3, 5, 8, 13, 21, function f=ffib(n) %求Fibonacci数列的函数文件 %f=ffib(n) %1999年9月30日编 f=1,1; i=1; while f(i)+f(i+1)n f(i+2)=f(i)+f(i+1); i=i+1; end f(end)=;将以上函数文件以文件名ffib.m存盘,然后在MATLAB命令窗口输入以
24、下命令,可求小于2 000的Fibonacci数。 ffib(2000)四函数文件(function file)2022/9/2(二)函数调用 (function call) 函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。函数调用的一般格式是:fname(x1,x2,xm) y1,y2,yn=fname(x1,x2,xm)其中:y1,y2,yn为输出实参表 x1,x2,xm为输入实参表四函数文件(function file)2022/9/2【例12】 利用函数文件,实现直角坐标(x,y)到极坐标(, )的转换。 Function
25、 file: tran.m: function gama,theta=tran(x,y) gama=sqrt(x*x+y*y); theta=atan(y/x); Main programmain1.m: x=input(Please input x=:); y=input(Please input y=:); gam,the=tran(x,y); gam the已知转换公式如下:矢径: = sqrt(x*x+y*y)幅角: = atan(y/x)四函数文件(function file)2022/9/2【例13】 利用函数的递归调用(调用自己),求n!。 function f=factor(n
26、) if n=1 f=1; else f=factor(n-1)*n; end return; %返回 Main program main2.m for i=1:10 fac(i)=factor(i); end facRunning results: fac = Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10 504 40320 362880 3628800注:Matlab的factorial()函数计算正整数的阶乘。factorial(4)=4!=24prod(X)为X的所有元素之积。四函数文件(function file)
27、2022/9/2利用函数的递归调用,求n!的改进程序。 function f=factor1(n) %首先判断输入参数n是否为非负整数 if (isnumeric(n)=0) | (n0) | (n=round(n) disp(参数必须是非负整数) return; %返回 end if ns=clock;A=1,2;3,4;B=5,6;7,8;x=A/B,e=clock; t=e(6)-s(6) date %返回当前日期 日-月-年,例如 07-Oct-2015,时间超过一天时要用它计时。六计时2022/9/2 num2str Convert number to string数值转字符串。 int2str Convert integer to string整数转字符串。 mat2str Convert matrix to string矩阵转字符串。 str2num Convert string to number字符串转数值。 hex2num Convert hexadecimal number string to double-precision number十六进制数字串转双精度数值。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 25454-2026电鸣乐器均衡类音效装置通用技术要求
- 【完整版主题班会课件】交通安全教育主题班会课件
- 辽宁省阜新市2026-2027学年高二上学期开学考试语文试卷(含答案)
- 免疫接种测试题及参考答案
- 2026年小吧掌童话测试题及答案
- 2026年农药配置测试题及答案
- 2026年论语名著测试题及答案
- 2026年汉语测试题加答案
- 2026年杜蕾斯恋爱测试题及答案
- 2026年学生辅导前测试题及答案
- 湖南文艺出版社四年级上音乐全册教案
- 2026秋新版苏教版小学科学四年级上册教学设计(附目录)适用于新课标
- 高压电工证考试题库及答案(完整版)
- 代领工资授权委托书范本
- 2025年分布式光伏系统初始全投资成本分析
- 2026年信号集中监测试题及答案
- 实验室常用95个记录表格
- 2026年4月自考13000英语(专升本)试题及答案
- 2026年长沙电力职业技术学院单招试题
- 教师反诈培训
- 拟派招标代理人员组织架构及岗位职责
评论
0/150
提交评论