Matlab中时间相关矩阵集的数据拟合

时间:2014-01-11 07:05:57

标签: matlab optimization for-loop matrix curve-fitting

我有6个数据集,每个数据集是576by576矩阵。每组数据表示在30秒间隔内进行的测量。例如set1 at t = 0,set2 at time = 30,...,set5 at 150th。 如果愿意,您可以将这些集视为帧。我需要从每个数据集中获取第一个数据点(1,1) - > (1,1,0),(1,1,3),(1,1,6),(1,1,9),(1,1,12),(1,1,15)并基于这6个点找到一个拟合公式,然后将该一般解决方案分配给我的解决方案matriz SM(1,1)的第一个点。我需要对6组中的每个数据点执行此操作,直到我有576by576解决方案matriz。

如果一切顺利,我应该能够绘制SM(0s)= set1,SM(30s)= set2等。但不仅如此。 SM(45)应该在t = 45时返回测量值的预测,依此类推。目的是使一个矩阵能够预测从时间t = 0到150秒的数据波动。

其他信息: 1.-每个数据点独立于同一组中的其余数据点。 2.-它是非线性拟合 3.-所有值都是真实的

Matlab是否有针对此类问题的优化工具? 我应该将问题视为1D数据是否合适并创建一个执行576 ^ 2次作业的for循环? (我甚至不知道从哪里开始)

如果我不够清楚,请随意询问或编辑任何内容。我不确定我是否为这类问题选择了最准确的标题。谢谢

更新

根据Guddu的回答,我想出了这个:

%% Loadint data Matrix A

A(:,:,1) = abs(set1);
A(:,:,2) = abs(set2);
A(:,:,3) = abs(set3);
A(:,:,4) = abs(set4);
A(:,:,5) = abs(set5);
A(:,:,6) = abs(set6);

%% Creating Solution Matrix B

t=0:30:150;
SM=zeros([576 576 150]);
for i=1:576
    for j=1:576
        y=squeeze(A(i,j,1:6));
        f=fit(t',y,'smoothingspline');
        data=feval(f,1:150);
        SM(i,j,:)=data;
    end
end 

%% Plotting Frame at t=45

 figure(1);
 imshow(SM(:,:,45),[])

我不确定这是否是最有效的方法,但它确实有效。我愿意接受新的想法或建议。感谢

1 个答案:

答案 0 :(得分:0)

我建议您的主要数据矩阵大小(6,576,576) - > a。每个数据集的第一个点(1,1)将为a(1,1,1), a(2,1,1), a(3,1,1) .. a(6,1,1)。正如您在其他点(i,j)的每个数据集中所说的每个点(k,l)一样,我建议将所有数据集的每个位置(i,j)与其他位置分开处理。所以它将循环576 * 576次。代码可能是这样的

t=0:30:150;

for i=1:576
   for j=1:576
      datavec=squeeze(a(1:6,i,j)); % Select (i,j) point from all 6 frames
      % do the curve fitting and save in SM(i,j)
   end
end

我只是好奇你想要适合6点的非线性功能。这可能不是你想要的答案,但是发表评论很长一段时间