Символьное объявление переменных в 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()