Simplify Matrix decimal to integers
    7 views (last 30 days)
  
       Show older comments
    
I do not want 
     881/2158       985/1393       780/1351  
     881/2158      -985/1393       780/1351  
    -881/1079             0              780/1351  
But I want
         1                      1                     1
         1                     -1                     1
        -2                      0                     1
How do I do this using one single function ?
I get this error if I use simplify
Check for incorrect argument data type or missing argument in call to function 'simplify'.
0 Comments
Answers (2)
  Alan Stevens
      
      
 on 19 Oct 2021
        
      Edited: Alan Stevens
      
      
 on 19 Oct 2021
  
      One way is
M = [881/2158       985/1393       780/1351  
     881/2158      -985/1393       780/1351  
    -881/1079             0        780/1351]
ip = find(M>=0);
in = find(M<0);
M(ip) = ceil(M(ip));
M(in) = floor(M(in));
disp(M)
Don't know where you got the -2 from though!
  Cris LaPierre
    
      
 on 19 Oct 2021
        
      Edited: Cris LaPierre
    
      
 on 19 Oct 2021
  
      It's likely going to take two functions: one to convert your symbolic expressions to numeric, and a second to round.
I would probably do something like
new_var = round(double(old_var))
5 Comments
  Steven Lord
    
      
 on 19 Oct 2021
				Or you could normalize by the first element in each column.
M = [881/2158       985/1393       780/1351  
     881/2158      -985/1393       780/1351  
    -881/1079             0        780/1351];
B = normalize(M, 1, 'scale', 'first') % Normalize in dimension 1
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!