罗兰关于MATLAB的艺术

将想法转化为matlab

更多关于隐性扩张的想法

更多关于隐性扩张的想法

Steve Eddins带来了另一篇关于隐性扩张的深思熟虑的文章。

由于引入,有几个人对提出未检测到的错误的可能性增加了一些令人敬畏在MATLAB R2016b中隐式展开

通常,人们会担心两个相同长度的向量的元素加法,一个b,没有意识到一个是行向量,另一个是列向量。MATLAB R2016b将产生一个矩阵,而早期版本的MATLAB产生了一个错误。问题是,用户可能没有意识到计算不是他们想要的,或者用户可能会耗尽内存一个b真的很久了。

表达这种担忧的人有时会建议在添加行向量和列向量的情况下添加某种警告。

这是一个合理的担忧,它是在审议内隐立扩张的几年内讨论了许多次的问题。

我们有几个理由认为,这种非预期的计算在实践中不会是一个重大问题。首先,我们不认为无意识的计算会被忽视。对于命令窗口中的交互式计算,很明显计算产生了一个矩阵而不是一个向量。对于脚本或函数中的代码,如果后续代码期望得到n元素向量,那么如果得到的是NxN矩阵,那么很可能会出现错误或明显不同的情况。相对于输入当你的意思。*,或而不是时,向量的隐式展开误差更容易识别。

第二个原因是,在我们在MathWorks的内部经验中,我们没有看到这个问题突然成为一个重大问题。MATLAB的内部开发构建从2015年10月开始使用隐式扩展。我们已经看到,人们通常会很快适应新的行为。他们开始使用它,停止过度思考。

此外,我们不认为内存不足会是一个大问题。在过去的几个版本中,MATLAB有一个用户可设置的数组元素数量上限。限制的目的是为了防止试图制造一个太大的阵列,使您的计算机研磨到一个交换引起的停止。这个特性的引入极大地影响了我们进行隐式扩展的最终决定。

出于几个原因,引入警告消息的想法结果是不可行的。首先,Matlab对Matlab来说并不是一个很好的方法,以确定你是否意味着如果你打字,你是否意味着获得矩阵行+ Col..两个向量的成对求和,您可能将其视为外部和,实际上是其中一个常见的计算模式之一bsxfun是用于。因此,当正确使用算术运算符时,可能会出现任何警告消息。

Matlab用户可以理解地不容忍在正确使用时产生警告消息的代码,因此写入可能做隐式扩展的数学代码的任何人都需要编写额外的代码以保存警告状态,抑制警告消息,然后恢复警告状态。这是许多慢速执行的机器,以便在简单的矩阵算术周围包装。

此外,警告生成逻辑严重干扰了我们生成完全利用优化处理器指令集,指令流水线和多个核心的超快速数学计算的能力。将警告逻辑添加到基本MATLAB算术的实现将导致不可接受的速度下降。

这些与Matlab数学团队在近年来实际上删除了一些警告信息的原因。最着名的示例是MATLAB不再产生的旧划分警告。

总而言之,尽管我们承认隐式的扩张行为可能会在某些情况下导致混淆,但我们相信基于我们的经历,这不会是一个大问题。我们对使用的观察repmat.bsxfun多年来,我们得出结论,平衡,隐性扩张的好处将大大超值缺点。最后,我们认为某种警告信息既不是可行也不理想的。




发布与MATLAB®R2016b

|
  • 打印
  • 发送电子邮件

注释

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。