Я создал две функции: frame
и t1
.Первый (для простоты я заменил определенную матрицу на eye
здесь) возвращает три трехмерных вектора.
function [frames] = frame(a1,a2,a3)
L = a1*a2*a3*eye(3);
frames(1,:)= L*([1,0,0])';
frames(2,:)=L*([0,1,0])';
frames(3,:)=L*([0,0,1])';
end
Вторая функция принимает два скаляра (B
, phi1
) итри вектора (через матрицу Frame
) в качестве входных данных и возвращает еще один:
function [t1] = t1(B,Frame,phi1)
ex=Frame(1,:);
ey=Frame(2,:);
ez=Frame(3,:);
t1 = -sin(phi1)*ex - cos(B)*cos(phi1)*ey + cos(phi1)*sin(B)*ez ;
end
Когда я хочу построить или выполнить какие-либо операции с phi1
или B
, являющимися векторами, ясно, что я сталкиваюсь с проблемамипотому что такие термины, как sin(phi1)*ex
имеют неправильные размеры.Замена их на sin(phi1).*ex
также явно неправильна, поскольку ex
всегда будет иметь размерность 3, тогда как sin(phi1)
будет иметь размерность phi1
.
Пример:
phi1=linspace(0,2*pi);
plot(phi1,t1(pi/2,frame(1,1,1),phi1))
.
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the
number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
Как обойти эту проблему, с которой я столкнулся во многих других случаях?