实验2 M文件的编写、函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
statements 3
M文件及函数的编写
【例3】 编写M文件求
为何要将第 三种情况放 在最后?
函数名:example1_3.m
A=[]; %初始化为空矩阵 for k=1:5 for j=1:5 if k==j A(k,k)=5; elseif abs(k-j)==1 A(k,j)=1; else A(k,j)=0; end end end
M文件及函数的编写
第一部分:M文件(可直接运行的文件)编写
新建M文件 一般过程 编写指令 调试运行 用户在编制此类文件时,只需把所要执行的命令 按行编辑到指定的文件中,程序运行时, MATLAB按行执行这些指令。
M文件及函数的编写
几点规则:
● 建立好的书写风格,保持程序的可读性。 ● m为文件的扩展名,在低版本的MATLAB中 还要注意文件名不超过8位,文件名和变量的命 名规则相同。 ● 以符号%引导的行是注释行、不可执行, 可供heIp命令查询; ● 不需要用end语句作为M文件的结束标志;
【例4】演示if的程序,检测输入数据.
函数名:example2_4.m
score=input('Please input your score:'); if score>=0 & score<60 disp('You must work harder!'); elseif score>=60 & score<80 disp('Not bad!'); elseif score>=80 & score<90 disp('Great!'); elseif score>=90 & score<=100 disp('Excellent!'); else disp('Are you kidding?'); end
MATLAB程序: Example7.m
M文件及函数的编写
第二部分: MATLAB 函数的编写
函数是
MATLAB 编程的主流方法 M-script 文件
除了函数外,还可以采用 M-script
适合于小规模
【例 8】若最大值不为 10000,需修改程序对 m 和 10000 值的设置,不适合于M-script.
•无需修改程序
M文件及函数的编写
【例9 】函数的递归调用:阶乘
1.写好程序,存成my_fact.m文件 function k=my_fact(n) if n>1 k=n*my_fact(n-1); elseif n==0|n==1 k=1; else error(' U input a wrong parameter!') end 2.在command window中调用:num=my_fact(11) MATLAB函数为: prod(1:1000)
M文件其实是一个像命令集一样的ASCII(纯文本) 码文件。正是M文件的这个特点造就了MATLAB 强大的可开发性和可扩展性。 命令式(M_Script) M文件的两种形式 函数式(Function)。 命令式文件就是命令行的简单叠加,MATLAB会 自动按顺序执行文件中的命令。 函数式文件主要用以解决参数传递和函数调用的 问题。
【例5】显示switch-case的程序。生成一个 在[0, 6]上的均匀分布的随机数,以此作 为掷骰子出现的点数,出现1,3,5显示奇数, 出现2,4,6显示偶数,出现0则显示错误.
函数名:example2_5.m disp('Play dice,please!') %提示输入信息 Num=round(6*rand) %利用round函数产生在[0,6]上 服从均匀分布的随机数 switch Num case {1,3,5}, disp('Odd') case {2,4,6}, disp('Even') otherwise, disp('You are out!') end
M文件及函数的编写
(3)中断命令break break语句常常用在循环语句中。通过使用 break语句,可不必等待循环的自然结束,而 根据循环只设的条件来判断是否跳出循环。 (4)等待键盘输入 keyboard 使程序进入暂时等待状态,但并没退出执 行,可以修改参数,和运行其他指令等。 (5)显示文字或数组 disp
+
-
×
÷
(A)
(B)
(C)
(D)
情形 (C)、(D) 无解。 (A)、(B) 实际上是同一个问题。
计算机解法
穷举法
% 程序的逻辑: n=0; % n 用来记录解的个数 for a=1:9 for b=1:9 for c=1:9 for d=1:9 for e=1:9 for f=1:9 for g=1:9 for h=1:9 for i=1:9 如果 a,b,c,d,e,f,g,h,i 互不相等,且 100*a+10*b+c+100*d+10*e+f=100*g+10*h+i, 则输出这个解,并令 n=n+1; end;end;end;end;end;end;end;end;end;end
M文件及函数的编写
(1) MATLAB 语言的函数的基本结构
(1)函数定义行(关键字function) function [out1,out2,..]=funcname(in1,in2,..)
注释段 输入返回变量的检测 函数体语句 •输入和输出(返回)的参数个数分别由nargin和nargout 两个MATLAB保留的变量来给出。 若一个function作为一个M文件存储,切记其存 储文件名应和函数名一样! (2)第一行帮助行, 以(%)开头,作为lookfor指令搜索的行
M文件及函数的编写
【例8】前面的要求,m, 10000 步骤:
1.写好程序,存成findsum.m文件
function [s,m]=findsum(k) s=0; m=0; while(s<=k) m=m+1; s=s+m; end
2.在command window中调用: [s,m]=findsum(10000)
使用tic和toc函数, 测试一下该函数的运行效率。 显式程序运行的时间。 tic; num=my_fact(500); toc tic; num=prod(1:1000); toc
M文件及函数的编写
函数编写注意事项: 函数的函数名与存储名要一致。 函数名首字符必须为字母。其后可为字 母数字下划线等。长度小于31个字符。 初学者请一个文件中只写一个函数。 建议每个函数单独写成一个文件,由主 程序调用,主程序不要写成函数形式(若 写成函数形式,则所有变量都是内部变 量,不会出现在workspace中)。
if
M文件及函数的编写
logical expression 1
if logical expression statements 1 statements end elseif logical expression 2 if logical expression statements 1 else else statements 2 end end statements 2
M文件及函数的编写
(2)等待用户反应命令pause 此命令用于使程序暂时终止运行,等待用户按任 意键后继续运行。 此函数的调用形式如下: Pause 暂停程序等待回应; Pause(n) 程序运行中等待n秒后继续运行; Pause on 显示其后的 Pause命令,并且执行 pause命令; Pause off 显示其后的pause命令,但不执 行该命令。
M文件及函数的编写
MATLAB基本控制流 (1) for循环结构 for循环语句的一 般格式如下: 循环变量 一般为数组
for v = expression (表达式) commands end 成对出现 (执行语勾) 循环体
M文件及函数的编写
(2) while 循环结构
While expression(条件式) statements End 成对出现
M文件及函数的编写
【例1】用循环求解 1.使用for循环: s=0; for i=1:100 s=s+i; end end 3.使用matlab函数直 接对向量进行求和:
函数名:example1_1.m
2.使用while循环: s=0;i=1; %初始化 while i<=100 s=s+i; i=i+1;
【例6】 输入三角形的三条边,求面积。
程序:triarea.m
运行: 请输入三角形的三百度文库边:[4 5 6] 得面积: 9.9216
【例7】穷举法的计算机实现在下面的 4 个算
式中,每个方框表示一个非零数字,且任意两个数 字互不相同,问 (A)、(B)、(C)、(D) 这四种情形分 别有多少个解?
【例10】写一个递归函数,计算行列式的值。 函数定义为:detA=mydet(A),其中A为输入矩阵。 (1)输入为长方阵时,输出结果为:“输入矩阵A必 须是方阵!”; (2)输入为方阵时,输出该方阵的行列式; (3)将自己写的函数与matlab的内部函数det比较计算 结果。计算结果一致才证明你自己的程序编写成功。 该程序供已经学习了《线性代数》课程的同学学习。
如下两个方法都能生成相同的数组y, 但方法2的效率要高. 方法1:按循环生成数组y for t=1:5000 y(t) = sin(2*pi*t/10); end 方法2:先生成数组y,Matlab的函数直 接对数组进行运算,效率比方法1要优. t = 1:10000; y = sin(2*pi*t/10);
实验2 M文件及函数的编写
注:不可能在有限的时间能将matlab的函数 全部讲到。一边学习一边会接触一些新的函数。
M文件及函数的编写
MATLAB语言特点:
高度简洁,封装化 一种解释型的编程语言 “读一句,执行一句” 效率不高,特别在遇到循环语句时 程序运行时离不开MATLAB环境
M文件及函数的编写
M文件及函数的编写
(3)函数体说明及有关注解以(%)开头,用 以说明函数的作用及有关内容 (4)函数体语句 函数体内使用的除返回和输入变量这些在 function语句中直接引用的变量以外的所有 变量都是局部变量,即在该函数返回之 后,这些变量会自动在MATLAB的工作空 间中清除掉。如果希望这些中间变量成为 在整个程序中都起作用的变量,则可以将 它们设置为全局变量。
M文件及函数的编写
● 在运行此函数之前,需要把它所在目录加到 MATLAB的搜索路径上去或将文件所在目录设 为当前日录。新版本会提示,老版本则出错。 ● 运行一个程序,有多种方式。 ● 强烈要求:从本节课开始,后续同学们写的 所有的程序和代码,都在m文件中写,运行。 以便储存、修改、重复运行!!! 不要在comman window中运行多条指令,避 免出错,不便于修改与调试!!!
s=sum(1:100)
M文件及函数的编写
【例2】用循环求解求最小的 m, 在这种情况下,最好用while. 判断条件是什么? 和小于10000时则一直累加 s=0;i=0; while s<=10000 i=i+1; s=s+i; end [s, i]
函数名:example2_2.m
(3)if-else-end 结构
M文件及函数的编写
(4) 分支语句switch-case-otherwise Switch expression case case_1 (commands 1) case case_2 (commands 2) …… case case_k (commands k) otherwise, (commands) end 注意 在执行过程中,只 执行一个case后面的命令 并跳出开关, 程序在end后继续执行。
M文件及函数的编写
M文件及函数的编写
3. 交互式输入
(1) 用户输入提示命令input input 命令用来接收用户从键盘输入数据、 字符串或表达式,并接收输入值。其常用格 式: (1) R=input (‘How many apples’) 运行此命今后,将给出文字提示,并等待键盘 输入。输入的数字赋给变量R. (2) R=input(‘what is your name ?’,’s’) 运行此命令后,MATLAB将等待输入,并把输入 当做字符串,赋给变量R。