
error in Simulink matlab function
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
tianyuan wang
le 21 Mar 2025
Réponse apportée : Walter Roberson
le 22 Mar 2025
Hi
I encounter a problem. Matlab Function allows the matrix transposition:
y = fun(x) % x = [6,1]
x = x';
x
end
For my codes:
bPosGlobal = zeros(6,1)
function [y] = OWScalcBodyWave(bPosGlobal)
y = zeros(6,1);
rowNum = size(bPosGlobal,1)
columnNum = size(bPosGlobal,2)
if (rowNum < columnNum && rowNum > 1) || (rowNum > columnNum && columnNum == 1)
bPosGlobal = bPosGlobal'; % Must be row vector
end
bPosGlobal
end
It reports:
Size mismatch between two arrays
Size mismatch (size [6][1] ~= size [1][6])
But when I comment out some codes, the error disappear:
function [y] = OWScalcBodyWave(bPosGlobal)
y = zeros(6,1);
rowNum = size(bPosGlobal,1)
columnNum = size(bPosGlobal,2)
% if (rowNum < columnNum && rowNum > 1) || (rowNum > columnNum && columnNum == 1)
bPosGlobal = bPosGlobal'; % Must be row vector
% end
bPosGlobal
end
Why this happens?
2 commentaires
Sam Chak
le 21 Mar 2025
Hi @tianyuan wang, by clicking the indentation icon
, you can copy and paste the code in a format that resembles the MATLAB Editor environment.

Chuguang Pan
le 22 Mar 2025
bPosGlobal = zeros(6,1);
OWScalcBodyWave(bPosGlobal);
function [y] = OWScalcBodyWave(bPosGlobal)
y = zeros(6,1);
rowNum = size(bPosGlobal,1)
columnNum = size(bPosGlobal,2)
if (rowNum < columnNum && rowNum > 1) || (rowNum > columnNum && columnNum == 1)
bPosGlobal = bPosGlobal'; % Must be row vector
end
bPosGlobal
end
Réponse acceptée
Walter Roberson
le 22 Mar 2025
Simulink needs to be able to calculate the output size at compile time. Simulink is able to take into account formulas such as size(VARIABLE,DIMENSION) . However a condition such as
if (rowNum < columnNum && rowNum > 1) || (rowNum > columnNum && columnNum == 1)
is too complicated for it to be able to calculate the output size at compile time.
I think what you want to do is going to be difficult.
I think you should constrain the input to be appropriately sized and let that size propagate back.
Or consider using a Transopose block https://www.mathworks.com/help/simulink/slref/transpose.html possibly with an if/then/else block structure https://www.mathworks.com/help/simulink/slref/if.html
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Programmatic Model Editing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!