Matlab - Problema ode 45

   
Vista:

Problema ode 45

Publicado por Ivan (1 intervención) el 16/12/2014 11:25:36
hola,
estoy intentando resolver un circuito RLCD (con diodo) a través de matlab.
tengo sacadas las dos ecuaciones diferenciales, el sistema es no lineal debido al diodo.

los parámetros para todas las variables han sido calculadas analíticamente.

Me gustaria plotear el comportamiento y el diagrama de bifurcaciones pero el ode 45 no me saca ningún resultado, directamente se queda "pillado" y no me da ningún resultado.

os pongo mi código

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
Is=1E-10;
Ud0= 5E-3;
R= 1;
C= 1.5E-20;
L= 1E-6;
T=2;
 
%Initial Conditions
 
xo(1)=5;
xo(2)=1;
xo=[xo(1) xo(2)];
 
 
tspan=[0:0.1:T];
 
%definition ode functions
Fhand = @(t,x) [x(1);(-(R*x(1))/L)-((x(2)/C*L))-((Ud0/L)*log(1+(x(1)/Is)))];
 
 
%Use of the ode45 solver
 
options=odeset('AbsTol',0.001,'RelTol',0.001);
[t,y]=ode45(Fhand,tspan,xo,options);
 
%ploting the results
 plot(t,y);
 xlabel ('t');
 ylabel ('dQ,dI');
 title ('diferential equations');
 
r=y(:,1); %obtengo la columna 2 
x=y(:,2); %obtengo la columna 3 
 
%graficamos y vs x 
plot(r,y);

espero que me podáis ayudar,
es una desesperacion total.

mil gracias
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 Jorge De Los Santos

Problema ode 45

Publicado por Jorge De Los Santos (212 intervenciones) el 21/12/2014 22:57:08
Hola Iván.

El problema es una cuestión de "representación de números" en la computadora. Existen limitaciones respecto a la tolerancia numérica manejada por MATLAB, más concretamente, cuando defines la constante C:

1
C= 1.5E-20;


Lo anterior es un número muy muy pequeño.

Consulta la referencia del comando eps que te puede ayudar a entender el trasfondo de este asunto, y a comprender de mejor manera lo relativo a las representaciones de coma flotante.

http://www.mathworks.com/help/matlab/ref/eps.html


Como recomendación, podrías intentar "escalar" tu problema cambiando las unidades de cada magnitud, evidentemente en esos casos habría que "tomarlo con pinzas" por el riesgo de perder la coherencia en la solución de la ED.


Saludos.

Jorge De Los Santos.
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

Problema ode 45

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3441 intervenciones) el 24/12/2014 01:38:59
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clear all
close all
ls=1e-10;
Ud0= 5e-3;
R= 1;
C= 1.5e-10;
L= 1e-6;
T=2;
%Initial Conditions
xo=[5;1];
tspan=[0:0.1:T];
Fhand = @(t,x) [x(1);(-(R*x(1))/L)-((x(2)/C*L))-((Ud0/L)*log(1+(x(1)/ls)))];
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 ]);
[t,x]=ode45(Fhand,tspan,xo,options)
%ploting the results
 plot(t,x);
 xlabel ('t');
 ylabel ('dQ,dI');
 title ('diferential equations');
r=x(:,1); %obtengo la columna 2 
x=x(:,2); %obtengo la columna 3 
%graficamos y vs x 
plot(r,x);


1
2
3
4
5
6
7
8
9
10
11
[code]>> ode45_caballero11
 
t =
 
         0
    0.1000
    0.2000
    0.3000
    0.4000
    0.5000
    0.6000[/code]



Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com
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