Matlab - Función solve para sistemas de ecuaciones

 
Vista:

Función solve para sistemas de ecuaciones

Publicado por Miguel (3 intervenciones) el 13/11/2016 11:09:17
El problema que tengo es el siguiente:

Utilizo el comando solve para resolver un sistema de tres ecuaciones. Lo primero que hago es definir las variables como simbólicas y luego introduzco las ecuaciones en la función solve. A la hora de mostrarme la solución de las tres variables lo hace con un vector simbólico de 2x1 en el que cada elemento esta formado por una gran expresión con números. ¿Cómo puedo hacer que solve me devuelva directamente el valor de esa variable?

Aquí os muestro el problema, muchas gracias:

syms v1a v2a a2a % Variables de nuestro sistema, máximo 3. Si elegimos alguna ya definida la comentamos.

%Conservación de la cantidad de movimiento
ec1=m1*v1a*cos(a1a)+m2*v2a*cos(a2a)==m1*v1d*cos(a1d)+m2*v2d*cos(a2d);
ec2=m1*v1a*sin(a1a)+m2*v2a*sin(a2a)==m1*v1d*sin(a1d)+m2*v2d*sin(a2d);
%Conservación de la energía
ec3=(1/2)*m1*v1a+(1/2)*m2*v2a==(1/2)*m1*v1d+(1/2)*m2*v2d;


[v1a,v2a,a2a]=solve([ec1,ec2,ec3],[v1a,v2a,a2a])

Solución:

v1a =

(16384*6057069290069748520653338389471883516735409650836712763444719^(1/2))/11966455510272234993 + 40322849067290237991602827708997632/11966455510272234993

40322849067290237991602827708997632/11966455510272234993 - (16384*6057069290069748520653338389471883516735409650836712763444719^(1/2))/11966455510272234993


v2a =

- (262144*6057069290069748520653338389471883516735409650836712763444719^(1/2))/226068983829197088111 - 1231540039292833626816166466610823243413711167/431537285416157485944522407936
(262144*6057069290069748520653338389471883516735409650836712763444719^(1/2))/226068983829197088111 - 1231540039292833626816166466610823243413711167/431537285416157485944522407936


a2a =

2*atan(6057069290069748520653338389471883516735409650836712763444719^(1/2)/55406528878980533847412820947583 - 562196504269210168213070418592/4262040682998502603647140072891)

-2*atan(6057069290069748520653338389471883516735409650836712763444719^(1/2)/55406528878980533847412820947583 + 562196504269210168213070418592/4262040682998502603647140072891)
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 Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Función solve para sistemas de ecuaciones

Publicado por Royeth (1818 intervenciones) el 13/11/2016 17:12:14
Utiliza vpa para que obtengas un valor numérico

1
vpa(v1a)
, etc


saludos
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
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

Función solve para sistemas de ecuaciones

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 13/11/2016 17:44:52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clear all
syms v1a v2a a2a % Variables de nuestro sistema, máximo 3. Si elegimos alguna ya definida la comentamos.
%Conservación de la cantidad de movimiento
m1=rand;
a1a=rand;
m2=rand;
v1d=rand;
a1d=rand;
v2d=rand;
a2d=rand;
ec1=m1*v1a*cos(a1a)+m2*v2a*cos(a2a)==m1*v1d*cos(a1d)+m2*v2d*cos(a2d);
ec2=m1*v1a*sin(a1a)+m2*v2a*sin(a2a)==m1*v1d*sin(a1d)+m2*v2d*sin(a2d);
%Conservación de la energía
ec3=(1/2)*m1*v1a+(1/2)*m2*v2a==(1/2)*m1*v1d+(1/2)*m2*v2d;
 
 
[v1a,v2a,a2a]=solve([ec1,ec2,ec3],[v1a,v2a,a2a]);
t=vpa([v1a,v2a,a2a],4);
v1a=t(:,1)
v2a=t(:,2)
a2a=t(:,3)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> solve3
 
v1a =
 
                  0
 3083363325706240.0
 
 
v2a =
 
              2048.0
 -1650662071066624.0
 
 
a2a =
 
 0.25256229197384527651593089103699
 0.66280806196118646766990423202515


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com
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

Función solve para sistemas de ecuaciones

Publicado por Miguel (3 intervenciones) el 13/11/2016 19:36:30
Muchas gracias por vuestra ayuda pero creo que cada variable solo puede tener una solución y en esta caso tiene dos. Ésto se puede deber a que cada variable se recoge en un vector de dos elementos y de esta manera salen dos soluciones al aplicarle la función vpa. ¿No habría ninguna forma de que el solve nos mostrara directamente el valor numérico?
Os muestro como quedan las ecuaciones anteriores añadiendo los valores de las demás constantes:

ec1 =(984609922148412921*v1a)/562949953421312 + 2097*v2a*cos(a2a) == 4225180954702243/137438953472


ec2 =2097*v2a*sin(a2a) - (694453178992105575*v1a)/2251799813685248 == -3075680203800143/274877906944


ec3 =888*v1a + (2097*v2a)/2 == 562042957085335/34359738368

Gracias de nuevo y saludos.
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
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

Función solve para sistemas de ecuaciones

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 13/11/2016 20:29:36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear all
syms v1a v2a a2a % Variables de nuestro sistema, máximo 3. Si elegimos alguna ya definida la comentamos.
%Conservación de la cantidad de movimiento
m1=rand;
a1a=rand;
m2=rand;
v1d=rand;
a1d=rand;
v2d=rand;
a2d=rand;
ec1=m1*v1a*cos(a1a)+m2*v2a*cos(a2a)-(m1*v1d*cos(a1d)+m2*v2d*cos(a2d));
ec2=m1*v1a*sin(a1a)+m2*v2a*sin(a2a)-(m1*v1d*sin(a1d)+m2*v2d*sin(a2d));
ec3=(1/2)*m1*v1a+(1/2)*m2*v2a-((1/2)*m1*v1d+(1/2)*m2*v2d);
[v1a,v2a,a2a]=vpasolve([ec1,ec2,ec3],[v1a,v2a,a2a])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> solve3
 
v1a =
 
0.0018839895305377961690336235700189
 
 
v2a =
 
2.1236025339480401290068712801414
 
 
a2a =
 
0.50017068394785832100148975387373


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]



http://matlabcaballero.blogspot.com
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

Función solve para sistemas de ecuaciones

Publicado por Miguel (3 intervenciones) el 13/11/2016 23:12:16
Ahora todo perfecto. Muchas gracias!
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