Matlab: "Fehler mit assignin: Attempt to add "c", um eine statische Arbeitsbereich"
Habe ich das folgende Stück der definition einer Funktion (test-code):
function [X,Y,Z] = test(x,y,z)
syms a b c;
a = b + c; % This is where it gets wrong
X=x;
Y=y;
Z=z;
keyboard
% nested functions
function y = fun1(t,x)
y=t+x;
end
function res = bvpbc(y0,yT)
res= y0+yT;
end
end
Grundsätzlich habe ich einige verschachtelte Funktionen, die innerhalb der test
Funktion, wo ich erklärt einige symbolische Variablen a
, b
und c
. Allerdings, wenn ich die Funktion, indem Sie
test(1,1,1)
gibt es immer diese Fehlermeldung:
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;
Scheint es etwas falsch mit der symbolischen Erklärungen, aber ich verstehe nicht warum. Wie kann ich es beheben?
Danke!
EDIT: zusätzlich, wenn ich entfernen Sie die zwei verschachtelte Funktionen, die test
- Funktion funktioniert gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende minimale Beispiel stellt das problem, und wie Andrew Janke erklärt in den Kommentaren, nicht ein Fehler:
können Sie es umgehen, mit einer expliziten Zuordnung der symbolischen Variablen des workspace:
syms A
mag Aussehen wie eine statische variable, Erklärung, ist es nicht. Es ist einfach nur ein normaler Funktionsaufruf. Es ist mit Hilfe von Matlab-s "Befehl" Stil des Aufrufs zu schauen, wie der syntax, aber es ist wirklich gleichwertig zusyms('a', 'b', 'c')
. Und verschachtelte Funktionen machen den Arbeitsbereich statisch, so kann man nicht dynamisch hinzufügen vars, die diesyms
Funktion wird in seiner Umsetzung durch dieassignin
.[a,b,c] = deal([]);
vor dem Aufrufsyms a b c
auch. Vielleicht präziser.