Is there any way to separate the terms of a product?
1 次查看(过去 30 天)
显示 更早的评论
Panagiotis Panagopoulos Papageorgiou
2019-2-17
评论: Panagiotis Panagopoulos Papageorgiou
2019-2-19
Hello,
Let's say I have this function_handle: f = @(x) exp(x-2)*log(x)
Is it possible to assign each function that comprises this product to its own seperate variable i.e:
g = exp()
h = x-2
j = log()
k = x
Thank you!
2 个评论
John D'Errico
2019-2-17
编辑:John D'Errico
2019-2-17
Sure. Write your own expression parsing code.
f = @(x) exp(x-2)*log(x);
>> func2str(f)
ans =
'@(x)exp(x-2)*log(x)'
采纳的回答
Walter Roberson
2019-2-17
If you have the Symbolic Toolbox, then
f = @(x) exp(x-2)*log(x)
syms x
temp = f(x);
op0 = feval(symengine, 'op', temp, 0)
rest = children(temp)
rest0 = arrayfun(@children, rest, 'uniform', 0)
and so on, taking op 0 and children each time. op 0 will be things like _mult and _plus for * and + (and subtraction -- subtraction is _plus of negative of the value).
With a little work, you could create a routine that broke expressions down into nested cell arrays or into nested struct.
This is not a nice interface, but it is all that is availabe in the symbolic toolbox in any released version.
3 个评论
Walter Roberson
2019-2-18
I attached code that produces a nested cell parse tree. You could modify it.
The current last line has {op0} which will produce the token such as exp . You would want to look at length(rest) and use that many nominal variables similar to the representative_vars that I introduce near the beginning of the code to convert simple @functionname into functionname(x, y, z, ...) expressions.
更多回答(0 个)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!