Fel*_*lix 4 matlab vector addition
最近,在R2016b中,一个功能被添加到MATLAB中,这在我教的学校引起了很多麻烦.
如今,传统上被视为非法或至少是阴暗数学的公式成功执行:
[1, 2] + [3, 4]' -> [4, 5; 5, 6]
[1, 2]' + [3, 4, 5] -> [4, 5, 6; 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
因此,将行向量添加到列向量被视为两个矩阵的相加,从重复向量到"合适"维度可以得到两个矩阵.在旧版本中,这将产生错误消息,通知不可能添加具有不同尺寸的矩阵.
我想问为什么有点宽泛,虽然如果你知道为什么,我很想知道.相反,我会问,有没有办法禁用此功能?对于新手程序员来说,当传统的数学似乎没有排成一行时,这是一个受到伤害的世界,结果矩阵经常被忽视,导致错误只会在以后发生.
我不认为这是MATLAB语法和行为的有用部分,因为它需要太多的解释,阅读程序员的意图.repmat是有原因的,可以引入一个专门的功能来满足这个东西的需要.
正如@PhelypeOleinik所提到的,这是(因为R2016b)语言的核心部分,并且有充分的理由,如博客文章所述.
但是,如果你真的想要禁用它...
@double.plus.m.在文件中,输入如下内容:
function out = plus(in1, in2)
% do some things here
out = builtin('plus', in1, in2)
Run Code Online (Sandbox Code Playgroud)
在上面我有评论的地方,您可以放置您喜欢的任何代码:可能包含检查所需"大小兼容性"规则的输入的代码,以及不符合它们的错误.
做了功能类似的东西minus,times,ldivide,rdivide,power要修改等功能.
PS请不要实际执行此操作,开发人员非常努力地实现隐式扩展,如果他们看到您禁用它,他们会哭...
此功能是在Matlab R2016b中引入的.在旧版本中,此扩展必须使用repmat或使用bsxfun.较新的版本具有维度的隐式扩展,以对计算进行矢量化.
在这篇博文中 ,来自MathWorks的Steve Eddins说:
其他人认为新的算子行为不足以基于线性代数符号.然而,不是将MATLAB视为纯线性代数符号,而是将MATLAB视为矩阵和数组计算符号更为准确.
它确实在计算环境中有意义.我可以说,对于我的用途,这种隐式扩展确实使事情变得更容易.
当然,从代数的角度来看,这是没有意义的.但是如果你考虑一下,大多数计算机语言符号都没有意义.
由于现在这是该语言的一部分,因此不应该禁用该功能(直到Yair Altman尝试这样做:P).