Matlab 求(x,y)关于两个矩阵x和y的最近值
我有两个矩阵Matlab 求(x,y)关于两个矩阵x和y的最近值,matlab,interpolation,minimization,Matlab,Interpolation,Minimization,我有两个矩阵n*n(在本例中n=51)。一个矩阵被命名为Q1。第二个矩阵是Q2。两个矩阵都对应于概率(即介于[0,1]之间)。理论上讲,Q1+Q2=1(但在本例中不一定如此,因为我删除了一些值和其他Q3Q4等,以简化本例中的问题) 我试图在每行(或每列)中找到索引,以便Q1的值最接近q_val(1),而Q2的值最接近q_val(2) 数据可在此处找到: 当我分别计算每个矩阵中最近的值时,我最终得到两条曲线(参见下图,或者复制粘贴代码并绘制)。然而,我想找到一条最近的曲线 如何在Q1和Q2(针对每
n*n
(在本例中n=51
)。一个矩阵被命名为Q1
。第二个矩阵是Q2
。两个矩阵都对应于概率(即介于[0,1]
之间)。理论上讲,Q1+Q2=1
(但在本例中不一定如此,因为我删除了一些值和其他Q3
Q4
等,以简化本例中的问题)
我试图在每行(或每列)中找到索引,以便Q1
的值最接近q_val(1)
,而Q2
的值最接近q_val(2)
数据可在此处找到:
当我分别计算每个矩阵中最近的值时,我最终得到两条曲线(参见下图,或者复制粘贴代码并绘制)。然而,我想找到一条最近的曲线
如何在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);