我想把我的变量写成其他变量之间的操作。
例如,如果我把a = c + b
a 保留在里面的值是 c 和 b 之间的和运算的数值结果。
如果 c = 4 且 b = 2,则 a 保留的值为 6。
但我希望 a 保留符号表达式而不是数值。每次我在命令窗口中写 a 时,matlab 都会获取 worspace 变量的 c 的数值和 b 的数值,并将它们相加。
通常,如果您编写 a,matlab 会显示此变量中的数值。有谁知道如何做到这一点?
我想把我的变量写成其他变量之间的操作。
例如,如果我把a = c + b
a 保留在里面的值是 c 和 b 之间的和运算的数值结果。
如果 c = 4 且 b = 2,则 a 保留的值为 6。
但我希望 a 保留符号表达式而不是数值。每次我在命令窗口中写 a 时,matlab 都会获取 worspace 变量的 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
的当前值来计算。请注意,and不再是符号变量,而是转换为双精度数。但是仍然是,并且定义成立,因为默认情况下,符号变量中的表达式是未计算的。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()