tags:

views:

1042

answers:

3

In MATLAB, how I can run 20 files .m (M-file) automatically?

+4  A: 

Make another M-file and put all of the names of your 20 existing M-files in that.

If you want them to run on startup, put them in startup.m in the startup directory (see doc startup).

If they have systematic names, you can put the following in a loop:

[y1, y2, ...] = feval(function, x1, ..., xn)

where function is a string that you develop in the loop.

Edit: if the M-files are scripts rather than functions it is safer for future versions to use:

eval(s)

where s is the name of the script.

Ramashalanka
A: 

Answer to kigurai:

I want to run them all in a certain order and await the final outcome.

Matlabo09
this belongs in the comments or editing the original question.
MatlabDoug
@Matlabo09: for a certain order then try either Nivag's last suggestion (with a cell-array) or any of my three suggestions, they all do what you want with varying complexity.
Ramashalanka
+1  A: 

There are lots of ways, depending on what behaviour you want. MATLAB is a very flexible environment for this kind of stuff. If your files are in c:\work\myTwentyFiles, create a new file "runMyFiles.m" containing

function runMyFiles()
myDir = 'c:\work\myTwentyFiles';

d = dir([myDir filesep '*.m']);
for jj=1:numel(d)
    try
        toRun = fullfile(myDir, d(jj).name);
        fprintf('Running "%s"', toRun);
        run(toRun)
    catch E
        % Up to you!
    end
end

and then use the "-r" option to make MATLAB run this file automatically:

matlab -r runMyFiles

There are many other variations -- the hard-coded location of the MATLAB files looks unattractive for starters...

Just spotted the updated question: another option is to use a cell-array of functions to call

d = {'myfun1','myfun2', 'myfun3'};

and do something similar to the example above -- you'll need to change the definition of "toRun" to something like

toRun = fullfile(myDir, d{jj});
Nivag

related questions