我没有以下描述的解决方案。如果完整的解决方案要求太多,那么有人能引导我找到解决这个问题的方法/方法,我会非常高兴。另外,如果此问题陈述不适合Matlab,请建议一个适当的论坛来发布此问题。
问题描述
我有一个矩阵M,其行和列索引对应于绘图图中的X轴和Y轴。特定行i和第j列的值对应于图中的点。样本矩阵结果创建如下:
x=1:0.1:50;
lineA=4*x+3;
lineB=x+1;
lineC=0.1*x-10;
lineD=-3*x+15;
range=[0:500];
rangeLength=length(range);
np = numel(lineA);
idCol = 1:np ;
result = zeros(rangeLength,np);
idRowA = 250+1-( round( lineA ) ) ;
linearInd = sub2ind( [rangeLength,np], idRowA, idCol ) ;
result(linearInd) = 10 ; %Importance of line A is 10
idRowB = 250+1-( round( lineB ) ) ;
linearInd = sub2ind( [rangeLength,np], idRowB, idCol ) ;
result(linearInd) = result(linearInd) + 1 ; % Importance of line B is 1
idRowC = 250+1-( round( lineC ) ) ;
linearInd = sub2ind( [rangeLength,np], idRowC, idCol ) ;
result(linearInd) = result(linearInd) + 1 ; %Importance of line C is 1
idRowD = 250+1-( round( lineD ) ) ;
linearInd = sub2ind( [rangeLength,np], idRowD, idCol ) ;
result(linearInd) = result(linearInd) +5 ; % importance of line D is 5
我们可以使用下面的代码绘制此矩阵结果,以更好地可视化其数据:
[a,~]=size(result);
[Y, X] = find(result > 0);
plot(X, (a-Y+1), '.');
我们可以从代码中观察到并绘制出A,B,C和D行的值存储在矩阵结果中的信息。请注意,图中所有线的线宽都相同,但线A的重要性比线B的重要性大10个数量级。线A的重要性是线D的两倍。
问题查询
现在,假设我已经从其他函数接收到矩阵结果。我不知道使用了哪些行函数来创建此矩阵。我所知道的是,用于创建此矩阵的线条的重要性不同。我想找出这条线的方程,该方程很可能类似于用于创建此矩阵的最重要的线,然后是第二重要的线,依此类推。
因此,在上面创建的示例矩阵中,解决方案应给我以下一行作为最重要的一行:
mostImpLine=[7 7.4 7.8 8.2 .........203]; %Note that this is same as lineA
secondMostImpLine=[12 11.7 11.4 ....]; %Note that this is same as lineB
我知道在一个大型数据集中,不可能获得与lineA一样的确切结果,但是最接近lineA的近似值就可以完成工作。