【问题标题】:Data fitting for time dependent matrix sets in MatlabMatlab中时间相关矩阵集的数据拟合
【发布时间】:2014-01-30 07:56:37
【问题描述】:

我有 6 个数据集,每个数据集是一个 576×576 的矩阵。每组数据代表在 30 秒间隔内进行的测量。例如在 t=0 时设置 1,在时间 =30 时设置 2,...,在 150 秒时设置 5。 如果愿意,您可以将这些集合视为框架。我需要从每个数据集中获取第一个数据点 (1,1) -> (1,1,0), (1,1,3),(1,1,6),(1,1,9), (1,1,12),(1,1,15) 并根据这 6 个点找到一个拟合公式,然后将该通用解决方案分配给我的解决方案矩阵 SM(1,1) 的第一个点。我需要对 6 个集合中的每个数据点执行此操作,直到我有一个 576by576 解决方案矩阵。

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

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

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

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

更新:

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

%% 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),[])

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

【问题讨论】:

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


    【解决方案1】:

    我建议您的主数据矩阵的大小为 (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 个点。这可能不是您想要的答案,但发表评论有点长

    【讨论】:

    • 我在拍摄 MRI 序列时遇到问题。由于这种常见的重建 576x576x150 需要太长时间。我只是想找出一个节省时间的捷径。
    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多