在Matlab中关闭"智能行为"

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在这种情况下打印警告信息?在许多情况下,这确实会有很大帮助.

Jon*_*nas 3

我不认为你的例子中有“聪明”之类的东西。负数的平方根是复数。类似地,左除运算符在 Matlab 中定义为计算非平方输入的伪逆。

如果您的应用程序不应返回复数(注意浮点错误!),那么您可以使用isreal它进行测试。如果您不希望左除运算符计算伪逆,请测试是否为A平方。

或者,如果由于某种原因您确实无法进行输入验证,您可以重载两者sqrt\仅处理正数,而不计算伪逆。