如何基于算术运算符MATLAB访问符号表达式

时间:2018-09-11 08:43:45

标签: matlab symbolic-math

下面的符号表达式是众多表达式中的一个示例

expr = x + (x/z)*log(C + x/y);

对于上述表达式,我需要按以下方式解决

步骤1:

var1 = x/y % accessing expression one operation at a time
result1 = applySomeFunction(var1) 

第2步:

var2 = var1+C
result2 = someConstantValue*result1+ applySomeFunction(var2);

步骤3:

var3 = log(var2)
result3 = someConstantValue*result2 + applySomeFunction2(var3);

第四步:

var4 = var3*x
result4 = someConstantValue*result3 + applySomeFunction2(var34);

。 。 。 直到表达式的结尾。

是否有一种基于操作提取和访问符号子表达式的方法?

我尝试将其转换为字符串,但是使用括号时掩盖错误太多,效率不高。

1 个答案:

答案 0 :(得分:0)

符号变量是用syms命令定义的。

MATLAB代码:

syms x y z C v1 v2 v3 v4;
v1 = x/y;
v2 = v1+C;
v3 = log(v2);
v4 = v3*x;
.......

或者如果您只需要expr,

syms x y z C expr;
expr = x + (x/z)*log(C + x/y);   

然后探索这些变量:例如(expr中的x = 1,y = 2,z = 3,C = 4)

subs(expr,{x,y,z,C},{1,2,3,4});  

这将给出:

expr = 1 + (1/3)*log(9/2);

但是如果您不想使用MATLAB内置的微分或积分或其他一些符号函数,我建议您改用匿名函数。它们更快,更容易使用。

expr = @(x,y,z,C) x + (x/z)*log(C + x/y);
expr(1,2,3,4)

这将得出结果:1.501359 ...