2011-09-03 7 views
2

Je voudrais écrire mes variables comme opérations entre autres variables.Déclaration symbolique des variables dans Matlab

Par exemple si je mets a = c + b alors valeur qu'un keep inside est le résultat numérique de l'opération d'une somme entre c et b.

Si c = 4 et b = 2, alors, la valeur que garde est 6.

Mais je voudrais que conserve l'expression symbolique au lieu de la valeur numérique. et chaque fois que j'écris un dans les fenêtres de commande, matlab met en cache la valeur numérique de c et la valeur numérique de b de la variable d'espace et les somme.

Normalement, si vous écrivez a, matlab affiche la valeur numérique de cette variable. Est-ce que quelqu'un sait comment faire cela?

+0

question connexe: [Pouvez-vous effectuer un certain retard? (: = Mathematica) dans Matlab] (http://stackoverflow.com/questions/6878959/pouvez-vous-effectuer-un-retard-set-in-mathematica-in-matlab) – Amro

Répondre

5

Vous pouvez le faire en utilisant la boîte à outils symbolique. Voici un exemple:

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 

Ainsi, la définition de a est toujours b + c (vous pouvez le vérifier en tapant a à la fenêtre de commande) et lorsque vous évaluez l'aide eval, il utilise la valeur actuelle de b et c à calculer a. Notez que b et c ne sont plus des variables symboliques et sont convertis en doubles. Cependant, a l'est toujours, et la définition est valide car, par défaut, les expressions des variables symboliques sont maintenues non évaluées.

2

Si vous ne disposez pas de la boîte à outils symbolique, vous pouvez utiliser une fonction anonyme pour obtenir un résultat similaire.

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

ans = 

    6 

b=1; 

a() 


ans = 

    5 

Pas idéal mais peut être utile.

Vous pouvez vous faciliter la tâche avec la fonction suivante:

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() 
Questions connexes