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);