mil*_*lad 5 matlab variable-types symbolic-math
我有大代码,我注意到我的代码中有一个错误没有任何语法错误.我使用以下示例描述它:
I=sym(eye(3)); %I is Identity 3by3
a=sym(zeros(5,1)); %a is column matrix
Run Code Online (Sandbox Code Playgroud)
然后 :
a(1)=I;
Run Code Online (Sandbox Code Playgroud)
哪个应该给出错误,但结果是:
a=
1
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
这意味着matlab将3x3矩阵分配到a!!!
怎么了?
我尝试了相同,但知道使用I和a两种类型现在它给出一个错误,这是正确的.
--根据评论转来的---
一般来说,尝试将大小为 3x3 的内容分配给较小的数组将导致 Matlab 抛出错误。然而使用 sym 会发生以下情况:
I=sym(ones(3));
a=sym(zeros(5,1))
n=3
a(1:n)=I
a =
1
1
1
0
0
Run Code Online (Sandbox Code Playgroud)
由于某种原因,类变量sym不会导致错误。如果 中给出的元素多于I的n指定位置a。它将把第一个n值分配I给a
在subsasgnsim 的 classdef 中的方法(subsasgn用于语法的方法a(1)=I)中,不存在对大小的检查(不完全正确,因为好像a是空sym数组并导致错误)该函数n在a分配第一个数组时迭代位置中每个单独位置n的值。
例如,上面的代码相当于执行,这将是使用 生成此行为的命令。Iaa(1:n)=I(1:n)double
没有任何线索!
帮助文档没有提到这种不同的行为,所以我认为这是一个错误,已提出服务请求以进行文档或修复。
小心 - 抱歉,但这就是我要避免这个问题的全部
编辑——支持请求已得到答复——
是的你是对的; 对于这种意外行为可能造成的不便,我深表歉意。这确实与 MATLAB 的基本行为不一致。感谢您提请我们注意这一点,因为这种行为应该被记录下来(如果不发出警告)。今天我将创建一个相关的文档增强。
...看起来这很快就不再是一个错误,而是记录在案的行为