文档库 最新最全的文档下载
当前位置:文档库 › 函数文件,函数调用的理解——通过Q函数和erfc函数的关系来理解

函数文件,函数调用的理解——通过Q函数和erfc函数的关系来理解

函数文件调用的理解——通过Q 函数和erfc 函数的关系来理解。

1. 问题描述:在使用Matlab 时,有时遇到某个函数不在库函数中,不能直接调用,或者根据需要而编辑一个函数来调用,这就需要定义一个函数,即函数文件。编辑调试成功之后,就以象库函数一样方便地调用了。

2. 下面通过Q 函数的调用的例子来理解。

2.1 例子:求解:p Q = 式-1 2.2 分析:Matlab 中没有Q 函数,所以此时不能直接使用Q 函数,解决方法有两种,一种是根据Q 函数与互补误差函数erfc 之间的转换关系(见式-2和式-3)将Q 函数写成erfc 函数(matlab 中有此函数)的形式;

()1

2

Q x erfc ??= 式-2 ()(

2erfc x Q = 式-3

另一种就是通过上述两者的关系定义一个函数文件即Q 函数文件,这样就可以直接使用Q 函数了。

2.3 解决:

2.3.1 解决方法一:直接转换方法

已知式-1p Q

=

即x =,根据式-2,也即()12Q x Q erfc ==,

得到12p Q erfc == 式-4

这样例子式-1中Q 函数的求解就变成了erfc 函数的求解了。

相应Matlab 编程实现:

p_error=erfc(sqrt(gamma))./2; %对应式-4

%%Matlab 中没有q 函数,此时无法直接运行p_error=q(sqrt(2.*gamma))。

2.3.2 解决方法二:函数调用方法

已知式-1p Q =,在matlab 中不能直接使用Q 函数,根据式-2定义一个Q 函数,然后就直接调用Q 函数了。

相应Matlab 编程实现:

下面是Q 函数文件:

function y=q(x); %对应Function [输出形参列表]=函数名(输入形参列表)

y=erfc(x./(sqrt(2)))./2; %对应“程序语句段”(根据式-2)

调用Q 函数:

p_error=q(sqrt(2.*gamma)); %即可以直接运行Q 函数了

%%等同于上面的p_error=erfc(sqrt(gamma))./2; %对应式-4

注意:x =

2.4 小结

通过实际的例子,讲述了如何定义一个函数。在本例中,采用两种解决方法,但两者的本质是一样的,都是运用了两个函数的转换关系,只不过第一种是采用命令文件的形式,第二种采用函数文件的形式,关于命令文件和函数文件以及二者的区别见下。

3. 背景知识

Matlab中的M文件,从功能上可以分为两类:命令文件和函数文件。

3.1 命令文件

命令文件又称为脚本文件,它没有输入输出参数,实际上是一串指令的集合,类似于DOS下的批处理文件。

3.2 函数文件

函数文件是另一种格式的M文件,每个函数文件都定义一个函数。编辑调试成功后就可以库函数一样方便地调用,从而极大地扩展了Matlab的能力。

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

Function [输出形参列表]=函数名(输入形参列表)

注释说明语句段

程序语句段

一旦编写好函数文件,就可以调用该函数进行计算了,函数调用的格式为:

[输出实参列表]=函数名(输入实参列表)

3.3 命令和函数文件的区别

函数文件和命令文件的区别之处在于:函数文件可以传递函数,而命令文件不具备这种功能;同时,命令文件中的变量都是全局变量,文件执行完后,这些变量还是有效变量,仍然保存在工作区中。而函数文件中定义和使用的变量除非经过特殊声明,都是局部变量,只在本函数中才有效,当函数文件执行完成后,这些变量将被清除,即变成无效变量。

这样,就保证了在使用函数文件时,只要关心函数的输入和输出即可。而不用担心函数文件执行结束后,文件中的变量会对后续工作造成影响。

注:根据作用域的不同,可以将程序中的变量分为局部变量和全局变量。命令文件中的变量都是全局变量,而函数文件中的内部变量是局部变量,只能在本函数的范围内使用,它是不能直接被另一个函数文件调用的。如果想在函数中实现变量函数间的调用,则要使用全局变量。

参考:背景知识来自《MATLAB教程》,罗建军主编,杨琦副主编。电子工业出版社。

相关文档