【发布时间】: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