Extract operations from symbolic expression
7 次查看(过去 30 天)
显示 更早的评论
Hello,
given a symbolic expression, I want to extract the fundamental operations that take place in this symbolic expression. In the end, I want to create a Simulink model that does the same as the symbolic expression but without a simple matlab function block but with basic simulink blocks. For that, I need to know what happens to the inputs and in what order.
For example:
I have the symbolic expression z = cos(x)*y + y^2.
How exactly do I get the necessary information from the sym object? I want to extract that the cosine of x is computed which is then multiplied with y and then this product is added to the square of y.
Are there any built-in function that can help me with this? So far, the only solution I could think of was to parse the string generated by "simscapeEquation(z)"
Thanks so much!
2 个评论
Walter Roberson
2023-1-28
If you have
z = cos(x)*y + y^2/cos(x)
then what would the desired output look like? For example are you hoping for a stream of RPN operations such as might be used for an HP29c calculator, with code like
x COS DUP y DUP SWAP2 * SWAP DUP * SWAP2 / +
? This specifies the stream of operations (and is at least partially optimized... I would have to think about whether you could do better by entering y first)
采纳的回答
Paul
2023-1-28
Hi Cedric
What's the objection to using a Matlab Function block? If that wasn't a constraint, you could use matlabFunctionBlock
Even if you break down the expression, what would be the next step for implementing all of the individual Simulink blocks to rebuild the expression in Simulink?
5 个评论
Paul
2023-1-29
编辑:Paul
2023-2-11
Yes, symFunType is what would be needed. Don't know how I didn't see that.
Assuming the original expression can be implemented in Simulink in the first place ....
One feasible apprroach may be to use symvar to find out the inputs to the epxression and create inport blocks for those, and create an outport block for the output
Then recurse as follows:
Check the symFunType of the expression.
Map the result to the a Simulink library block and add it to the model.
Determine if the expression has additional children that need to processed.
All while keeping track of the parent block to to which the children blocks need to be connected.
Don't know if that will really work, but it seems like it might.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!