matlab rank of a matrix
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
valentino dardanoni
el 11 de Mayo de 2022
Editada: John D'Errico
el 11 de Mayo de 2022
Let R=ones(100,100). Obviously, rank(R) returns 1 for an answer. However, rank(R,1e-20), say, returns 17. Why? Thanks!
0 comentarios
Respuesta aceptada
John D'Errico
el 11 de Mayo de 2022
Editada: John D'Errico
el 11 de Mayo de 2022
Because the call:
R = ones(100,100);
rank(R,1e-20)
attempts to do something that is demonstrably silly, in terms of double precision arithmetic.
You can try to squeeze blood out of a rock, but when you do, the only blood you will see comes from your own fingers. The default tolerance in rank is set reasonably to produce a valid result in double precision arithmetic. Making it significantly smaller does not make the code work better. Instead, you are fooling yourself.
What does rank do with the tolerance you give it? It essentially counts to see how many singular values of the matrix are sufficiently non-zero, when compared to the size of the maximum singular value.
S = svd(R);
The default tolerance for rank is:
defTol = max(size(R)) * eps(max(S))
As you can see, it uses that maximum singular value, to then produce a reasonable tolerance for this problem.
sum(S > defTol)
But by setting the tolerance to a far too small number, you create a situation where rank returns something meaningless.
0 comentarios
Más respuestas (1)
Benjamin Thompson
el 11 de Mayo de 2022
You are probably attempting to go below the numerical precision of your hardware and software:
eps
ans =
2.220446049250313e-16
» help eps
EPS Spacing of floating point numbers.
D = EPS(X), is the positive distance from ABS(X) to the next larger in
magnitude floating point number of the same precision as X.
X may be either double precision or single precision.
For all X, EPS(X) is equal to EPS(ABS(X)).
EPS, with no arguments, is the distance from 1.0 to the next larger double
precision number, that is EPS with no arguments returns 2^(-52).
0 comentarios
Ver también
Categorías
Más información sobre Numerical Integration and Differentiation en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!