Why isn't there a bsxfun block in Simulink?

3 views (last 30 days)
Nathaniel
Nathaniel on 25 Jun 2013
Recently, I have found myself adding 1-line MATLAB Function Blocks to some models, of the form (though not necessarily always with @times):
function y=fcn(u, v)
y=bsxfun(@times, u, v);
I have made some attempts at implementing a general bsxfun block that would let me choose the function from a list, but I can't figure out how to pass the function handle from a mask into the MATLAB Function Block.
So why does this not exist (I have searched)?
Can anyone show me a way to construct the block I have described, without resorting to S-functions (we try to avoid them)?
Thanks!

Answers (1)

Ryan G
Ryan G on 25 Jun 2013
Edited: Ryan G on 25 Jun 2013
Why doesn't the product block work? It can perform element by element operations. If you are using it for the singleton functionality, you could just copy the smaller array yourself to match the larger array using the selector block.
EDIT: This can also work for other functions supported by bsxfun.
  4 Comments
Ryan G
Ryan G on 25 Jun 2013
There is not anything that I could find capable of the automatic singleton expansion bsxfun performs. There are those workarounds mentioned which may be ok if you want to avoid s-functions. I would suggest putting in an enhancement request and the tech support team could give you a better answer if it's not technically possible (it may be possible just not created).
One last option you could try, but this won't stop you from having to use s-functions. Create a subsystem with the MATLAB function inside of it, then use the right-click generate s-function option. This will create a block for you that runs a mex-file. You can add this to a utilities library along with the rest of your project. This option may be considered a bit cleaner than MATLAB function blocks...

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!