3
내가 함수 정의 (테스트 코드)의 다음 조각 한 "정적 작업 공간에"C를 : 나는 내 일부 중첩 된 기능을 기본적으로matlab에 "오류 assignin 사용 : 시도를 추가하는"
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
이 test
함수에서 심볼릭 변수 a
, b
및 c
을 선언했습니다. 내가
test(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;
상징적 인 선언에 뭔가 문제가 될 것 같다,하지만 난 왜 이해가 안 돼요 . 어떻게 해결할 수 있습니까?
감사합니다.
편집 : 또한 두 중첩 된 함수를 제거 할 때마다 test
함수는 정상적으로 작동합니다.
이것은 Symbolic 항목이 도구 상자로 구현되는 방식과 Matlab 구문 자체가 아닌 이상한 결과입니다. 'syms A '는 정적 변수 선언처럼 보일 수도 있지만 그렇지 않습니다. 그것은 단지 일반적인 함수 호출입니다. 그것은 구문과 같이 보이기 위해 Matlab의 "command"호출 스타일을 사용하지만 실제로는'syms ('a', 'b', 'c')와 같습니다. 그리고 중첩 된 함수는 작업 공간을 정적으로 만든다. 그래서'syms' 함수가'assignin'을 사용하여 그것의 구현에서하는 vars를 동적으로 추가 할 수 없다. –
'syms a b c'도 호출하기 전에 모든 변수를'[a, b, c] = deal ([]);로 미리 할당하면됩니다. 더 간결해질 수도 있습니다. –
@AndrewJanke 감사합니다. 아주 좋은 의견입니다. – Oleg