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