What you are describing in your ideal solution is very similar to what is provided by the
make
programand makefiles. A makefile essentially expresses a dependency graph from a set of output files, through a set of intermediate files, to a set of input files, along with commands to transform a file at one step to the next.
Inferring names for the various functions you mention above, you might get something like this:
ckt.mat : ckt_properties.mat
matlab -r generate_ckt.m ckt_properties.mat
freq.mat : fconfig.mat
matlab -r generate_fpoints.m fconfig.mat
result.mat : ckt.mat freq.mat
matlab -r freq_dom_sim.m ckt.mat freq.mat
red_ckt.mat : ckt.mat red_order.mat
matlab -r run_PRIMA.m ckt.mat red_order.mat
This says that
ckt.mat
depends on ckt_properties.mat
, and you can generate ckt.mat
when you need to by running matlab generate_ckt.m ckt_properties.mat
on the command line. "When you need to" means when the modification time of the source (ckt_properties.mat
) is newer than that of the target (ckt.mat
).
Now maybe you can do everything with files and makefiles, but this keeps you largely outside of Matlab's IDE. You could also do something purely within Matlab by creating a structure that mimics the aspects of the filesystem that make relies upon, namely file names, modification times, and contents. In other words, create structures that bind a matrix and a modification time (perhaps held as a simple scalar) under a name. Then you would need another structure that encodes the dependency relationships, which is essentially a list of tuples containing a target structure, a list of source structures, and a transformation function. All this is doable (and might even have been done, I don't know), but it might be easier to just use makefiles.
.mat
file? – Milind R Feb 27 at 3:10fconfig.mat
as a parameter togenerate_fpoints.m
. Unable to find a reference for that usage. – Milind R Feb 27 at 5:32