Matlab - Ecuaciones diferenciales ODE45

 
Vista:

Ecuaciones diferenciales ODE45

Publicado por Maria (27 intervenciones) el 22/05/2015 16:31:30
Hola! Tengo que realizar un programa sobre dos osciladores que tienen cada uno su frecuencia natural w1 y w2, estos osciladores al cabo de un tiempo se sincronizan. La ecuación que rige su movimiento es

dx(1)/dt=w1+(k/2)*sin(x(2)-x(1))
dx(2)/dt= w2+(k/2)*sin(x(1)-x(2))

donde w1 y w2 son las frecuencias naturales de los osciladores y k la constante de acoplamiento.
La idea es que cuando resuelva las ecuaciones obtengo x(1) y x(2). Si realizo el limite cuando t->inf x(1)/t y lo mismo para x(2) obtengo las frecuencias observadas.

Busco representar esas frecuencias observadas en funcion de valores de k, de manera que se vea para que k (k umbral) se sincronizan.

MI PROBLEMA ES EL BUCLE FOR; NO ESTOY SEGURA SI PARA EVALUAR LA ODE EN TODOS LOS VALORES DE K, DEBA HACER EL BUCLE O UTILIZAR "OPTIONS" DE ODE45, DE MANERA QUE ME EVALUE LA FUNCION DESDE K=0 HASTA EL K QUE YO LE META. AGRADECERÉ CUALQUIER AYUDA. GRACIAS. OS DEJO EL CODIGO.


% Para que me pida frecuencias 1 y 2
w1=input(' Frecuencia 1: ');
w2=input('Frecuencia 2: ');

%tiempo final hasta el que integro
tf=input('Introduce el tiempo que consideres suficientemente largo: ');

%que me pida un k para que el que dejar de evaluar
klim=input('Introduce el k limite: ');

%condiciones iniciales y tiempo
x0=zeros(1,2);
x0(1)=input('Condiciones iniciales de phi 1: ');
x0(2)=input('Condiciones iniciales de phi 2: ');
tspan=linspace(0,tf);



%k para recorrer, hago bucle
for k=0:1:klim

%ahora defino las funciones, la funcion f sera la de phi 1 punto y la funcion g
%la de phi 2 punto

fg=@(t,x) [w1+(k/2)*sin(x(2)-x(1)); w2+(k/2)*sin(x(1)-x(2))];

[t,x]=ode45(fg,tspan,x0);

% Ahora aparece las frecuencias observadas 1(n) y 2 (m),que se describen como el limite
% cuando t->inf de los valores de phi(t)/t.

n=(x(length(t),1))/t(length(t))
m=(x(length(t),2))/t(length(t))


%pinta las frecuencias observadas m y n en funcion de los valores de k.
hold on
plot(k,n)
hold on
plot(k,m)


end
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

Ecuaciones diferenciales ODE45

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/05/2015 15:07:52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function ode45ecuaciones(W1,W2,tf, klim)
global w1 w2 k
w1=W1;
w2=W2;
k=klim;
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4]);
for k=1:klim
 figure(k)
[T,Y] = ode45(@ecua_osciladores,[0 tf],[0 1]);
plot(T,Y(:,1),'-',T,Y(:,2),'-.')
pause(0.5)
end
 
 
function dx=ecua_osciladores(t,x)
global w1 w2 k
dx=zeros(2,1);
dx(1)=w1+(k/2)*sin(x(2)-x(1));
 dx(2)= w2+(k/2)*sin(x(1)-x(2));


1
ode45ecuaciones(1,2,10,5)


Saludos .
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
[email protected]
skype: josejeremiascaballero
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


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