我正在尝试自动简化我的MATLAB输出,但到目前为止我只能手动实现它。
我的代码执行后,我会看到以下数据:
((yf^2*((138454006717812460917559315575*a^2)/20282409603651670423947251286016 + 20)^2 - 20*yf^2*((19169511976216058056763775016476506759529226598462437580625*a^4)/6582018229284824168619876730229402019930943462534319453394436096 - (39872549173714278543306705994157*a^2)/40564819207303340847894502572032 + 25))^(1/2) - (- (138454006717812460917559315575*a^2)/20282409603651670423947251286016 - 20)*yf)/(10*yf^2)
其中' yf'和' a'是象征性变量。但是,在代码的一部分期间,会为这些变量分配特定值。因此,如果我复制上面的数据并将其重新放回MATLAB中,那么就会知道这些数据是什么'和' a'具有特定价值并为我提供以下内容:
41734615734664636717495154985753713986168093218527630622251194499100^(1/2)/6788754250849186019091129738088810 + 1362181378384807202322670643292642/678875425084918601909112973808881
哪个更好,因为变量消失了。然而,要查看它仍然是一个非常大的数据,如果我重复将这个答案重新放回MATLAB的过程,那么它最终会吐出2.9581的答案。
如何自动执行此过程,以便在执行代码时,我会立即显示2.9581?
答案 0 :(得分:1)
一种选择是使用eval
。这可以在一行中完成,只需将表达式作为传入的参数。
在eval
yf
分配之前使用的a
下面的示例返回相同的表达式。但是在他们被分配后给出了一个数字答案:
syms yf a
expression = ((yf^2*((138454006717812460917559315575*a^2)/20282409603651670423947251286016 + 20)^2 - 20*yf^2*((19169511976216058056763775016476506759529226598462437580625*a^4)/6582018229284824168619876730229402019930943462534319453394436096 - (39872549173714278543306705994157*a^2)/40564819207303340847894502572032 + 25))^(1/2) - (- (138454006717812460917559315575*a^2)/20282409603651670423947251286016 - 20)*yf)/(10*yf^2);
eval(expression)
yf = 1.0;
a = 2.0;
eval(expression)
答案 1 :(得分:0)
您可以使用subs
替换子表达式,并使用double
将不带变量的结果表达式转换为数值:
s= ((yf^2*... % Your symbolic expression here
s= subs(s,yf,100) % Replace yf with value, for example, 100
s= subs(s,a,101) % Replace a with value, for example, 101
v= double(s) % Convert the symbolic expression to a numeric value