我在MATLAB中创建了一个名为“stack”的GUI。它有一个.m
文件与之关联。该GUI由同一文件夹中的另一个GUI多次调用。
现在我发现“stack”是MATLAB中的一个内置函数,我需要在同一个工作目录中使用其他东西。所有对堆栈函数的调用都以某种方式通过调用stack.m
脚本来调用GUI。
我不想重命名这个,因为它在很多地方使用过。
有没有办法在不需要重命名的情况下使用内置函数?有哪些方法可以单独引用函数和脚本?
答案 0 :(得分:3)
为了重复性而略微修改Nicky's answer:在导航到存储stack.m
GUI的地图之前,运行
builtinStack = @stack();
创建一个函数句柄。通过这种方式,您可以调用builtinStack()
,就像应该调用MATLAB函数一样,每次要使用它时都不需要cd
。
由builtin
建议使用hoki不起作用,因为内置函数定义为
...诸如“ind2sub”,“sub2ind”等函数不是MATLAB内置函数.... MATLAB附带但未定义为内置函数的函数可以参考作为“MATLAB函数”......
由MathWorks Technical Support回答。这意味着像stack
这样的函数不是内置的,因为它们是用不同的语言构建的,编译后然后从MATLAB调用,但实际上是用MATLAB编写的,随附于版本中。检查这一点的主要方法是输入edit <functionname>
;当只显示注释时,函数是TMW定义的内置函数,当它显示MATLAB代码时,如stack
,它不是按照上面的定义内置的。
内置函数的一个示例是sum
,其关联的.m文件如下所示:
%SUM Sum of elements.
% S = SUM(X) is the sum of the elements of the vector X. If X is a matrix,
% S is a row vector with the sum over each column. For N-D arrays,
% SUM(X) operates along the first non-singleton dimension.
%
% S = SUM(X,DIM) sums along the dimension DIM.
%
% S = SUM(...,TYPE) specifies the type in which the
% sum is performed, and the type of S. Available options are:
%
% 'double' - S has class double for any input X
% 'native' - S has the same class as X
% 'default' - If X is floating point, that is double or single,
% S has the same class as X. If X is not floating point,
% S has class double.
%
% S = SUM(...,NANFLAG) specifies how NaN (Not-A-Number) values are
% treated. The default is 'includenan':
%
% 'includenan' - the sum of a vector containing NaN values is also NaN.
% 'omitnan' - the sum of a vector containing NaN values
% is the sum of all its non-NaN elements. If all
% elements are NaN, the result is 0.
%
% Examples:
% X = [0 1 2; 3 4 5]
% sum(X, 1)
% sum(X, 2)
%
% X = int8(1:20)
% sum(X) % returns double(210), accumulates in double
% sum(X,'native') % returns int8(127), because it accumulates in
% % int8 but overflows and saturates.
%
% See also PROD, CUMSUM, DIFF, ACCUMARRAY, ISFLOAT.
% Copyright 1984-2015 The MathWorks, Inc.
% Built-in function.
即。从最后一行也可以看出,这是一个内置的定义。请注意,键入help sum
时会看到第一个“注释”中包含的所有内容;在某种意义上,空行会破坏帮助文件。因此,只需在命令行中键入help sum
即可显示版权和内置信息,因此,为了检查函数是否为内置函数,您需要edit <functionname>
。
答案 1 :(得分:3)
免责声明:请拜托,请不要这样做。
假设您自己的stack.m
仅在搜索路径中,因为它位于当前文件夹中,那么最简单的解决方法是创建一些虚拟子文件夹,导航到它,执行Matlabs stack
函数(这是当前搜索路径中唯一的stack
并导航回来。
我在这里以magic
:
function a= magic
n=5;
cd dummy
a= magic(n);
cd ..
其中dummy
是子文件夹的名称。