【发布时间】:2015-01-30 04:43:29
【问题描述】:
我有一组三个向量(存储在一个 3xN 矩阵中),它们是“纠缠的”(例如,第二行中的某个值应该在第三行中,反之亦然)。这种“纠缠”是基于查看绘制 alpha2 的图形。为了分离向量,我使用基于差异的方法,计算一个值相对于下一个三个值的差异(例如,将 (1,i) 与 (:,i+1) 进行比较)。然后我取最小值并存储它。该方法可以分离三个向量中的两个,但不是最后一个。
我想知道你们是否可以与我分享您的想法如何解决这个问题(如果可能的话)。我在下面添加了我的代码。
提前致谢!
数字问题:
clear all; close all; clc;
%%
alpha2 = [-23.32 -23.05 -22.24 -20.91 -19.06 -16.70 -13.83 -10.49 -6.70;
-0.46 -0.33 0.19 2.38 5.44 9.36 14.15 19.80 26.32;
-1.58 -1.13 0.06 0.70 1.61 2.78 4.23 5.99 8.09];
%%% Original
figure()
hold on
plot(alpha2(1,:))
plot(alpha2(2,:))
plot(alpha2(3,:))
%%% Store start values
store1(1,1) = alpha2(1,1);
store2(1,1) = alpha2(2,1);
store3(1,1) = alpha2(3,1);
for i=1:size(alpha2,2)-1
for j=1:size(alpha2,1)
Alpha1(j,i) = abs(store1(1,i)-alpha2(j,i+1));
Alpha2(j,i) = abs(store2(1,i)-alpha2(j,i+1));
Alpha3(j,i) = abs(store3(1,i)-alpha2(j,i+1));
[~, I] = min(Alpha1(:,i));
store1(1,i+1) = alpha2(I,i+1);
[~, I] = min(Alpha2(:,i));
store2(1,i+1) = alpha2(I,i+1);
[~, I] = min(Alpha3(:,i));
store3(1,i+1) = alpha2(I,i+1);
end
end
%%% Plot to see if separation worked
figure()
hold on
plot(store1)
plot(store2)
plot(store3)
【问题讨论】:
-
我很抱歉我的无知,但我不清楚你的“纠缠”标准。您如何知道一个向量中的某些值何时应该进入另一个向量?您在问题陈述中没有明确说明这一点。
-
不,你一点也不无知。基本上,“纠缠”是基于看图。
-
我明白了。这是非常可爱的。那么看这个图是如何告诉你它是如何纠缠的呢?
-
我同意这是一个奇怪的问题,并且可能无法仅通过矩阵 alpha2 来解决(因此,如果可能,我会说)。但是,如果您绘制该图,您会看到曲线并不“平滑”,基于此,您会发现如果您更改第 2 行和第 3 行的部分内容,则曲线会更平滑。
-
啊啊啊啊。我不认为你的意思是说数据是“纠缠的”。我想你的意思是说你的数据有一些噪音,你想尽可能地过滤或消除这种噪音。本质上,您希望过滤每一行,使其变得“平滑”。是否允许改变最终结果,还是只能使用向量的原生数据?我的意思是,对于每个可能“嘈杂”的元素,输出是否仅限于选择数据中的一个点,还是我们可以以某种方式组合它们?可能是当地社区的平均值?
标签: matlab matrix vector difference