如何在MATLAB中实现for循环计算曲线的部分区域?

时间:2015-06-19 17:49:55

标签: excel matlab

我在excel文件中有大量数据集,有100行和300列。第一行是(y1:y300)变量的名称,其余数据是数字。我有兴趣计算x轴的2个固定点之间存在的部分AUC。 我可以使用@ShellFish解决方案How do I calculate the partial area under a curve with MATLAB?这样做。现在我想实现一个循环,它可以计算从y1到y300的每个y值的部分区域。我怎样才能使用for-loop来实现这个目标?我使用了这段代码。我使用MATLAB导入函数导入了.xls文件。

    data = importfile('test.xls','Sheet1','A2:AZ100');
    y1 = data(:,1);
    y2 = data(:,2);
    y3 = data(:,3);
    y4 = data(:,4);
    y5 = data(:,5);
...
x = [-1000:10:1000];

startingIndex = find(x==-350);
endingIndex = find(x==-100);

desiredX = x(startingIndex:endingIndex);
desiredY = y1(startingIndex:endingIndex);
area = trapz(desiredX,desiredY);
area

我尝试for循环每次计算所需的是

for i=y1:y100
    desiredY = i(startingIndex:endingIndex);
    area = trapz(desiredX,desiredY);
    area
end

但有些事情我的代码非常错误......无法正常工作。

如果有人可以帮我纠正这段代码,那就太好了。

1 个答案:

答案 0 :(得分:0)

这里有一些错误。首先,您不能像这样定义for循环的迭代器。其次,没有理由明确定义y1, y2, ..., yn,您可以直接处理data数组。我的手指只是在考虑输入所有这些内容而受伤:(

将链接问题用于某些示例数据和代码:

% Set up sample data
data = rand(100,3);
x = 0:100;

startingIndex = find(x == 20);
endingIndex = find(x == 80);
desiredX = x(startingIndex:endingIndex);

% Preallocate
[nrows, ncolumns] = size(data);
desiredY = zeros(ncolumns, 1);
area = zeros(ncolumns, 1);

for ii = 1:ncolumns
    desiredY = data(startingIndex:endingIndex, ii);
    area(ii) = trapz(desiredX, desiredY);
end

这遍历data的每一列并执行链接的集成,将结果存储在area中。 area的每个索引都对应y中的列。