Compare Matrices within tolerance range
    16 次查看(过去 30 天)
  
       显示 更早的评论
    
Hi. I have a matrix A that is 8323 by 3 and matrix B that is 3 by 3. Elements in both these matrices have decimals. I want to find rows in A that is within 5% tolerance of rows in B. I am pretty sure you have to use for loop and if statements to find it. However, i am not sure what to write. I made 2 matrices C and D of same size as B since i calculated the max and min values that correspond to B values.
 for y=1:3
    for x=1:n1
        if Points1(:,y)<=none1(x,y) && Points1(:,y)>=none3(x,y)
           %not sure what to write
And as always, thanks.
5 个评论
  Image Analyst
      
      
 2015-6-13
				I guess she meant "the thousands place", which would be the third place after the decimal. I wish it were thousands of decimal places - maybe in another 50 years it will be.
  Jan
      
      
 2015-6-13
				
      编辑:Jan
      
      
 2015-6-13
  
			@Anna Lin: points3, Points1, A, B, C, D, none1, none3 - the bunch of variables is at least confusing. What is the wanted result? Do you want a [8323 x 1] logical vector with a true, if the corresponding row of A is inside one of the three intervals defined by the rows 0.09*B and 1.05*B? Or do you want a [8823 x 3] array?
回答(2 个)
  Guillaume
      
      
 2015-6-13
        iswithintol = ismembertol(A, B, 0.05, 'ByRows', true)
will find rows of A that differ from the rows of B by no more than 5% of the max of A and B. There are options to change the tolerance criteria.
1 个评论
  Paul Hoffrichter
 2020-12-10
				I was looking up a solution for this problem when I saw ismembertol above. But consider:
A = [1 2 3];
B = [3 1 2];
In my case, and possibly in the OP, A and B are out of tolerance since I want each element of A to be within tolerance of the corresponding element of B. But we get:
ismembertol(A,B)
ans =
  1×3 logical array
   1   1   1
  Paul Hoffrichter
      
 2020-12-10
        
      编辑:Paul Hoffrichter
 2020-12-10
  
      For a tolerance match between corresponding elements of the rows, start off with this:
a = a(:); 
b = b(:);
%% Check for equivalence of each element, within the tolerance
yn = abs(a - b) <= eps(max(abs(a), abs(b)));
yn = all(yn);  % scalar logical output
Next step is to modify above to include desired tolerance.
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





