我有很大的代码,我注意到我的代码中有一个错误,没有任何语法错误。我使用以下示例对其进行描述:
I=sym(eye(3)); %I is Identity 3by3
a=sym(zeros(5,1)); %a is column matrix
然后:
a(1)=I;
应该给出错误但结果是:
a=
1
0
0
0
0
这意味着matlab将3x3矩阵分配给a
!!!
出了什么问题?
我尝试了同样的但是知道使用I
和a
这两种类型现在它给出了一个错误,这是正确的。
答案 0 :(得分: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
由于某些原因,类sym
的变量不会导致错误。如果I
中给出的元素多于n
指定的a
位置。它会将n
的{{1}}值分配给I
在sim的classdef中使用a
方法subsasgn
是用于语法subsasgn
的方法)不检查大小是否存在 (不完全正确,好像a(1)=I
是一个空的a
数组并且导致错误)该函数遍历sym
中n
个位置,分配第一个a
n
中每个位置I
的值
例如,上面的代码相当于执行a
,这是使用a(1:n)=I(1:n)
生成此行为的命令。
不是线索!
帮助文档没有提到这种不同的行为,所以我认为这是一个错误,服务请求已被放入文档或修复。
小心 - 抱歉,但这就是我必须避免这个问题
编辑 - 支持请求已被回答---
是的,你是对的;对于这种意外行为可能造成的不便,我深表歉意。这确实表现为与基本MATLAB行为不一致。感谢您引起我们的注意,因为应记录此行为(如果不发出警告)。我今天将创建相关的文档增强功能。
......似乎很快就不会出现错误而是记录在案的行为