Matlab:;使用assignin时出错:尝试添加;";“到静态工作区”;

Matlab:;使用assignin时出错:尝试添加;";“到静态工作区”;,matlab,nested,environment-variables,symbolic-math,Matlab,Nested,Environment Variables,Symbolic Math,我有以下函数定义(测试代码): 基本上,我在test函数中有一些嵌套函数,其中我声明了一些符号变量a、b和c。但是,当我通过键入 测试(1,1,1) 始终存在以下错误消息: Error using assignin Attempt to add "b" to a static workspace. See MATLAB Programming, Restrictions on Assigning to Variables for details. Error in syms (line 6

我有以下函数定义(测试代码):

基本上,我在
test
函数中有一些嵌套函数,其中我声明了一些符号变量
a
b
c
。但是,当我通过键入

测试(1,1,1)

始终存在以下错误消息:

Error using assignin
Attempt to add "b" to a static workspace.
 See MATLAB Programming, Restrictions on Assigning to
 Variables for details.

Error in syms (line 66)
        assignin('caller',x,sym(x));

Error in test (line 3)
    syms a b c;
符号声明似乎有问题,但我不明白为什么。我怎样才能修好它

谢谢大家!


EDIT:此外,每当我删除两个嵌套函数时,
test
函数都会正常工作

下面的最小工作示例重新创建了问题,正如注释中所解释的,它不是一个bug:

function foo
syms A

    function nested
    end

end
您可以通过将符号变量显式分配到工作空间来解决此问题:

A = sym('A');

严格来说,这并不是一个bug,只是一个奇怪的结果,它是如何将符号化的东西作为工具箱实现的,而不是在Matlab语法本身中实现的。虽然
syms A
可能看起来像一个静态变量声明,但它不是。这只是一个常规的函数调用。它使用Matlab的“命令”调用风格看起来像语法,但它实际上相当于
syms('a','b','c')
。嵌套函数使工作区成为静态的,因此您不能动态添加变量,
syms
函数在其使用
assignin
实现时会这样做。您也可以通过使用
[a,b,c]=deal([])预分配所有变量来解决此问题syms a b c
之前也执行code>。可能更简洁。
A = sym('A');