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!