1

我有 2 个 matlab 程序:prog1.m 和 prog2.m

我必须在两个程序中使用二维矩阵 M。

我已经在 prog1.m 中加载了矩阵(从文本文件手动)。

我必须运行这两个程序〜100次(每次不同的矩阵)。所以现在我已经运行了 prog1.m 100 次,每次都使用不同的矩阵。

现在轮到 prog2.m 但我不想再次手动加载矩阵。

我有保存的(100 个副本)prog1.m,其中包含要在 prog2.m 中使用的 M。有没有一种方法可以将 M 从 prog2.m 加载到 prog1.m ?

我想在 prog2.m 中添加一些代码,它会自动从 prog1.m 加载 M 。PS:我对 MATLAB 很陌生

4

2 回答 2

1

做你想做的最有效的方法是使用 textscan 直接从文本文件中读取:

http://www.mathworks.co.uk/help/matlab/ref/textscan.html

如果文本文件中的格式相同,您可以一次读取一个文件,执行您的过程,然后更改名称并再次运行。

您可以通过更改在主程序周围循环动态读取数据的文件的名称来使该过程更加自动化。但是执行此操作的方法取决于文本文件的名称。

于 2013-10-04T09:47:03.657 回答
1

如果prog1并且prog2还不是函数,请将它们重写为函数。例如,其中的第一行可能如下所示:

function [out1 out2] = prog1(M)
function out = prog2(M)

然后,编写第三个函数,给定文件名,加载数据、调用prog1并可prog2选择以适当的形式保存数据(您可以使用filepartsfullfile根据输入自动创建新文件名 - 例如给定 data101.txt,返回data101_proc.mat. 这样一个函数的基本原理是这样的:

function M = prog3(fname)

M = load(fname); % or whatever method is required for loading this data 

%call prog1 and prog2
[out1 out2] = prog1(M);
out3 = prog2(M);

%make new filename
[fpath,fname2,ext] = fileparts(fname);
fname_out = fullfile(fpath, [fname2,'_out','.mat']);

%save data - depends on what outputs are and what you need to do with them later
save(fname_out, 'out1','out2','out3','M');

end

最后,正如 babaea 所提到的,您可以使用lsor dir,组成您要使用的文件的列表,并创建一个循环,依次在每个文件上调用上述函数。

于 2013-10-04T10:55:24.910 回答