Hi, On Saturday, May 23, 2020 at 3:55:06 AM UTC+10, Michael Orlitzky wrote: > > > This was changed to "do what MATLAB does" because of the numerical > issues inherent to inexact rings. While > > m = matrix(SR, [0]) > > is singular and the system `m*x == [1]` has no solutions, with > > m = matrix(SR, [0.0000000000000000000001]), > > the system is easily solvable and we can't tell the difference between > the two. I think the real surprise here is that SR is an inexact ring. >
It's not surprising that SR is inexact, since it has embedded inexact rings: sage: SR.has_coerce_map_from(RR) True sage: SR.has_coerce_map_from(RDF) True However, it has a mechanism for detecting whether a given element is exact: sage: SR(0).is_exact() True sage: SR(0.0).is_exact() False So one could envision checking whether the coefficient matrix of the system consists solely of exact elements, in which case Sage could do the right thing as opposed to "whatever MATLAB does". I would also argue that, despite the validity of the arguments regarding inexact rings, this is a change in behavior that would have benefited from a deprecation warning for a short while. Another user-friendlier way of doing this (making the check argument irrelevant in the inexact case) would have been to display a warning when the user asks for check=True in the inexact case, rather than simply ignoring it. Best, Alex -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/31bff932-3517-49c7-93ed-30e58383ba37%40googlegroups.com.