Element-wise product in Simulink

50 views (last 30 days)
Ryan Takatsuka
Ryan Takatsuka on 22 Aug 2018
Answered: madhan ravi on 27 Dec 2023
I would like to perform an element-wise multiplication (Hadamard product) between 2 matrices in Simulink. The "multiply" block only allows for element-wise multiplication when the dimensions of both arguments are equal. For example, I would like to perform the following in Simulink (which works in MATLAB):
a = [1,2,3
4,5,6
7,8,9];
b = [1,2,3];
c = a.*b; % element-wise multiplication [3X3] x [1X3]
The only method I have found that works in Simulink is to copy each row of the b vector to produce 2 matrices that have the same dimensions:
a = [1,2,3
4,5,6
7,8,9];
b = [1,2,3
1,2,3
1,2,3];
c = a.*b;
This method is not ideal because my matrices are very large and I am trying to avoid duplicating the b vector to save memory.
  6 Comments
Ryan Takatsuka
Ryan Takatsuka on 23 Aug 2018
So what would be the most efficient way to perform this calculation? It seems like expanding the vector to a matrix internally is inefficient if the vector is very long.
It seems like doing the multiplication manually is the most efficient because the vector doesn't have to be expanded (I was hoping for a cleaner way to do this though since I am trying to accomplish this with pure Simulink blocks and no MATLAB functions):
c = zeros(3);
for i=1:size(a,1)
c(i,:) = a(i,:) .* b;
end
Walter Roberson
Walter Roberson on 23 Aug 2018
I wonder if you could get somewhere switching between sample based and frame based ?

Sign in to comment.

Answers (1)

madhan ravi
madhan ravi on 27 Dec 2023
Desired can be achieved using For Each or For Iterator subsystem

Categories

Find more on Simulink Functions in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!