我对Matlab很新.我在.m文件中定义了一个函数,我想在另一个.m文件中的.m文件中使用该函数,我想从命令窗口运行最后一个.m文件的内容.
我该怎么做呢?
编辑 -澄清,我有一个函数a里面a.m了,里面的脚本b.m,使用此函数a里面a.m.我想b.m从命令窗口中运行这个脚本,但我不知道该怎么做.(作为旁注,b.m如果需要,我可以完全将脚本转换为函数)
编辑 - 现在我只需要知道如何导入/加载matlab文件,就是这样!
Ego*_*gon 16
如果我理解你的情况,你会有这样的事情:
一个文件(`A.m'):
function results = A(parameters)
% some code
Run Code Online (Sandbox Code Playgroud)
一个文件(`B.m'):
function results = B(parameters)
% some code
Run Code Online (Sandbox Code Playgroud)
你想在A里面使用函数B,你可以从函数B里面调用那个函数:
function results = B(parameters)
% some code
otherResults = A(otherParameters)
Run Code Online (Sandbox Code Playgroud)
如果您的情况类似于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
Run Code Online (Sandbox Code Playgroud)
无法直接访问C和D从外部访问A.如果你需要使用外面的子功能 ,只需制作一个包含的文件DAD.m
function results = D(parameters)
% code of function D
end
Run Code Online (Sandbox Code Playgroud)
并且最好从功能中删除相同的代码A.
对于嵌套函数 C,可以在一些(但不是全部)情况下完成相同的操作,因为嵌套函数也可以访问函数的变量A.在MATLAB的最新版本中(我猜R2010b或R2011a),编辑器突出显示了函数和teal中嵌套函数之间共享的变量.如果不使用函数A内部的函数变量C,只需对函数执行相同的操作D.如果这样做,请将这些变量作为参数传递和/或返回值,并调整其余代码以反映这一点.测试你的代码,之后,做同样的事情D.
最有可能的是,你不会有案例C,因为这是MATLAB中的一项高级功能.
但是,如果您不使用MATLAB函数,而是使用不同文件中的MATLAB脚本,则会出现另一种情况.您可以调用脚本(来自命令行和其他函数或脚本,只需通过其(文件)名称).
文件内容E.m:
% code for script E
Run Code Online (Sandbox Code Playgroud)
文件内容F.m:
% some code
E;
Run Code Online (Sandbox Code Playgroud)
使用该代码,您可以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
Run Code Online (Sandbox Code Playgroud)
从您的大脚本内部,您可以ackermann按如下方式调用该函数(如果您想要m = 1且n = 1):
A = ackermann(1,1)
Run Code Online (Sandbox Code Playgroud)
就这么简单,不需要加载任何东西.但是你需要记住让函数"在你的路径中可用",最简单的方法就是将脚本和函数文件保存在同一目录中.
无论如何,我觉得你是一个初学MATLAB用户:如果你不知道函数是做什么的,只需help functionname在命令窗口输入(当然替换functionname).您会注意到该函数load用于加载数据文件,而不是用于加载m文件(因为路径中的m文件是自动使用的).
nim*_*odm 14
原则上,MATLAB主张每个文件使用一个函数.m.您可以从另一个.m文件和MATLAB命令行调用此类函数.
您可以在一个.m文件中定义多个函数,但只能从其他.m文件或命令行访问第一个(或"最外层")函数.其他函数被视为'helper'函数,只能在此特定.m文件中调用.
Pho*_*iyx 12
对于其他搜索此问题的人,就像我一样,只需输入:
addpath('[Path name of mat file]');
Run Code Online (Sandbox Code Playgroud)
这将告诉Matlab如何找到该功能.要验证,只需输入:
which [function name]
Run Code Online (Sandbox Code Playgroud)
如果成功,则应列出刚刚添加的路径名.
| 归档时间: |
|
| 查看次数: |
48173 次 |
| 最近记录: |