how can i separate a matrix into a multiplication of two matrices One of Real Values and the Other for Integer values.
    4 次查看(过去 30 天)
  
       显示 更早的评论
    
hello,
how can i separate a matrix X into a multiplication of two matrices  Y and Z  with Y contain  Real Values and Z contain Integer values using MATLAB.
such as: X=Y*Z   
with:
X= my Input Matrix of NxN.
and i search to obtain:
 Y: matrix of integer values.
Z: Matrix of Real Values.
X is suposed to be a NxN matrix. 
0 个评论
采纳的回答
  Bruno Luong
      
      
 2019-7-8
        
      编辑:Bruno Luong
      
      
 2019-7-8
  
      Of course.
Test matrix
X = rand(5)
n = length(X)
then
Z = ceil(1000*rand(n,n))
Y = X/Z
Y*Z
3 个评论
  Bruno Luong
      
      
 2019-7-9
				
      编辑:Bruno Luong
      
      
 2019-7-9
  
			In general it's not possible for any X. 
If you have such decompistion, it's equivalent to each column of X has a common divisor (on the diagonal of Z). And that is right for all column. 
This condition is quite strict. But if you know X meets this, then you can write down:
X(:,j) = sum k_(i,j) d_j, for all j=1,2,...,n, with k_(i,j) integers
Then  simply take 
Z = diag(d)
Y(i,j) = k_(i,j)
You might try to apply euclidian algorithm to find a common divisor of floating points (if any), I'm not sure the bad-effect of floating points round-off on such algorithm (I guess it's far from robust). 
更多回答(1 个)
  Raj
      
 2019-7-8
        There are infinite combinations possible (atleast by theory) in which you can split a real number to multiplication of a real number and an integer.  Let me explain:
X=rand(N,N) % your matrix
Y=randi(M,N) % any NxN integer matrix with upper limit as M. INFINITE Possibilities here.
then
Z=X./Y % matrix of real values.
So that you can multiply Y & Z to get back X
X1=Y.*Z
isequal(X,X1) % confirms that X and X1 are equal.
Cheers!!
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



