Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab for循环中的动态输出参数_Matlab - Fatal编程技术网

Matlab for循环中的动态输出参数

Matlab for循环中的动态输出参数,matlab,Matlab,我对Matlab相当陌生,我创建这个脚本是为了帮助我从excel文件中收集4个数字。到目前为止,这一个有效: clear all cd('F:/Wortpaare Analyse/Excel') VPNumber = input('Which Participant Number?', 's'); filename = (['PAL_',VPNumber,'_Gain_Loss.xlsx']); sheet = 1; x1Range = 'N324'; GainBlock1 = xlsrea

我对Matlab相当陌生,我创建这个脚本是为了帮助我从excel文件中收集4个数字。到目前为止,这一个有效:

clear all
cd('F:/Wortpaare Analyse/Excel')

VPNumber = input('Which Participant Number?', 's');
filename = (['PAL_',VPNumber,'_Gain_Loss.xlsx']);
sheet = 1;

x1Range = 'N324';
GainBlock1 = xlsread(filename,sheet,x1Range);

x1Range = 'O324';
LossBlock1 = xlsread(filename,sheet,x1Range);

x1Range = 'AD324';
GainBlock2 = xlsread(filename,sheet,x1Range);

x1Range = 'AE324';
LossBlock2 = xlsread(filename,sheet,x1Range);

AnalyseProband = [GainBlock1, LossBlock1, GainBlock2, GainBlock2]
现在,我想制作一个脚本,用于分析前20个excel文件,并尝试以下操作:

clear all
cd('F:/Wortpaare Analyse/Excel')


for VPNumber = 1:20 %for the 20 files

a = (['PAL_%d_Gain_Loss.xlsx']); 
filename = sprintf(a, VPNumber) % specifies the name of the file
sheet = 1;

x1Range = 'N324';
(['GainBlock1_',VPNummer]) = xlsread(filename,sheet,x1Range);

....
end
问题似乎是我只能有一个输出参数。我想更改每个循环中的输出参数,这样它就不会在每个循环中覆盖“GainBlock1”

最后,我希望有以下变量: GainBlock1_1(用于第一张excel表格) GainBlock1_2(用于第二张excel表格) ... GainBlock1_20(用于第20张excel表格)

有没有聪明的办法?我能够相当轻松地编写第一个脚本,但无法在第二个脚本中取得任何重大进展。非常感谢您的帮助

最好的,
Luca

这可以通过将数据存储在数组或单元格中来实现。我相信一个数组就足以满足您的需要。我在下面包含了一个重新组织的代码示例,将其分解为多个函数,使其更易于阅读和理解

基本上,第一个函数处理循环并控制数据在数组中的位置,第二个函数是原始脚本,它接受VPNumber作为输入

这将返回一个20x4数组,其中第一个索引控制从中提取数据的工作表,第二个索引控制它是否为
[GainBlock1,LossBlock1,GainBlock2,LossBlock2]
。i、 e.-第5页的增益块1将是
分析探针(5,1)
,第11页的损耗块2将是
分析探针(11,4)


这可以通过将数据存储在数组或单元格中来实现。我相信一个数组就足以满足您的需要。我在下面包含了一个重新组织的代码示例,将其分解为多个函数,使其更易于阅读和理解

基本上,第一个函数处理循环并控制数据在数组中的位置,第二个函数是原始脚本,它接受VPNumber作为输入

这将返回一个20x4数组,其中第一个索引控制从中提取数据的工作表,第二个索引控制它是否为
[GainBlock1,LossBlock1,GainBlock2,LossBlock2]
。i、 e.-第5页的增益块1将是
分析探针(5,1)
,第11页的损耗块2将是
分析探针(11,4)


如果使用数组
GainBlock
并将每张图纸设置为数组的索引,会怎么样?如果使用数组
GainBlock
并将每张图纸设置为数组的索引,会怎么样?
function AnalyseProband = getAllProbands()
    currentDir = pwd;
    returnToOriginalDir = onCleanup(@()cd(currentDir));
    cd('F:/Wortpaare Analyse/Excel')

    numProbands = 20;
    AnalyseProband = zeros(numProbands,4);
    for n = 1:numProbands
        AnalyseProband(n,:) = getBlockInfoFromXLS(n);
    end
end

function AnalyseProband = getBlockInfoFromXLS(VPNumber)

    a = 'PAL_%d_Gain_Loss.xlsx'; 
    filename = sprintf(a, VPNumber); % specifies the name of the file

    sheet = 1;

    x1Range = 'N324';
    GainBlock1 = xlsread(filename,sheet,x1Range);

    x1Range = 'O324';
    LossBlock1 = xlsread(filename,sheet,x1Range);

    x1Range = 'AD324';
    GainBlock2 = xlsread(filename,sheet,x1Range);

    x1Range = 'AE324';
    LossBlock2 = xlsread(filename,sheet,x1Range);

    AnalyseProband = [GainBlock1, LossBlock1, GainBlock2, LossBlock2];

end