符号赋值有什么问题?

时间:2014-05-22 07:57:22

标签: matlab symbolic-math variable-types

我有很大的代码,我注意到我的代码中有一个错误,没有任何语法错误。我使用以下示例对其进行描述:

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

的元素

出了什么问题?

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

1 个答案:

答案 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数组并且导致错误)该函数遍历symn个位置,分配第一个a n中每个位置I的值 例如,上面的代码相当于执行a,这是使用a(1:n)=I(1:n)生成此行为的命令。

这是打算吗?

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

可以做什么

小心 - 抱歉,但这就是我必须避免这个问题

编辑 - 支持请求已被回答---

  

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

......似乎很快就不会出现错误而是记录在案的行为