matlab中m文件与m函数的学习与理解

简介:

1. m文件与m函数的区别

所谓 MATLAB 程序,大致分为两类:

1
M 脚本文件 (M-Script) 和 M 函数 (M-function), 它们均是普通的 ASCII 码构成的文件。

  M 脚本文件中包含一族由 MATLAB 语言所支持的语句,它类似于 DOS 下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符 >> 下键入该 M 文件的文件名,这样 MATLAB 就会自动执行该 M 文件中的各条语句,并将结果直接返回到 MATLAB 的工作空间。

  M 函数格式是 MATLAB 程序设计的主流,一般情况下, 不建议您使用 M 脚本文件格式编程。

  MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下:

1
2
3
4
function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
输入、返回变量格式的检测
函数体语句

2.输入变量和返回变量的个数

  这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。

  返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。

3.注释语句的使用

  注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法。

1
2
3
4
假设我们想生成一个 nxm 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为  1 /(i+j- 1 )。我们想在编写的函数中实现下面几点:
<em>如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n
在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明
检测输入和返回变量的个数,如果有错误则给出错误信息</em> 

  如果调用时不要求返回变量,则将显示结果矩阵。其实在编写程序时养成一个好的习惯,无论对程序设计者还是对程序的维护者、使用者都是大有裨益的。


4. 示例程序


  采用 MATLAB 函数编写格式和上述要求,我们可以编写出一个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function A=myhilb(n, m)
%MYHILB a demonstrative M-function.
% A=MYHILB(N, M) generates an N by M Hilbert matrix A.
% A=MYHILB(N) generates an N by N square Hilbert matrix.
% MYHILB(N,M) displays ONLY the Hilbert matrix, but  do  not  return  any
% matrix back to the calling function.
%
%See also: HILB.
 
% Designed by Professor Dingyu XUE, Northeastern University, PRC
5  April,  1995 , Last modified by DYX at  21  March,  2000
if  nargout> 1 , error( 'Too many output arguments.' ); end
if  nargin== 1 , m=n;
elseif nargin== 0  | nargin> 2
error( 'Wrong number of iutput arguments.' );
end
A1=zeros(n,m);
for  i= 1 : n
for  j= 1 :m
A1(i,j)= 1 /(i+j- 1 );
end, end
if  nargout== 1 , A=A1; elseif nargout== 0 , disp(A1); end

这样规范编写的函数用 help 命令可以显示出其帮助信息:

1
2
3
4
5
6
7
8
>> help myhilb
MYHILB a demonstrative M-function.
A=MYHILB(N, M) generates an N by M Hilbert matrix A.
A=MYHILB(N) generates an N by N square Hilbert matrix.
MYHILB(N,M) displays ONLY the Hilbert matrix, but  do  not  return  any
matrix back to the calling function.
 
See also: HILB.

  有了函数之后,可以采用下面的各种方法来调用它,并产生出所需的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> A=myhilb( 3 , 4 )
A =
1.0000  0.5000  0.3333  0.2500
0.5000  0.3333  0.2500  0.2000
0.3333  0.2500  0.2000  0.1667
>> A=myhilb( 4 )
A =
1.0000  0.5000  0.3333  0.2500
0.5000  0.3333  0.2500  0.2000
0.3333  0.2500  0.2000  0.1667
0.2500  0.2000  0.1667  0.1429
>> myhilb( 4 )
1.0000  0.5000  0.3333  0.2500
0.5000  0.3333  0.2500  0.2000
0.3333  0.2500  0.2000  0.1667
0.2500  0.2000  0.1667  0.1429

5.MATLAB 工具箱编写技巧

放入一个目录中的为某种目的专门编写的一组 MATLAB 函数就可以组成一个工具箱。 从某种意义上说,任何一个 MATLAB 语言的使用者都可以是工具箱的作者。在一个工具箱中,应该有一个名为 Contents.m 的文件,用来描述工具箱中所有 MATLAB 函数的名称和意义。

  

1
2
3
在该文件中第  1  行应该给出该工具箱的名称,在第 2 行中给出该工具箱的版本与修改时间等信息。
然后分类地给出该工具箱中各类函数的最基本功能。
注意,本文件中所有的语句都应该是注释语句,由百分号 % 引导,空行也应该由 % 引导。

  

6.检查matlab语法错误

  另外,因为 MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。要查出某目录中所有的M函数语法错误,首先应该用 cd 命令 进入该目录,然后运行 pcode * 命令进行伪代码转换。因为该命令会将 MATLAB 函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,将会停止翻译,给出错误信息。改正了该语法错误后,再重新执行 pcode 命令,直到没有错误为止。至少这样会保证目录下所有的程序不含有语法错误。

本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3623319.html,如需转载请自行联系原作者
相关文章
|
2月前
|
JSON 数据格式 Python
【2023最新】Matlab 保存JSON数据集文件,并用Python读取
本文介绍了如何使用MATLAB生成包含数据和标签的JSON格式数据集文件,并展示了用Python读取该JSON文件作为训练集的方法。
72 1
|
5月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
matlab学习(二)
matlab学习(二)
|
2月前
Matlab批量修改指定文件下文件名
Matlab批量修改指定文件下文件名
81 1
|
2月前
|
数据建模 Python
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(上)
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数
32 7
|
2月前
|
算法 数据建模 Python
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(下)
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数
44 3
|
2月前
|
存储 算法 Serverless
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
|
2月前
|
存储 Serverless
【matlab】matlab实现倒谱法基音频率检测和共振峰检测(源码+音频文件)【独一无二】
【matlab】matlab实现倒谱法基音频率检测和共振峰检测(源码+音频文件)【独一无二】
|
2月前
|
Python
【Python】实现MATLAB中计算两个矩形相交面积的rectint函数
Python中实现MATLAB中rectint函数的方法,该函数用于计算两个矩形相交区域的面积,并通过定义Rectangle类和calc_area函数展示了如何计算两个矩形的交集面积。
35 1
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于负相关误差函数的4集成BP神经网络matlab建模与仿真
**算法预览:** 图像显示无水印的2022a版MATLAB运行结果 **软件版本:** MATLAB 2022a **核心代码片段:** 省略展示 **理论概述:** NCL集成BP网络利用负相关提升泛化,结合多个弱模型减少错误关联。通过λ参数控制模型间负相关程度,λ&gt;0增强集成效果,提高预测准确性和系统稳健性。
|
4月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```

热门文章

最新文章

下一篇
无影云桌面