2013-10-04 89 views
0

我有2个matlab程序:prog1.m和prog2.m从一个文件导入变量到另一个MATLAB

我必须在这两个程序中使用2-D矩阵M.

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

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

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

我有保存的(100份)prog1.m,其中包含M也将用于prog2.m中。有没有一种方法可以将M从prog2.m加载到prog1.m中?

我想在prog2.m中添加一些代码,它会自动从prog1.m中加载M. PS:我是很新的MATLAB

+0

您无法从m文件“加载”变量。但是,您可以保存并从mat-file中加载矩阵M.你应该检查'save'和'load'文件 – sebastian

回答

0

如果prog1prog2不是已经有的功能,则将它们重写为函数。例如,在他们的第一行可能看起来像:

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

然后,写其中,由于文件名的第三函数,加载数据,来电prog1prog2和任选保存数据在以适当的形式(可以使用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提到的,你可以使用lsdir,弥补你要使用的文件的列表,并创建一个循环调用依次在每个文件的上述功能。

1

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

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

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

通过在主程序周围的循环中更改动态读取数据的文件的名称,可以使过程更加自动化。但是这样做的方式取决于文本文件的名称。

相关问题