Bor*_*ris 6 matlab warnings behavior
在Matlab上有一件我不喜欢的东西:它有时会过于聪明.例如,如果我有一个负平方根
a = -1; sqrt(a)
Run Code Online (Sandbox Code Playgroud)
Matlab不会抛出错误,而是静默地切换到复数.负对数也会发生同样的情况.这可能导致在更复杂的算法中难以发现错误.
类似的问题是Matlab"解决"静默非二次线性系统,如下例所示:
A=eye(3,2); b=ones(3,1); x = A \ b
Run Code Online (Sandbox Code Playgroud)
显然x不满足A*x==b(它解决了最小二乘问题).
是否有可能关闭"功能",或者至少让Matlab在这种情况下打印警告信息?在许多情况下,这确实会有很大帮助.
我不认为你的例子中有“聪明”之类的东西。负数的平方根是复数。类似地,左除运算符在 Matlab 中定义为计算非平方输入的伪逆。
如果您的应用程序不应返回复数(注意浮点错误!),那么您可以使用isreal它进行测试。如果您不希望左除运算符计算伪逆,请测试是否为A平方。
或者,如果由于某种原因您确实无法进行输入验证,您可以重载两者sqrt并\仅处理正数,而不计算伪逆。