我想把我的变量写成其他变量之间的操作
例如,如果我把a = c + b
放在里面,那么a保存在里面的值就是c和b的和运算的数值结果。
如果c = 4且b = 2,则a保留的值为6。
但是我希望a保留符号表达式而不是数值。每次在命令窗口中写入a时,matlab都会缓存工作空间变量c的数值和b的数值,并对它们求和。
通常如果你写a, matlab会显示这个变量中的数值。有人知道怎么做吗?
您可以使用符号工具箱来完成此操作。下面是一个例子:
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()