Hola a todos, he estado intentando multiplicar una serie de matrices, algunas con variables simbólicas creando funciones propias y demás. Comparto todo abajo.
Creo que el problema reside en el uso de esas variables simbólicas porque al multiplicar alguna matriz que las contiene es cuando el problema aparece. A ver...
Las funciones que uso son estas:
Rotación theta enx eje X.
function RX = MRX(theta)
RX=[1 0 0 0;0 cos(theta) -sin(theta) 0;0 sin(theta) cos(theta) 0;0 0 0 1];
end
Rotación theta en eje Y.
function RY = MRY(theta)
RY=[cos(theta) 0 sin(theta) 0;0 1 0 0;-sin(theta) 0 cos(theta) 0;0 0 0 1];
end
Rotación theta en eje Z.
function RZ = MRZ(theta)
RZ=[cos(theta) -sin(theta) 0 0;sin(theta) cos(theta) 0 0;0 0 1 0;0 0 0 1];
end
Traslación vector r.
function TP = MTP(r)
TP=[1 0 0;0 1 0;0 0 1];
TP(1,4)=r(1);
TP(2,4)=r(2);
TP(3,4)=r(3);
TP(4,4)=1;
end
Como podéis veer son funciones fáciles que lo único que hacen es generar matrices de 4x4.
El "código" de Matlab es el siguiente:
>> p0=[1.5 1 1.5];
>> r1=[0 0 1];
>> r2=[0 1 0];
>> r3=[0 0 -0.1];
>> syms t1 t2 t3
>> M1=MTP(p0);
>> M2=MRY(-pi/2);
>> M3=MRZ(pi/2);
>> M4=MRX(-t1);
>> M5=MTP(r1);
>> M6=MRX(-t2);
>> M7=MTP(r2);
>> M8=MRX(-t3);
>> M9=MTP(r3);
>> T=M1*M2*M2*M3*M4*M5*M6*M7*M8*M9;
Básicamente creo 4 vectores (p0, r1, r2 y r3) y tres variables simbólicas (t1, t2, t3). Las variables simbólicas son ángulos de giro theta1 (t1), theta2 (t2), theta3 (t3). Creo nueve matrices y las multiplico.
A continuación pongo el resultado que se genera solo para, por ejemplo, la multiplicación de M3 (que es una rotación en el eje z de 90º) y M4 (que es una rotación en el eje x un ángulo t1).
>> M3
M3 =
0.0000 -1.0000 0 0
1.0000 0.0000 0 0
0 0 1.0000 0
0 0 0 1.0000
//nota*( sin corchetes, no se porqué???)
M4 =
[ 1, 0, 0, 0]
[ 0, cos(t1), sin(t1), 0]
[ 0, -sin(t1), cos(t1), 0]
[ 0, 0, 0, 1]
//nota*( con corchetes, no se porqué???)
>> M3*M4
ans =
[ 4967757600021511/81129638414606681695789005144064, -cos(t1), -sin(t1), 0]
[ 1, (4967757600021511*cos(t1))/81129638414606681695789005144064, (4967757600021511*sin(t1))/81129638414606681695789005144064, 0]
[ 0, -sin(t1), cos(t1), 0]
[ 0, 0, 0, 1]
Puede verse claramente que esa retahíla de números no es la solución correcta.
En fin, no se que hago mal.
//nota* Algo que tampoco se porque ocurre es que las matrices con variables simbólicas aparecen como cuatro vectores entre corchetes y las otras no.
Si alguien me pudiese ayudar se lo agradeceré enormemente.
En cualquier caso, gracias de antemano y un saludo a todos.
Creo que el problema reside en el uso de esas variables simbólicas porque al multiplicar alguna matriz que las contiene es cuando el problema aparece. A ver...
Las funciones que uso son estas:
Rotación theta enx eje X.
function RX = MRX(theta)
RX=[1 0 0 0;0 cos(theta) -sin(theta) 0;0 sin(theta) cos(theta) 0;0 0 0 1];
end
Rotación theta en eje Y.
function RY = MRY(theta)
RY=[cos(theta) 0 sin(theta) 0;0 1 0 0;-sin(theta) 0 cos(theta) 0;0 0 0 1];
end
Rotación theta en eje Z.
function RZ = MRZ(theta)
RZ=[cos(theta) -sin(theta) 0 0;sin(theta) cos(theta) 0 0;0 0 1 0;0 0 0 1];
end
Traslación vector r.
function TP = MTP(r)
TP=[1 0 0;0 1 0;0 0 1];
TP(1,4)=r(1);
TP(2,4)=r(2);
TP(3,4)=r(3);
TP(4,4)=1;
end
Como podéis veer son funciones fáciles que lo único que hacen es generar matrices de 4x4.
El "código" de Matlab es el siguiente:
>> p0=[1.5 1 1.5];
>> r1=[0 0 1];
>> r2=[0 1 0];
>> r3=[0 0 -0.1];
>> syms t1 t2 t3
>> M1=MTP(p0);
>> M2=MRY(-pi/2);
>> M3=MRZ(pi/2);
>> M4=MRX(-t1);
>> M5=MTP(r1);
>> M6=MRX(-t2);
>> M7=MTP(r2);
>> M8=MRX(-t3);
>> M9=MTP(r3);
>> T=M1*M2*M2*M3*M4*M5*M6*M7*M8*M9;
Básicamente creo 4 vectores (p0, r1, r2 y r3) y tres variables simbólicas (t1, t2, t3). Las variables simbólicas son ángulos de giro theta1 (t1), theta2 (t2), theta3 (t3). Creo nueve matrices y las multiplico.
A continuación pongo el resultado que se genera solo para, por ejemplo, la multiplicación de M3 (que es una rotación en el eje z de 90º) y M4 (que es una rotación en el eje x un ángulo t1).
>> M3
M3 =
0.0000 -1.0000 0 0
1.0000 0.0000 0 0
0 0 1.0000 0
0 0 0 1.0000
//nota*( sin corchetes, no se porqué???)
M4 =
[ 1, 0, 0, 0]
[ 0, cos(t1), sin(t1), 0]
[ 0, -sin(t1), cos(t1), 0]
[ 0, 0, 0, 1]
//nota*( con corchetes, no se porqué???)
>> M3*M4
ans =
[ 4967757600021511/81129638414606681695789005144064, -cos(t1), -sin(t1), 0]
[ 1, (4967757600021511*cos(t1))/81129638414606681695789005144064, (4967757600021511*sin(t1))/81129638414606681695789005144064, 0]
[ 0, -sin(t1), cos(t1), 0]
[ 0, 0, 0, 1]
Puede verse claramente que esa retahíla de números no es la solución correcta.
En fin, no se que hago mal.
//nota* Algo que tampoco se porque ocurre es que las matrices con variables simbólicas aparecen como cuatro vectores entre corchetes y las otras no.
Si alguien me pudiese ayudar se lo agradeceré enormemente.
En cualquier caso, gracias de antemano y un saludo a todos.