필터 지우기
필터 지우기

Size mismatch (size [1 x 3] ~= size [3 x 1]).

조회 수: 10 (최근 30일)
m13
m13 2017년 6월 10일
댓글: Busra Turk 2021년 5월 7일
I am getting the following error:
Size mismatch (size [1 x 3] ~= size [3 x 1]).
Function 'Controllers/Nonlinear_Controller' (#551.836.851), line 35, column 10:
"w_B_IB + w_O*c2"
My code is below and attached is my simulink diagram.
global w_O
q_acc_d = in(1:4);
q_dot_d = in(5:8);
q_d = in(9:12);
x_dot = in(13:19);
x = in(20:26);
eta_acc_d = q_acc_d(1);
epsilon_acc_d = q_acc_d(2:4);
eta_dot_d = q_dot_d(1);
epsilon_dot_d = q_dot_d(2:4);
eta_d = q_d(1);
epsilon_d = q_d(2:4);
eta_dot = x_dot(1);
epsilon_dot = x_dot(2:4);
w_B_IB_dot = x_dot(5:7);
eta = x(1);
epsilon = x(2:4);
w_B_IB = x(5:7);
% Transforming from w_B_IB to w_B_OB
q = [eta; epsilon(1); epsilon(2); epsilon(3)];
R_O_B = Rquat(q);
R_B_O = R_O_B';
c2 = R_B_O(:,2);
w_B_OB = w_B_IB + w_O*c2;global w_O
q_acc_d = in(1:4);
q_dot_d = in(5:8);
q_d = in(9:12);
x_dot = in(13:19);
x = in(20:26);
eta_acc_d = q_acc_d(1);
epsilon_acc_d = q_acc_d(2:4);
eta_dot_d = q_dot_d(1);
epsilon_dot_d = q_dot_d(2:4);
eta_d = q_d(1);
epsilon_d = q_d(2:4);
eta_dot = x_dot(1);
epsilon_dot = x_dot(2:4);
w_B_IB_dot = x_dot(5:7);
eta = x(1);
epsilon = x(2:4);
w_B_IB = x(5:7);
% Transforming from w_B_IB to w_B_OB
q = [eta; epsilon(1); epsilon(2); epsilon(3)];
R_O_B = Rquat(q);
R_B_O = R_O_B';
c2 = R_B_O(:,2);
w_B_OB = w_B_IB + w_O*c2;
I am getting this error and can't figure it out. The same error is occurring in the sliding_mode and nonlinear_controller scripts. Anyone know what could be going on?
  댓글 수: 1
Busra Turk
Busra Turk 2021년 5월 7일
Hello, did you solve your problem? What was the problem?

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

답변 (1개)

Walter Roberson
Walter Roberson 2017년 6월 10일
We do not know whether in is a column vector or a row vector, but probably it is a row vector. That would make x = in(20:26); a row vector, and then that would make w_B_IB = x(5:7); a 1 x 3 row vector.
We do not know the size of Rquat but we can see from
R_O_B = Rquat(q);
R_B_O = R_O_B';
c2 = R_B_O(:,2);
that c2 will be a column vector. We can deduce from the evidence that it is 3 x 1.
We do not know the size of w_O but we can deduce from the evidence that it is 3 x 3.
w_B_IB + w_O*c2 would then be (1 x 3) + (3 x 3) * (3 x 1) . The (3 x 3) * (3 x 1) would then give a 3 x 1 output, leaving you with (1 x 3) + (3 x 1) which is not permitted in R2016a or earlier. In R2016b or later, I do not know if (1 x 3) + (3 x 1) is supported in MATLAB Function Block: if it were supported it would give a 3 x 3 result. If that is what you want to happen, then it is safer to use bsxfun(@plus, w_B_IB, w_O*c2)

카테고리

Help CenterFile Exchange에서 Modeling에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by