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');