符号赋值有什么问题?

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!!!

怎么了?

我尝试了相同,但知道使用Ia两种类型现在它给出一个错误,这是正确的.

RTL*_*RTL 1

--根据评论转来的---

有什么问题

一般来说,尝试将大小为 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不会导致错误。如果 中给出的元素多于In指定位置a。它将把第一个n值分配Ia

为什么

subsasgnsim 的 classdef 中的方法(subsasgn用于语法的方法a(1)=I)中,不存在对大小的检查(不完全正确,因为好像a是空sym数组并导致错误)该函数na分配第一个数组时迭代位置中每个单独位置n的值。 例如,上面的代码相当于执行,这将是使用 生成此行为的命令。Ia
a(1:n)=I(1:n)double

这是故意的吗?

没有任何线索!
帮助文档没有提到这种不同的行为,所以我认为这是一个错误,已提出服务请求以进行文档或修复。

可以做什么

小心 - 抱歉,但这就是我要避免这个问题的全部

编辑——支持请求已得到答复——

是的你是对的; 对于这种意外行为可能造成的不便,我深表歉意。这确实与 MATLAB 的基本行为不一致。感谢您提请我们注意这一点,因为这种行为应该被记录下来(如果不发出警告)。今天我将创建一个相关的文档增强。

...看起来这很快就不再是一个错误,而是记录在案的行为