how can i separate a matrix into a multiplication of two matrices One of Real Values and the Other for Integer values.
3 次查看(过去 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!