es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Resolviendo numéricamente un par de ecuaciones diferenciales de segundo orden acopladas con odeToVectorField.

Estoy intentando utilizar algunas de las funciones en MATLAB para resolver numéricamente un par de EDOs de segundo orden acopladas del siguiente formulario:

\ddot{x} = f(x,y,\dot{x},\dot{y})

\ddot{y} = f(x,y,\dot{x},\dot{y}).

Puedo lograr que funcione con solo una EDO de segundo orden, pero el código que estoy intentando no funciona para un par de EDOs.

La función “odeToVectorField” toma efectivamente una EDO de segundo orden y la convierte en un vector para un par de EDOs de primer orden acopladas. “ode45” es el método de solución de Runge-Kutta habitual. “xInit” e “yInit” corresponden a las condiciones iniciales para x e y, y el objetivo es luego trazar tanto x como y en función del tiempo en un cierto intervalo de tiempo.

gamma1=0.1;
gamma2=0.1;
a=1;
m=1;
g=9.8;
d=1;

syms x(t) y(t)
eqn1=diff(x,2)== (gamma1diff(x))/(a + md^2 + (m/2)d^2cos(y-x)) + (gamma2diff(y))/(a+ (m/2)cos(y-x)) – ( (m/2)d^2sin(y-x)(diff(x)^2 – diff(y)^2))/(a + md^2 + (m/2)d^2cos(y-x)) – ((m/2)d^2diff(x)^2(y-x))/(a+ (m/2)cos(y-x)) – ((m/2)d(3gsin(x) + gsin(y)))/(a + md^2 + (m/2)d^2cos(y-x)) – ((m/2)dgsin(y))/(a+ (m/2)cos(y-x))

eqn2=diff(y,2)== (gamma1diff(x))/((m/2)d^2cos(y-x)) + (gamma2diff(y))/a – ( (m/2)d^2sin(y-x)(diff(x)^2 – diff(y)^2))/((m/2)d^2cos(y-x)) – ((m/2)d^2diff(x)^2(y-x))/a – ((m/2)d(3gsin(x) + gsin(y)))/((m/2)d^2cos(y-x)) – ((m/2)dgsin(y))/a

V = odeToVectorField(eqn1,eqn2)

M = matlabFunction(V,’vars’,{‘t’,’Y’})

intervalo = [0 20];
xInit = [2 0];
yInit = [2 0];
ySol = ode45(M,intervalo,xInit, yInit);
valoresT = linspace(0,20,100);
valoresY = deval(ySol,valoresT,1);
plot(valoresT,valoresY)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado intenta resolver un sistema de dos ecuaciones diferenciales ordinarias de segundo orden utilizando las funciones odeToVectorField y ode45 de MATLAB. El primer paso consiste en definir las ecuaciones de movimiento para el sistema, que se dan mediante las variables eqn1 y eqn2. Estas ecuaciones son expresiones simbólicas en términos de las funciones x(t) e y(t) y sus derivadas.

    El siguiente paso es utilizar la función odeToVectorField, que toma las dos ecuaciones diferenciales ordinarias de segundo orden y las convierte en un sistema de cuatro ecuaciones diferenciales ordinarias de primer orden, que son más fáciles de resolver numéricamente. El campo vector resultante se almacena en la variable V.

    Luego se utiliza la función matlabFunction para crear una función de MATLAB M que toma el campo vector V y las variables de entrada t e Y (el vector de variables de estado) como entradas. Esto es necesario porque la función ode45 requiere un puntero a función que tome t e Y como entradas.

    A continuación, se utiliza la función ode45 para integrar numéricamente el sistema de ecuaciones diferenciales ordinarias de primer orden durante el intervalo de tiempo especificado y con las condiciones iniciales dadas. La solución resultante se almacena en la variable ySol.

    Finalmente, se utiliza la función plot para trazar las soluciones de x e y como funciones del tiempo durante el intervalo de tiempo especificado.

Comments are closed.