4

我希望 MATLAB 告诉我是否有一个输入文件(.m 文件),其中包含一些变量及其编号(即 , a = 5, ) b = 6c = 7以便我可以在另一个程序中使用该 .m 文件(主 .m 文件)即使用这些变量来计算S = a + b + c. 然后如何从主文件中读取输入文件?假设输入文件称为 INP 和主 MAIN。

4

6 回答 6

7

这在 MATLAB 中通常不是很好的做法。在您的示例中,包含输入变量的文件将是一个脚本。和你的主文件一样。正如 ScottieT812 所建议的,当从另一个脚本运行一个脚本时,MATLAB 不会出错,但在某些情况下可能会出现奇怪的错误。(运行时编译有困难,跨脚本变量名冲突)

更好的选择是将输入脚本转换为返回感兴趣变量的函数

function [a,b c] = inputs
a = 5;
b = 6;
c = 7;

然后可以在 main.m 脚本中调用这个函数。

% main.m
[a,b,c] = inputs;
s = a+b+c;
于 2008-10-09T02:02:45.037 回答
3

如果您的“输入”文件是 m 文件,只需使用“主”m 文件中的文件名即可。例如,您可能有一个名为 input.m 的文件,如下所示:

% File: inputs.m
a = 5;
b = 6;
c = 7;

然后,您可以像这样在文件 main.m 中使用它:

% File: main.m
inputs;
S = a + b + c;
于 2008-10-09T00:22:18.437 回答
3

对于这类东西(以后很容易调整的参数),我几乎总是使用结构:

function S = zark
    S.wheels = 24;
    S.mpg = 13.2;
    S.name = 'magic bus';
    S.transfer_fcn = @(x) x+7;
    S.K = [1 2; -2 1];

然后您可以返回大量数据而无需执行 [a,b,c,d,e,f]=some_function; 之类的操作。

结构的一个好处是您可以动态地处理它们:

>> f = 'wheels';
>> S.(f)

ans =

    24
于 2008-12-10T17:14:15.497 回答
2

听起来您想要一些脚本使用的全局配置信息。通常,创建函数并将值作为参数传递要好得多,但有时按照您建议的方式做事是有意义的。实现此目的的一种方法是将信息保存在文件中。请参阅 Matlab 文档中的“加载”和“保存”。

于 2008-10-10T23:51:49.060 回答
0

如果数据脚本只是一个脚本,您可以直接从函数或另一个脚本中调用它。不需要额外的命令。例如:

%mydata.m
a = 1;
b = 2;


%mymain.m
mydata
whos
mymain

>>mymain
名称大小字节类属性

a 1x1 8 双
b 1x1 8 双

这也适用于脚本以外的功能

%foo.m
函数 foo mydata
谁是
>>foo

名称大小字节类属性

a 1x1 8 双
b 1x1 8 双

一般来说,最好使用 MAT 或其他数据文件来处理这类事情。

于 2008-11-21T15:46:53.607 回答
0

我在尝试为我的工作创建 MATLAB 软件的运行时编译版本时遇到了KennyMorton提到的确切问题。该软件广泛使用 m 文件在函数之间传递参数。此外,我们动态创建了这些 m 文件,部署的 MATLAB 版本不能很好地处理这些文件。我们的解决方法是:

  • 将参数保存到不带 .m 扩展名的文件中
  • 读取和评估文件的内容

因此,按照 OP 示例,在函数中,我们将创建一个包含参数的文本文件 INP。我们在ctfroot函数返回的目录中创建这个文件。然后,在 MAIN 中,我们将使用以下内容来检索这些参数:

eval(char(textread(fullfile(ctfroot, INP), '%s', 'whitespace', '');
于 2008-10-09T22:43:03.907 回答