2011-09-03 2 views
2

다른 변수 사이에서 변수를 조작으로 쓰고 싶습니다.Matlab에서 변수의 심볼 선언

예를 들어 a = c + b을 입력하면 내부에 유지되는 값은 c와 b 사이의 합계 연산의 숫자 결과입니다.

C = 4는 B = 2 그리고,이 값이 유지 제

이다하지만하는 대신 수치의 상징적 표현을 유지하려는 경우. 그리고 내가 명령 창에 쓸 때마다, matlab ct는 c의 숫자 값과 worspace 변수의 b의 숫자 값을 합친 것입니다.

보통 a를 쓰면이 변수에있는 숫자 값이 표시됩니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

+0

관련 질문 : 당신이 지연 세트를 수행 할 수 있습니까? (: = 티카에서) 매트랩 (http://stackoverflow.com/questions/6878959/can-you-perform-a-delayed-set-mat-mat-in-matlab) – Amro

답변

5

기호 도구 상자를 사용하여이 작업을 수행 할 수 있습니다. 다음은 예입니다 :

syms a b c %# declare a b c to be symbolic variables 
a = b + c; 

b=3;c=4; %# now set values for b and c 
eval(a) %# evaluate the expression in a 

ans = 

    7 

b=5;c=9; %# change the values of b and c 
eval(a) 

ans = 

    14 

그래서 a의 정의는 여전히 b + c이다 (당신은 명령 창에서 a을 입력하여 확인 가능) 그리고 당신이 eval를 사용하여 평가할 때, 그것은에 bc의 현재 값을 사용 calculate a. bc은 더 이상 기호 변수가 아니며 double으로 변환됩니다. 그러나 a은 여전히이며 기호 변수의 표현식은 기본적으로 평가되지 않기 때문에 기본적으로 정의가 유지됩니다.

2

기호 도구 상자가없는 경우 익명 함수를 사용하여 비슷한 결과를 얻을 수 있습니다.

b=2; c=4; 
[email protected]()(evalin('caller','b+c')); 
a(), 

ans = 

    6 

b=1; 

a() 


ans = 

    5 

이상적은 아니지만 도움이 될 수 있습니다.

다음과 같은 기능이 쉽게 만들 수 :

function [ anonFunction ] = AnonEval(expression) 
%AnonEval Create an anonymous function that evaluates an expression 
    anonFunction = @()(evalin('caller',expression)); 
end 

b=2,c=4, 
a=AnonEval('b+c'); 
a(), 
b=1; 
a()