【问题标题】:Finding nearest value of (x,y) with respect to two matrices X and Y找到关于两个矩阵 X 和 Y 的 (x,y) 的最接近值
【发布时间】:2020-12-07 08:25:42
【问题描述】:

我有两个矩阵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/stackoverflowdata

当我分别计算每个矩阵中最接近的值时,我最终得到两条曲线(见下图,或复制粘贴代码并绘图)。但是我想找到一条最近的曲线。

如何在Q1Q2(每一行或每一列)中找到最接近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')

【问题讨论】:

    标签: matlab interpolation minimization


    【解决方案1】:

    要解决这个问题,重要的是首先定义一个特定的数学标准来衡量一个值与其他两个值的接近程度。例如,此标准可以是第一个值与其他两个值之间的距离之和。

    如果您不关心必须从v_vec 中选择答案,您可以简单地计算两个值的平均值,每个值都最小化到Q1Q2 (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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2020-02-24
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多