error in Simulink matlab function

조회 수: 4 (최근 30일)
tianyuan wang
tianyuan wang 2025년 3월 21일
답변: Walter Roberson 2025년 3월 22일
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.
Chuguang Pan
Chuguang Pan 2025년 3월 22일
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일
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개)

카테고리

Help CenterFile Exchange에서 Programmatic Model Editing에 대해 자세히 알아보기

제품


릴리스

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by