找到关于两个矩阵 X 和 Y 的 (x,y) 的最近值
Finding nearest value of (x,y) with respect to two matrices X and Y
我有两个矩阵n*n
(在本例中为n = 51
)。一个矩阵被命名为 Q1
。第二个矩阵是 Q2
。两个矩阵都对应于概率(即介于 [0,1]
之间)。理论上 Q1+Q2 = 1
(但在这个例子中不一定如此,因为我删除了一些值和其他 Q3
Q4
等以简化这个例子的问题)。
我试图在每一行(或列)中找到索引,使得 Q1
的值最接近 q_val(1)
,并且 Q2
的值最接近至 q_val(2)
.
数据可以在这里找到:http://www.filedropper.com/Whosebugdata
当我分别计算每个矩阵中最接近的值时,我最终得到两条曲线(见下图,或复制粘贴代码和绘图)。但是我想找到一条最近的曲线。
如何在 Q1
和 Q2
中找到最接近 q_val
的一组索引(对于每一行或每一列)?
q_val = [0.41 0.52];
for i = 1:length(u_vec)
tmp1 = abs(Q1(:,i)-q_val(1));
tmp2 = abs(Q2(:,i)-q_val(2));
ind1 = find(tmp1==min(tmp1));
ind2 = find(tmp2==min(tmp2));
v1(i) = v_vec(ind1);
v2(i) = v_vec(ind2);
end
[U,V] = meshgrid(u_vec,v_vec);
figure
subplot(1,2,1)
hold on
pcolor(U,V,Q1)
plot(u_vec,v1,'k',u_vec,v2,'r','linewidth',1.5)
shading interp
xlim([2 2.2])
title('Q1')
subplot(1,2,2)
hold on
pcolor(U,V,Q2)
plot(u_vec,v1,'k',u_vec,v2,'r','linewidth',1.5)
shading interp
xlim([2 2.2])
xlabel('u');ylabel('v')
title('Q2')
要解决这个问题,重要的是首先定义一个特定的数学标准来衡量一个值与另外两个值的接近程度。例如,此标准可以是第一个值与其他两个值之间的距离之和。
如果您不关心答案必须从 v_vec
中选择,您可以简单地计算两个值的平均值,每个值都使到 Q1
和 Q2
的距离最小( v3
)。否则,您可以找到使两个距离之和最小的值 (v4
)。
[~, ind1] = min(abs(Q1-q_val(1)), [], 1);
[~, ind2] = min(abs(Q2-q_val(2)), [], 1);
v1 = v_vec(ind1);
v2 = v_vec(ind2);
v3 = (v1+v2)/2;
[~, ind4] = min(abs(Q1-q_val(1))+abs(Q2-q_val(2)), [], 1);
v4 = v_vec(ind4);
我有两个矩阵n*n
(在本例中为n = 51
)。一个矩阵被命名为 Q1
。第二个矩阵是 Q2
。两个矩阵都对应于概率(即介于 [0,1]
之间)。理论上 Q1+Q2 = 1
(但在这个例子中不一定如此,因为我删除了一些值和其他 Q3
Q4
等以简化这个例子的问题)。
我试图在每一行(或列)中找到索引,使得 Q1
的值最接近 q_val(1)
,并且 Q2
的值最接近至 q_val(2)
.
数据可以在这里找到:http://www.filedropper.com/Whosebugdata
当我分别计算每个矩阵中最接近的值时,我最终得到两条曲线(见下图,或复制粘贴代码和绘图)。但是我想找到一条最近的曲线。
如何在 Q1
和 Q2
中找到最接近 q_val
的一组索引(对于每一行或每一列)?
q_val = [0.41 0.52];
for i = 1:length(u_vec)
tmp1 = abs(Q1(:,i)-q_val(1));
tmp2 = abs(Q2(:,i)-q_val(2));
ind1 = find(tmp1==min(tmp1));
ind2 = find(tmp2==min(tmp2));
v1(i) = v_vec(ind1);
v2(i) = v_vec(ind2);
end
[U,V] = meshgrid(u_vec,v_vec);
figure
subplot(1,2,1)
hold on
pcolor(U,V,Q1)
plot(u_vec,v1,'k',u_vec,v2,'r','linewidth',1.5)
shading interp
xlim([2 2.2])
title('Q1')
subplot(1,2,2)
hold on
pcolor(U,V,Q2)
plot(u_vec,v1,'k',u_vec,v2,'r','linewidth',1.5)
shading interp
xlim([2 2.2])
xlabel('u');ylabel('v')
title('Q2')
要解决这个问题,重要的是首先定义一个特定的数学标准来衡量一个值与另外两个值的接近程度。例如,此标准可以是第一个值与其他两个值之间的距离之和。
如果您不关心答案必须从 v_vec
中选择,您可以简单地计算两个值的平均值,每个值都使到 Q1
和 Q2
的距离最小( v3
)。否则,您可以找到使两个距离之和最小的值 (v4
)。
[~, ind1] = min(abs(Q1-q_val(1)), [], 1);
[~, ind2] = min(abs(Q2-q_val(2)), [], 1);
v1 = v_vec(ind1);
v2 = v_vec(ind2);
v3 = (v1+v2)/2;
[~, ind4] = min(abs(Q1-q_val(1))+abs(Q2-q_val(2)), [], 1);
v4 = v_vec(ind4);