Matlab - restriciones en las variables para resolver sistemas de ecuaciones no lineales

 
Vista:
sin imagen de perfil

restriciones en las variables para resolver sistemas de ecuaciones no lineales

Publicado por juan (5 intervenciones) el 19/12/2014 03:50:51
Hola buenas noches, espero alguien pueda ayudarme con la siguiente cuestión:
Estoy resolviendo un sistema de ecuaciones no lineales, sin embargo de acuerdo a los valores iniciales que yo ingreso no me arroja solución, mi pregunta es; puedo poner restricciones de las variables, es decir por ejemplo decir x(1)>0, por decir algo, esto para evitar estas in-factibilidades y lograr obtener soluciones adecuadas?.

Nota: estoy usando fsolve
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

restriciones en las variables para resolver sistemas de ecuaciones no lineales

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/12/2014 20:09:35
Poner el ejemplo el cual desea resolver, para mayor claridad de la pregunta.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y 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
sin imagen de perfil

restriciones en las variables para resolver sistemas de ecuaciones no lineales

Publicado por JUAN (5 intervenciones) el 23/12/2014 20:15:24
Hola que tal, el sistema que intento resolver es el siguiente:

function f=ecuaciones(x)
f=[x(1)+x(3)+x(4)-2;4*x(1)+2*x(2)+2*x(5)-14; x(2)+x(3)+2*x(4)-3;
(1970/8314)+log(x(1)/(x(1)+x(2)+x(3)+x(4)+x(5)))+(x(6)/8314)+4*(x(8)/8314);
(-192420/8314)+log(x(2)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*(x(8)/8314)+(x(7)/8314);
(-200240/8314)+log(x(3)/(x(1)+x(2)+x(3)+x(4)+x(5)))+(x(6)/8314)+(x(7)/8314);
(-395790/8314)+log(x(4)/(x(1)+x(2)+x(3)+x(4)+x(5)))+(x(6)/8314)+2*(x(7)/8314);
log(x(5)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*(x(8)/8314)];


Sin embargo no converge, y las respuesta que me arroja son números complejos y negativos, sin embargo x(1),x(2),x(3), x(4),x(5), son numero de moles los cuales no pueden ser negativos, de esta manera pensaba colocar restricciones las cuales me proporcionaron solo soluciones mayor o igual que cero, es posible?
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

restriciones en las variables para resolver sistemas de ecuaciones no lineales

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/12/2014 21:08:49
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
>> clear all
x=sym('x',[1 8]);
 f=[x(1)+x(3)+x(4)-2;4*x(1)+2*x(2)+2*x(5)-14; x(2)+x(3)+2*x(4)-3;
 (1970/8314)+log(x(1)/(x(1)+x(2)+x(3)+x(4)+x(5)))+(x(6)/8314)+4*(x(8)/8314);
 (-192420/8314)+log(x(2)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*(x(8)/8314)+(x(7)/8314);
 (-200240/8314)+log(x(3)/(x(1)+x(2)+x(3)+x(4)+x(5)))+(x(6)/8314)+(x(7)/8314);
 (-395790/8314)+log(x(4)/(x(1)+x(2)+x(3)+x(4)+x(5)))+(x(6)/8314)+2*(x(7)/8314);
 log(x(5)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*(x(8)/8314)];
x=solve(f);
    x1=double(x.x1)
    x2=double(x.x2)
    x3= double(x.x3)
    x4=double(x.x4)
   x5= double(x.x5)
    x6= double(x.x6)
    x7=double(x.x7)
   x8= double(x.x8)
Warning: Possibly spurious solutions [solvelib::checkSolutions]
Warning: Possibly spurious solutions [solvelib::checkSolutions]
Warning: Possibly spurious solutions [solvelib::checkSolutions]
Warning: Possibly spurious solutions [solvelib::checkSolutions]
 
x1 =
 
    0.5220
 
 
x2 =
 
    1.1422
 
 
x3 =
 
    1.0983
 
 
x4 =
 
    0.3797
 
 
x5 =
 
    4.8138
 
 
x6 =
 
  1.2323e+004
 
 
x7 =
 
  2.0438e+005
 
 
x8 =
 
  2.0886e+003
 
>>



Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y 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
2
Comentar
sin imagen de perfil

restriciones en las variables para resolver sistemas de ecuaciones no lineales

Publicado por Juan (5 intervenciones) el 24/12/2014 05:35:05
Hola que tal, muchas gracias por la respuesta Jose Jeremias Caballero,aun soy nuevo en matlab. Por cierto intente hacer lo que me sugieres sin embargo tuve un problema con sym, al ingresar x=sym('x',[1 8]); matlab me marca lo siguiente:
>> x=sym('x',[1 8]);
??? Error using ==> error
Formatted arguments cannot be non-scalar numeric matrices.

Error in ==> sym.sym>assumptions at 2180
error('symbolic:sym:sym:errmsg1','Second argument %s not recognized.',a);

Error in ==> sym.sym>tomupad at 2148
assumptions(S,x,a);

Error in ==> sym.sym>sym.sym at 114
S.s = tomupad(x,a);



Que cress que suceda?, que estoy haciendo mal?,

Gracias

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