Matlab - Resolver Ecuaciones No lineales

 
Vista:
sin imagen de perfil

Resolver Ecuaciones No lineales

Publicado por Oscar (1 intervención) el 20/04/2014 21:24:25
Hola amigos, veran tengo un problema con un código de matlab, el problema es que matlab no me muestra todas las soluciones de un sistema de ecuaciones no lineales, sólo me muestra una solución pero yo necesito todas las posibles, el sistemas es un sistema de 3x3 y siempre será asi, es para poder sacar la cinemática inversa de manipuladores, espero que me puedan ayudar, el código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
syms l1 l2 b1 b2 b3 l3 l4 theta1 b3 alfa1 b2 theta2 a2 alfa2 theta3 theta4 theta5 theta6
 
P=[400,400,600]
l1=100
 
x1=[ 0, theta1, l1, pi/2];
 
x2=[ 0, theta2, 0, -pi/2];
 
x3=[ b3, 0, 0, 0];
 
%x4=[ -320, 0, 0, pi/2];
 
%x5=[ 0, pi/6, 0, -pi/2];
 
%x6=[ -80, 0, 0, pi];
 
 
T1=[cos(x1(2)) -1*sin(x1(2))*cos(x1(4)) sin(x1(2))*sin(x1(4)) x1(3)*cos(x1(2));
    sin(x1(2)) cos(x1(2))*cos(x1(4)) -1*cos(x1(2))*sin(x1(4)) x1(3)*sin(x1(2));
    0 sin(x1(4)) cos(x1(4)) x1(1);
    0 0 0 1];
T2=[cos(x2(2)) -1*sin(x2(2))*cos(x2(4)) sin(x2(2))*sin(x2(4)) x2(3)*cos(x2(2));
    sin(x2(2)) cos(x2(2))*cos(x2(4)) -1*cos(x2(2))*sin(x2(4)) x2(3)*sin(x2(2));
    0 sin(x2(4)) cos(x2(4)) x2(1);
    0 0 0 1];
T3=[cos(x3(2)) -1*sin(x3(2))*cos(x3(4)) sin(x3(2))*sin(x3(4)) x3(3)*cos(x3(2));
    sin(x3(2)) cos(x3(2))*cos(x3(4)) -1*cos(x3(2))*sin(x3(4)) x3(3)*sin(x3(2));
    0 sin(x3(4)) cos(x3(4)) x3(1);
    0 0 0 1];
 
T14=T1*T2*T3
 
e1=T14(1,4)==P(1);
e2=T14(2,4)==P(2);
e3=T14(3,4)==P(3);
 
[b3,theta2,theta1]=solve(e1,e2,e3);
 
W1=radtodeg(vpa(theta1,10))
W2=radtodeg(vpa(theta2,10))
W3=vpa(b3,10)


Como pueden observar lo que hago es tomar las ecuaciones que quiero resolver de una matriz de 4x4 y aplicar el solve, antes si me mostraba todas las soluciones con el solve pero se tenian que introducir manualmente las tres ecuaciones, pero lo que yo necesito es introducirlas desde la matriz y que me muestren todas las soluciones.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Resolver Ecuaciones No lineales

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/04/2014 22:24:08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
clear all
syms l1 l2 b1 b2 b3 l3 l4 theta1 b3 alfa1 b2 theta2 a2 alfa2 theta3 theta4 theta5 theta6
P=[400,400,600];
l1=100;
 x1=[ 0, theta1, l1, pi/2];
 x2=[ 0, theta2, 0, -pi/2];
 x3=[ b3, 0, 0, 0];
 %x4=[ -320, 0, 0, pi/2];
 %x5=[ 0, pi/6, 0, -pi/2];
 %x6=[ -80, 0, 0, pi];
 
 T1=[cos(x1(2)) -1*sin(x1(2))*cos(x1(4)) sin(x1(2))*sin(x1(4)) x1(3)*cos(x1(2));
 sin(x1(2)) cos(x1(2))*cos(x1(4)) -1*cos(x1(2))*sin(x1(4)) x1(3)*sin(x1(2));
 0 sin(x1(4)) cos(x1(4)) x1(1);
 0 0 0 1];
 T2=[cos(x2(2)) -1*sin(x2(2))*cos(x2(4)) sin(x2(2))*sin(x2(4)) x2(3)*cos(x2(2));
 sin(x2(2)) cos(x2(2))*cos(x2(4)) -1*cos(x2(2))*sin(x2(4)) x2(3)*sin(x2(2));
 0 sin(x2(4)) cos(x2(4)) x2(1);
 0 0 0 1];
 T3=[cos(x3(2)) -1*sin(x3(2))*cos(x3(4)) sin(x3(2))*sin(x3(4)) x3(3)*cos(x3(2));
 sin(x3(2)) cos(x3(2))*cos(x3(4)) -1*cos(x3(2))*sin(x3(4)) x3(3)*sin(x3(2));
 0 sin(x3(4)) cos(x3(4)) x3(1);
 0 0 0 1];
 
 T14=T1*T2*T3;
 e1=T14(1,4)-P(1);
 e2=T14(2,4)-P(2);
 e3=T14(3,4)-P(3);
 [b3,theta2,theta1]=solve(e1,e2,e3);
 W1=radtodeg(vpa(theta1,10))
 W2=radtodeg(vpa(theta2,10))
 W3=vpa(b3,10)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>> sistema_no_lineal1
Warning: The solutions are parametrized by the symbols:
z = (Dom::ImageSet(arcsin(4) + 2*PI*k, k, Z_) union Dom::ImageSet(PI - arcsin(4) + 2*PI*k, k, Z_)) intersect
(Dom::ImageSet(arccos(4) + 2*PI*k, k, Z_) union Dom::ImageSet(- arccos(4) + 2*PI*k, k, Z_))
 
> In solve at 171
  In sistema_no_lineal1 at 29
 
W1 =
 
 180.00000000000000638455233106793
 142.18344599216765159866367808872
 
 
W2 =
 
 (1007958012753983*z)/17592186044416
   45.000000000000001561253399077474
 
 
W3 =
 
       -600.0
 -759.5149209


Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online y Presencial en Matlab
programador en matlab
Servicios de programación matlab
[email protected]
El correo es para servicios de programación, toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar