Символьное объявление переменных в Matlab

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

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

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

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

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

2 ответа

Решение

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

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

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

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()
Другие вопросы по тегам