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

Sam Chak
Sam Chak 2025년 3월 21일
Hi @tianyuan wang, by clicking the indentation icon , you can copy and paste the code in a format that resembles the MATLAB Editor environment.
bPosGlobal = zeros(6,1);
OWScalcBodyWave(bPosGlobal);
rowNum = 6
columnNum = 1
bPosGlobal = 1×6
0 0 0 0 0 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
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

댓글을 달려면 로그인하십시오.

 채택된 답변

Walter Roberson
Walter Roberson 2025년 3월 22일

1 개 추천

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개)

카테고리

도움말 센터File Exchange에서 Programmatic Model Editing에 대해 자세히 알아보기

제품

릴리스

R2024b

질문:

2025년 3월 21일

답변:

2025년 3월 22일

Community Treasure Hunt

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

Start Hunting!

Translated by