repmat function in Simulink
Mostra commenti meno recenti
I would like to perform the repmat() function in Simulink. Apparently, there isn't a block for this purpose. So I doing this using the MATLAB function block. Here the following signal dimensions that I'm trying to handle

The code is just:
function y = repmat(u, Ns)
y = repmat(u, [Ns,1,1]); % Ns is a paramater of my system
It works, but using this block is always awkward and inefficient. Is there a clever way to do this?
15 Commenti
hosein Javan
il 16 Ago 2020
Modificato: hosein Javan
il 16 Ago 2020
repmat is usally used for element wise operations. if you can tell why even thinking of repmat, maybe there's a better solution of that.
Walter Roberson
il 16 Ago 2020
from your diagram I would have expected repmat(u, [1,1, Ns]) unless you wanted a different element order and you had hardwired the output size to prevent conflicts on the number of dimensions.
Walter Roberson
il 16 Ago 2020
I do not agree that repmat is used for elementwise operations. That would be repelems
hosein Javan
il 16 Ago 2020
hello Mr. Walter Roberson . for example if we want to multiply each row of a matrix by a vector, that would be repmat(k,[m 1]).*A which is element wise. from my experience, it is a faster way than loops. called vectorization I assume.
Walter Roberson
il 16 Ago 2020
If k is a vector with the same number of columns as matrix A, then all you need since R2016b is k.*A . This is "implicit expansion".
hosein Javan
il 16 Ago 2020
I'm using 2016a, thanks for implying that. I'm just concerned that newer versions aren't too RAM-friendy!
Walter Roberson
il 16 Ago 2020
bsxfun for earlier releases
hosein Javan
il 17 Ago 2020
great help. thank you. I see that bsxfun is for element.wise operation. if the operation was not element wise like "A\b", I assume the best way is arrayfun, isn't it?
Walter Roberson
il 17 Ago 2020
If you repmat to create A for A\b then the array will be singular.
If you repmat to create rows of b then that could be valid. You would not use arrayfun for that.
If you repmat to create columns of b then it would be more efficient to instead repmat the output, as the \ operator will give the same results for all columns of b that are identical columns.
hosein Javan
il 17 Ago 2020
Walter Roberson can you please answer me in this question?
Walter Roberson
il 17 Ago 2020
Modificato: Walter Roberson
il 5 Nov 2020
No, I cannot answer that question. See https://www.mathworks.com/matlabcentral/answers/29574-automatic-detection-of-melanoma#answer_37922
Rubem Pacelli
il 5 Nov 2020
Walter Roberson
il 5 Nov 2020
Use a selector block. Choose 2 dimensions for input. For your first dimension, tell it to select all. For your second dimension, tell it to use a vector from dialog. In the dialog space, enter
repmat(1:2, 1, Ns)
assuming here that the size of the second dimension is 2.
Now connect a reshape() block to the output of that, and specify output dimensions [1, 2, Ns*2]
Rubem Pacelli
il 5 Nov 2020
Modificato: Rubem Pacelli
il 5 Nov 2020
Walter Roberson
il 5 Nov 2020
Yes, you are right, [1, 2, Ns]
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Matrix Indexing in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!