Символьное объявление переменных в Matlab - PullRequest
2 голосов
/ 03 сентября 2011

Я хотел бы записать свои переменные как операции между другими переменными.

Например, если я поставлю a = c + b, то значение, которое хранится внутри, является числовым результатом операции суммы между c и b..

Если c = 4 и b = 2, то значение, которое сохраняет a, равно 6.

Но мне бы хотелось, чтобы a сохраняло символическое выражение вместо числового значения.и каждый раз, когда я пишу a в командных окнах, matlab меняет числовое значение c и числовое значение b переменной worspace и суммирует их.

Обычно, если вы пишете a, matlab отображает числовое значениечто находится в этой переменной.Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

5 голосов
/ 03 сентября 2011

Вы можете сделать это, используя символическую панель инструментов. Вот пример:

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, оно использует текущее значение b и c для расчета a. Обратите внимание, что b и c больше не являются символическими переменными и преобразуются в двойные. Однако a все еще остается, и определение остается в силе, потому что по умолчанию выражения в символических переменных остаются не оцененными.

2 голосов
/ 04 сентября 2011

Если у вас нет символического набора инструментов, вы можете использовать анонимную функцию для достижения аналогичного результата.

b=2; c=4; 
a=@()(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()
...