MatlabM文件详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M文件是一种解释型语言,只有在运行过程中才能发现 应用程序的错误
M文件调试
M语言文件编辑器提供Breakpoints菜单进行程序调试 语言文件编辑器提供Breakpoints菜单进行程序调试
M文件调试
Breakpoints菜单中的命令用来设置各种断点,只有 Breakpoints菜单中的命令用来设置各种断点,只有 设置了断点的应用程序才能进行调试
主程序文件调用y=mean(x)的方法 主程序文件调用y=mean(x)的方法
clear; A=[1,2;3,4] B=mean(A) help mean 则在命令窗显示mean函数注释的帮 则在命令窗显示mean函数注释的帮 助信息
函数文件例2 函数文件例2:比较两个数大小
function nummax(a,b) if(a<=0|b<=0) disp('input error'); elseif a>b fprintf('the large number is %f',a); elseif a<b fprintf('the large number is %f',b); else fprintf('%f=%f',a,b); end
函数文件(相当于C 函数文件(相当于C语言的子函数)
函数文件供主程序文件调用,必须指定函数名和 输入输出参数,并由主程序文件中语句序列给出 一系列操作,从而生成所需数据 函数文件格式一般包括以下部分: (1)函数定义行:表明该m文件包含一个函数, )函数定义行:表明该m 函数名, 且为其定义函数名 且为其定义函数名,输入参数和输出参数 function y=mean(x) y=mean( (2)帮助信息:处在文件中的第二行,应该反 映该m 映该m文件概括性信息 %求平均值
子函数:相当于C 子函数:相当于C语言中函数的递归调用
在函数文件中可以包含多个函数,其中第一个函数称为主函数, 在函数文件中可以包含多个函数,其中第一个函数称为主函数, 其函数名与文件名相同, 函数文件中的其他函数称为子函数, 其函数名与文件名相同,在M函数文件中的其他函数称为子函数, 它只能由这一函数文件中的主函数或其他子函数引用
保留变量实例
function y=persistent_example(x) % PERSISTENT_EXAMPLE 保留变量使用示例 for i=1:x y=myfun; end function y=myfun % 子函数 % persistent关键字的使用 persistent关键字的使用 persistent count; % count记录函数调用的次数 count记录函数调用的次数 if (isempty(count)) count=1; else count=count+1; end str=sprintf('第%d次调用该函数',count); str=sprintf('第%d次调用该函数',count); disp(str); y=count;
局部变量和全局变量
局部变量:在M 局部变量:在M函数内部声明并使用的变量 只在本函数范围内有效 仅能在函数调用执行期间被使用,一旦函数结束运行,则 变量占用的内存空间自动释放,变量的数值也不存在了
局部变量的例子 function local % LOCAL察看局部变量的例子 LOCAL察看局部变量的例子 x=rand(2,2); y=zeros(2,2); z='函数中的变量'; z='函数中的变量'; u={x,y,z}; disp(z) whos 运行局部变量的例子 >> local 函数中的变量 Name Size Bytes Class u 1x3 256 cell array x 2x2 32 double array y 2x2 32 double array z 1x6 12 char array Grand total is 31 elements using 332 bytes >> whos >>
(2Байду номын сангаасM文件模式
将MATLAB语句构成的程序存储成以m为扩展名的 MATLAB语句构成的程序存储成以m 文件,然后再执行该程序文件,这种工作模式 称为程序文件模式.
M语言文件可以分为主程序文件和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的. M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m. MATLAB提供了meditor编辑器编辑M文件 注意: (1)不可用汉字命名(若用汉字命名虽然可以打开M文 件,但是编译运行时会出错); (2)文件名不可与MATLAB内置函数 重名; (3)文件名不可以以数字命名.
4.5000
2 >> [a,s]=ourstats(A) a = 2.5000 3.5000 s = 1.5000 1.5000
4.5000 1.5000
调用该函数时,将输出参数 依次写在一个向量中, 若输出参数的个数与函数定 义的输出参数个数不一致时, 将计算得到的前几个输出参数 作为返回值, 若输出参数的个数等于指定 的输出参数个数时,计算结果 依次赋值给不同的变量.
M文件调试
M文件的调试
可以在文件编辑器中进行
M语言的文件编辑器不仅仅是一个文件编辑器,还是 一个可视化的调试开发环境
可以在命令行中结合具体的命令进行
M文件调试
应用程序的错误
语法错误
包括词法或者文法的错误
运行时的错误
指程序运行过程中得到的结果不是用户需要的结果
程序的调试是在程序无法得到正确结果时进行程 序修正的唯一手段
主程序文件(脚本文件) 主程序文件(脚本文件)
相当于C 相当于C语言的主函数 主程序文件没有输入参数和输出参数. 执行主程序文件时,文件中的指令或者命令 按照出现在脚本文件中的顺序依次执行. 主程序文件主要由注释行和代码行组成:
M文件的注释行需要使用%,定义符注释定义符 仅能影响一行代码 程序执行的结果将显示于命令窗中
子函数应用例1 子函数应用例1 function[avg,med]=newstats(u) % NEWSTATS计算均值和中间值 NEWSTATS计算均值和中间值 n=length(u); avg=mean(u,n); avg=mean(u,n); med=median(u,n); med=median(u,n); function a=mean(v,n) % 计算平均值 a=sum(v)/n; function m=median(v,n) % 计算中间值 w=sort(v); %从小到大排序 %从小到大排序 if rem(n,2)==1 m=w((n+1)/2); else m=(w(n/2)+w(n/2+1))/2; end % 主函数 % 调用子函数 % 调用子函数 % 子函数 % 子函数
保留变量
这类变量在MATLAB中被声明为persistent 这类变量在MATLAB中被声明为persistent 这类变量在函数退出时不被释放,当函数再一次 被调用时,变量保留上次退出时的值 保留变量的特征 (1)变量仅能在声明变量的函数内使用,其他 函数不能直接使用保留变量 (2)函数执行退出后,MATLAB不清除保留变量 )函数执行退出后,MATLAB不清除保留变量 占用的内存 (3)当函数被清除或者重新编辑后,保留的变 量被清除
函数文件例1: 函数文件例 :求均值
function y=mean(x) %求平均值 (3)函数体:函数所用计算过程和输入输出参数赋值的 MATLAB代码; MATLAB代码; 这里可以为调用函数,流程控制,交互式输入输出,计算, 这里可以为调用函数,流程控制,交互式输入输出,计算, 赋值等. 赋值等. [m,n]=size(x); if m==1 y=sum(x)/n; else y=sum(x)/m; %把每一列做平均值运算 %把每一列做平均值运算 end
局部变量和全局变量
使用global关键字创建全局变量时有三种情况 使用global关键字创建全局变量时有三种情况
(1)若声明为全局的变量在当前空间和全局空间都 不存在,则创建一个新的变量,然后为这个变量 赋值为空数组,该变量同时存在于局部工作空间 和全局工作空间 (2)若声明为全局的变量已经存在与全局空间中, 则不会在全局工作空间创建新的变量,其数值同 时赋值给局部工作空间中的变量 (3)若声明为全局的变量存在于局部工作空间中, 而全局工作空间不存在,则系统会提示一个警告 信息,同时将局部的变量" 信息,同时将局部的变量"挪"到全局工作空间 中
保留变量
>> persistent_example(1) 第1次调用该函数 ans = 1 >> persistent_example(3) 第2次调用该函数 第3次调用该函数 第4次调用该函数 ans = 4
在MATLAB命令行中键入指令: >> clear all 则所有的变量都会被清除 >> persistent_example(3) 第1次调用该函数 第2次调用该函数 第3次调用该函数 ans = 3
输入输出参数(续)
运行例4 运行例4-15 >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> [a,s,r]=ourstats(A) a = 2.5000 3.5000 4.5000 s = r = 1.5000 1.5000 1.5000 >> a=ourstats(A,0.1) a = 2.5000 3.5000
M文件及程序调试
本章详细讲解利用M 本章详细讲解利用M语言进行编程的方法 讲述的主要内容: 主程序文件 函数文件 M文件的调试
MATLAB的工作模式 的工作模式
(1)指令驱动模式
即在MATLABM命令行窗口下用户输入单行指令时, 即在MATLABM命令行窗口下用户输入单行指令时, MATLAB立即处理这条指令,并显示结果,这就 MATLAB立即处理这条指令,并显示结果,这就 是MATLAB命令行方式. MATLAB命令行方式. 缺点:命令行方式程序可读性差,而且不能存 缺点:命令行方式程序可读性差,而且不能存 储,当处理复杂问题和大量数据时很不方便. 储,当处理复杂问题和大量数据时很不方便.
全局变量和局部变量实例
函数文件: function y=add3(x) global c d;
%切记:声明两个或两个以上全局变量时, 变量之间用空格隔开,不可用逗号隔开
主程序文件: clear; global c d; c=0; d=0; a=5; b=add3(a); c=c+1 d=d+1
y=x+3; c=x; d=y;
函数文件例3 函数文件例3:多个输入参数
function[avg,stdev,r]=ourstats(x) % ourstats多输入输出参数示例 ourstats多输入输出参数示例 % 该函数计算处理矩阵,得到相应的均值,标准差和矩阵的秩 [m,n]=size(x); if m==1 m=n; end % Average avg=sum(x)/m; % Sandad deviation stdev=sqrt(sum(x.^2)/mstdev=sqrt(sum(x.^2)/m-avg.^2); % Rank r=rank(x);
提供的自动断点
Stop if Error Stop if Warning Stop if NaN or Inf Stop if All Errors
自动断点可以在程序中设置,当程序运行过程中发生了错误 或警告,则程序运行中断,进如调试状态
局部变量和全局变量
全局变量:在函数之外定义的变量 可以为本文件中其他函数所共用 MATLAB将全局变量保存在特殊的工作空间进行统 MATLAB将全局变量保存在特殊的工作空间进行统 一维护,管理 将变量声明为全局变量的方法 在使用变量前,用关键字global声明 在使用变量前,用关键字global声明 例:声明全局变量XY 例:声明全局变量XY >> global XY >> whos Name Size Bytes Class XY 0x0 0 double array (global) Grand total is 0 elements using 0 bytes
相关文档
最新文档