如果我正确理解你的情况,你的情况是这样的:
一个文件(‘上午’):
function results = A(parameters)
% some code
一个文件(‘B.m’):
function results = B(parameters)
% some code
你想使用函数A
inside B
,您可以从函数 B 内部调用该函数:
function results = B(parameters)
% some code
otherResults = A(otherParameters)
如果您的情况与 nimrodm 所描述的类似,那么您的A.m
文件是这样的:
function results = A(paramters)
% some code
function results = C(parameters)
% code of function C
end
end
function results = D(parameters)
% code of function D
end
没有办法直接访问C
and D
从外面A
。如果您需要使用子功能 http://www.mathworks.com/help/techdoc/matlab_prog/f4-70666.html D
在外面A
,只需制作一个文件D.m
含有
function results = D(parameters)
% code of function D
end
最好从函数中删除相同的代码A
.
For a 嵌套函数 http://www.mathworks.com/help/techdoc/matlab_prog/f4-39683.html C
,在某些(但不是全部)情况下可以执行相同的操作,因为嵌套函数也可以访问函数的变量A
。在最新版本的 MATLAB(我猜是 R2010b 或 R2011a)中,编辑器以青色突出显示函数和嵌套函数之间共享的变量。如果你不使用函数的变量A
函数内部C
,只需执行与函数相同的操作D
。如果这样做,请将这些变量作为参数和/或返回值传递,并调整其余代码以反映这一点。测试您的代码,然后执行与以下相同的操作D
.
最有可能的是,你不会有案例C
,因为这是 MATLAB 中的一项高级功能。
然而,还有另一种情况,如果您不使用 MATLAB 函数,而是使用不同文件中的 MATLAB 脚本。您可以调用脚本(从命令行和另一个函数或脚本,只需通过其(文件)名称。
文件内容E.m
:
% code for script E
文件内容F.m
:
% some code
E;
使用该代码,您可以执行中的所有命令E
从内部脚本F
。当心E
and F
将共享它们的所有变量,因此如果您以类似的方式开始脚本clear all; close all; clc;
,您不能从中传递任何变量F
into E
(并且您将丢失所有结果F
调用前计算E
.
在大多数情况下,使用函数而不是脚本更好,因此这也是解决这种情况的方法:将所有内容都变成具有合适参数和返回值的函数。
edit:
当你“改变”你的问题后,这很容易。
假设你有这个功能,我会使用不同的名称,因为这样更直观理解。你有这个功能ackermann
文件里面ackermann.m
您想从脚本中调用它bigScript.m
.
文件ackermann.m
包含阿克曼-彼得 http://en.wikipedia.org/wiki/Ackermann_function函数(作为示例):
function result = ackermann(m,n)
if m == 0
result = n + 1;
elseif m > 0
if n == 0
result = ackermann(m-1,1);
elseif n > 0
result = ackermann(m-1,ackermann(m,n-1));
else
error('n has to be positive');
end
else
error('m has to be positive');
end
end
从大脚本内部,您可以调用该函数ackermann
如下(如果您希望 m = 1 且 n = 1):
A = ackermann(1,1)
就这么简单,不需要加载任何东西。但您需要记住让函数“在您的路径中可用”,最简单的方法是将脚本和函数文件保存在同一目录中。
无论如何,我感觉您是 MATLAB 新手:如果您不知道函数的作用,只需键入help functionname
(当然替换函数名称)到命令窗口中。你会注意到这个函数load
是用来加载数据文件的,而不是 m 文件(因为路径中的 m 文件会自动使用)。