How to run the same script but for different datafiles consecutively
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
So I have the following script:
clc;
clear;
LM = xlsread('LagrangeMultiplier.xlsx','LM');
CM = xlsread('LagrangeMultiplier.xlsx','CM');
DT = xlsread('LagrangeMultiplier.xlsx','DT');
for i = 1:size(LM,2)
JPD(i,:) = exp(-1-sum(LM(:,i)))*mvncdf(DT, Inf*ones(size(DT,1),1),0,CM);
end
Basically I have datafiles named:
LagrangeMultiplier1.xlsx
LagrangeMultiplier2.xlsx
LagrangeMultiplier3.xlsx
and so on until LagrangeMultiplier100.xlsx
Currently I'm running this script manually for each file, ie, I have LagrangeMultiplier1.xlsx as the name in the script, then I copy the values from the JPD workspace into excel, then put LagrangeMultiplier2.xlsx as the datafile name and so on. How can I automate this so that MATLAB automatically runs the script for all 100 datafiles and stores all 100 arrays for JPD into the workspace?
Thanks
0 comentarios
Respuesta aceptada
Geert
el 30 de Ag. de 2013
Editada: Geert
el 30 de Ag. de 2013
@ Azzi: It is indeed not recommended to create severable variables by the
eval([ 'JPD',num2str(ii),' = JPD;'])
command. I thought Simon wanted to do it anyway, so hence I delivered ;)
@ Simon: From your screenshot it looks like your data is one-dimensional. You can hence change the code as follows to obtain what you want:
nb_files = 100;
% preallocate space for JPD
LM = xlsread('LagrangeMultiplier1.xlsx','LM');
JPD = zeros(length(LM),nb_files);
% read in all the files and store them as columns in JPD variable
for kk=1:nb_files
file=sprintf('LagrangeMultiplier%d.xlsx',kk);
LM = xlsread(file,'LM');
CM = xlsread(file,'CM');
DT = xlsread(file,'DT');
for ii = 1:length(LM)
JPD(ii,kk) = exp(-1-sum(LM(:,ii)))*mvncdf(DT, Inf*ones(size(DT,1),1),0,CM);
end
end
Más respuestas (2)
Azzi Abdelmalek
el 29 de Ag. de 2013
for k=1:100
file=sprintf('LagrangeMultiplier%d.xlsx',k);
LM = xlsread(file,'LM');
CM = xlsread(file,'CM');
DT = xlsread(file,'DT');
for i = 1:size(LM,2)
JPD(i,:) = exp(-1-sum(LM(:,i)))*mvncdf(DT, Inf*ones(size(DT,1),1),0,CM);
end
out{k}=JPD
end
3 comentarios
Ilham Hardy
el 30 de Ag. de 2013
change
out{k}=JPD
into
JPDall{k}=JPD
to accomodates your need..
Geert
el 29 de Ag. de 2013
Editada: Geert
el 29 de Ag. de 2013
The following code will save your JPD variable for LagrangeMultiplier1.xlsx as JPD1 in the workspace, the JPD variable for LagrangeMultiplier2.xlsx as JPD2, and so on...
clc;
clear;
nb_files = 100;
for ii = 1:nb_files
filename = ['LagrangeMultiplier',num2str(ii),'.xlsx'];
LM = xlsread(filename,'LM');
CM = xlsread(filename,'CM');
DT = xlsread(filename,'DT');
JPD = [];
for jj = 1:size(LM,2)
JPD(jj,:) = exp(-1-sum(LM(:,jj)))*mvncdf(DT, Inf*ones(size(DT,1),1),0,CM);
end
eval([ 'JPD',num2str(ii),' = JPD;'])
end
4 comentarios
Ilham Hardy
el 30 de Ag. de 2013
I think what he meant is just like Azzi's answer.. by putting it in one cell.
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!