我对Matlab很新。我在.m文件中定义了一个函数,我想在另一个.m文件中的.m文件中使用该函数,我想从命令窗口运行最后一个.m文件的内容。
我应该如何完成这项工作?
编辑 - 为了澄清,我在a
中有一个函数a.m
,在b.m
内部使用函数a
的脚本a.m
。我想从命令窗口在b.m
内运行此脚本,但我不知道该怎么做。 (作为旁注,如果需要,我可以将b.m
中的脚本完全转换为函数)
编辑 - 现在我只需要知道如何导入/加载matlab文件就是这样!!!
答案 0 :(得分:14)
如果我理解你的情况,你会有这样的事情:
文件(`A.m'):
function results = A(parameters)
% some code
文件(`B.m'):
function results = B(parameters)
% some code
你想在A
里面使用函数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
外部访问D
和A
。如果您需要在D
之外使用subfunction A
,请创建一个包含
D.m
function results = D(parameters)
% code of function D
end
最好从函数A
中删除相同的代码。
对于nested function C
,在一些(但不是全部)情况下也可以这样做,因为嵌套函数也可以访问函数A
的变量。在MATLAB的最新版本中(我猜R2010b或R2011a),编辑器突出显示了函数和teal中嵌套函数之间共享的变量。如果您未在函数A
内使用函数C
的变量,请执行与函数D
相同的操作。如果这样做,请将这些变量作为参数和/或返回值传递,并调整其余代码以反映这一点。测试您的代码,然后执行与D
相同的操作。
最有可能的是,您不会遇到案例C
,因为这是MATLAB中的高级功能。
但是,如果您不使用MATLAB函数,则会出现另一种情况,但MATLAB脚本位于不同的文件中。您可以调用脚本(来自命令行和其他函数或脚本,只需通过其(文件)名称。
文件E.m
的内容:
% code for script E
文件F.m
的内容:
% some code
E;
使用该代码,您可以从脚本E
内执行F
中的所有命令。请注意E
和F
将共享所有变量,因此如果您使用clear all; close all; clc;
之类的内容开始编写脚本,则无法将F
中的任何变量传递到E
(并且在调用F
之前,您将失去计算E
的所有结果。
在大多数情况下,最好使用函数而不是脚本,这也是解决这种情况的方法:将所有内容组合成具有合适参数和返回值的函数。
修改强>: 在你'改变'你的问题后,这很容易。
让我们考虑你有这个功能,我将使用不同的名称,因为这更直观易懂。您希望从脚本ackermann
调用文件ackermann.m
中的函数bigScript.m
。
文件ackermann.m
包含Ackermann-Péter函数(作为示例):
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文件是自动使用的。)
答案 1 :(得分:13)
原则上,MATLAB主张每.m
个文件使用一个函数。您可以从另一个.m
文件和MATLAB命令行调用此类函数。
您可以在一个.m
文件中定义多个函数,但只能从其他.m
文件或命令行访问第一个(或“最外层”)函数。其他函数被视为“辅助”函数,只能在此特定.m
文件中调用。
答案 2 :(得分:11)
对于其他搜索此问题的人,就像我一样,只需输入:
addpath('[Path name of mat file]');
这将告诉Matlab如何找到该功能。要验证,只需输入:
which [function name]
如果成功,它应列出您刚刚添加的路径名。