下面的符号表达式是众多表达式中的一个示例
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);
。 。 。 直到表达式的结尾。
是否有一种基于操作提取和访问符号子表达式的方法?
我尝试将其转换为字符串,但是使用括号时掩盖错误太多,效率不高。
答案 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 ...