Autor Tema: Método numérico para ecuación diferencial de segundo orden

0 Usuarios y 1 Visitante están viendo este tema.

15 Abril, 2019, 08:32 pm
Respuesta #20

Abdulai

  • Moderador Global
  • Mensajes: 2,342
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
No entiendo su expresión, de seguro es una diferencia cultural pero en fin.

Lo que quise decir es que la ecuación:

\( x(t) = c_1 e^{-3.5534799 t} sin(9.2019444 t) + c_2 e^{-3.5534799 t} cos(9.2019444 t) - 0.000459688042
 \)

La arrojó WolframAlpha mientras que los otros valores los encontré realizando la regresión lineal y se puede observar que el exponente de \( e \) es distinto, el mío es positivo...

Las derivadas/diferencias introducen mucho error, ni hablar de las derivadas/diferencias segundas. En consecuencia, el resultado de la regresión puede ser cualquier cosa. 
Eso obliga a "acondicionar" los datos, por ejemplo, usar un intervalo de tiempo mayor y descartar los datos con mucho error o muy alejados.   



De todas maneras, me pregunto que métodos has visto para resolver esta clase de problemas, pues no veo sentido aplicar métodos que no se han explicado.

Por ejemplo, si tuviese que resolver esto por el método y las herramientas que se me antojen lo haría con Matlab aplicando la transformada de Hilbert, pero tal vez al profesor no le guste ese camino.

16 Abril, 2019, 07:35 am
Respuesta #21

martiniano

  • Héroe
  • Mensajes: 1,072
  • País: es
  • Karma: +2/-0
  • Sexo: Masculino
Hola

Las derivadas/diferencias introducen mucho error, ni hablar de las derivadas/diferencias segundas. En consecuencia, el resultado de la regresión puede ser cualquier cosa. 
Eso obliga a "acondicionar" los datos, por ejemplo, usar un intervalo de tiempo mayor y descartar los datos con mucho error o muy alejados.   

Pues sí. Probablemente no fuese muy buena idea. A parte de lo dicho por Abdulai, dan problemas los puntos que tienen una misma abcisa (tiempo), que sí pueden haberlos en el problemas de regresión. Tal vez "acondicionando" los datos como dices... Pero no sé...

Un saludo.

16 Abril, 2019, 07:39 am
Respuesta #22

Nexos

  • Junior
  • Mensajes: 73
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Las derivadas/diferencias introducen mucho error, ni hablar de las derivadas/diferencias segundas. En consecuencia, el resultado de la regresión puede ser cualquier cosa. 
Eso obliga a "acondicionar" los datos, por ejemplo, usar un intervalo de tiempo mayor y descartar los datos con mucho error o muy alejados.   

Pues sí. Probablemente no fuese muy buena idea. A parte de lo dicho por Abdulai, dan problemas los puntos que tienen una misma abcisa (tiempo), que sí pueden haberlos en el problemas de regresión. Tal vez "acondicionando" los datos como dices... Pero no sé...

Un saludo.

Suponiendo que haga el condicionamiento de los datos y obtenga valores más razonables, cómo hago la última parte?
Es decir, como hallo la amplitud y el ángulo de fase?

Gracias!

16 Abril, 2019, 09:56 am
Respuesta #23

martiniano

  • Héroe
  • Mensajes: 1,072
  • País: es
  • Karma: +2/-0
  • Sexo: Masculino
Hola.

Pues a mí se me había ocurrido hacer el típico análisis de la suma de la diferencia de cuadrados como función de \( A  \) y de \( \varphi_0 \):

\( S=\displaystyle\sum_{i=1}^n{(x_i-x(t_i))^2}=\displaystyle\sum_{i=1}^n{(x_i-Ae^{-at_i}\cos(\omega{t_i}+\varphi_0))^2} \)

Imponiendo que estamos buscando los valores de \( A \) y \( \varphi_0 \) que hacen mínimo a \( S \):

\( \frac{{\partial S}}{{\partial A}}=0 \)
\( \frac{{\partial S}}{{\partial \varphi_0}}=0 \)

Y sacar de aquí un sistema de dos ecuaciones con dos incógnitas que habrá que resolver numéricamente.

Espero que te sirva. Un saludo.

16 Abril, 2019, 01:38 pm
Respuesta #24

martiniano

  • Héroe
  • Mensajes: 1,072
  • País: es
  • Karma: +2/-0
  • Sexo: Masculino
Por cierto, ¿te suena de algo lo de la transformada de Hilbert que te decía Abdulai?

16 Abril, 2019, 05:16 pm
Respuesta #25

Abdulai

  • Moderador Global
  • Mensajes: 2,342
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Lo de usar la transformación de Hilbert es para obtener una señal analítica y entonces, aplicando logaritmos convertir la  relación en lineal.

Si  \( y = Ae^{-bt}\cos(\omega t+\pi) \)

Haciendo \( Y = H(y) \)  (transformada de Hilbert)

\( Y = e^{a-bt + i(\omega t+\phi)} \;\;\longrightarrow\;\; \ln Y = a-bt + i(\omega t+\phi)  \)


-------------------------------------------------

Pasando tus datos a un archivo y resolviendo con Matlab:

Código: [Seleccionar]
% Leo las variables tiempo y posicion
q = load('datos.txt'); t = q(:,1) ; x=q(:,2) ;

% Aplico el logaritmo a la transformacion de Hilbert
% Parte real sera el logaritmo de la amplitud
% y parte imaginaria el angulo
ls = log(hilbert(x)) ;
a  = real(ls) ; w = unwrap(imag(ls)) ;

% Grafico para ver que no haya rarezas en los datos
% En un caso "puro" deberian aproximarse por dos rectas
subplot(2,1,1) ; plot(t,a)
subplot(2,1,2) ; plot(t,w)



Hay una pequeña alinealidad en el amortiguamiento --> Es la vida real, puede deberse a alinealidades del resorte, la resistencia del aire que no es proporcional a la velocidad u otras causas que hacen que el comportamiento no se corresponda exactamente con el modelo.

Aproximo unas rectas por mínimos cuadrados

Código: [Seleccionar]
Ax = polyfit(t,a,1)
Wx = polyfit(t,w,1)

Resultando
\( A_x = [ -0.1625 \,,\,  -3.4728 ]\\
W_x = [  13.0374  \,,\,  2.3705 ]  \)

Siendo -0.1625 el coeficiente de amortiguamiento y  13.0374  la frecuencia angular.

Como control, grafico los resultados

Código: [Seleccionar]
% Comparo el resultado obtenido con la curva original
u  = exp(polyval(Ax,t)).*cos(polyval(Wx,t) ) ;
plot(t,x,'.',t,u)



16 Abril, 2019, 10:11 pm
Respuesta #26

martiniano

  • Héroe
  • Mensajes: 1,072
  • País: es
  • Karma: +2/-0
  • Sexo: Masculino
Joer Abdulai.

Qué bonito te ha quedado todo  :aplauso:

Un saludo.

17 Abril, 2019, 03:18 am
Respuesta #27

Nexos

  • Junior
  • Mensajes: 73
  • Karma: +0/-0
  • Sexo: Masculino
Maravilloso en serio!

Vaya, me encantaría tener la capacidad matemática para saber qué aplicar en casos como estos.
Nunca había oído acerca de la Transformada de Hilbert por lo que voy a estudiar un poco más.

Ahora que se vienen los festivos por semana santa, voy a escoger los mejores valores de la tabla con la finalidad de hacer funcionar el método de diferencias divididas y también voy a estudiar la transformada de Hilbert.

Voy a volver en un par de días para molestarles un poco más con mis preguntas!

Hola.

Pues a mí se me había ocurrido hacer el típico análisis de la suma de la diferencia de cuadrados como función de \( A  \) y de \( \varphi_0 \):

\( S=\displaystyle\sum_{i=1}^n{(x_i-x(t_i))^2}=\displaystyle\sum_{i=1}^n{(x_i-Ae^{-at_i}\cos(\omega{t_i}+\varphi_0))^2} \)

Imponiendo que estamos buscando los valores de \( A \) y \( \varphi_0 \) que hacen mínimo a \( S \):

\( \frac{{\partial S}}{{\partial A}}=0 \)
\( \frac{{\partial S}}{{\partial \varphi_0}}=0 \)

Y sacar de aquí un sistema de dos ecuaciones con dos incógnitas que habrá que resolver numéricamente.

Espero que te sirva. Un saludo.

Cómo se deriva la sumatoria?

Lo de usar la transformación de Hilbert es para obtener una señal analítica y entonces, aplicando logaritmos convertir la  relación en lineal.

Si  \( y = Ae^{-bt}\cos(\omega t+\pi) \)

Haciendo \( Y = H(y) \)  (transformada de Hilbert)

\( Y = e^{a-bt + i(\omega t+\phi)} \;\;\longrightarrow\;\; \ln Y = a-bt + i(\omega t+\phi)  \)


-------------------------------------------------

Pasando tus datos a un archivo y resolviendo con Matlab:

Código: [Seleccionar]
% Leo las variables tiempo y posicion
q = load('datos.txt'); t = q(:,1) ; x=q(:,2) ;

% Aplico el logaritmo a la transformacion de Hilbert
% Parte real sera el logaritmo de la amplitud
% y parte imaginaria el angulo
ls = log(hilbert(x)) ;
a  = real(ls) ; w = unwrap(imag(ls)) ;

% Grafico para ver que no haya rarezas en los datos
% En un caso "puro" deberian aproximarse por dos rectas
subplot(2,1,1) ; plot(t,a)
subplot(2,1,2) ; plot(t,w)



Hay una pequeña alinealidad en el amortiguamiento --> Es la vida real, puede deberse a alinealidades del resorte, la resistencia del aire que no es proporcional a la velocidad u otras causas que hacen que el comportamiento no se corresponda exactamente con el modelo.

Aproximo unas rectas por mínimos cuadrados

Código: [Seleccionar]
Ax = polyfit(t,a,1)
Wx = polyfit(t,w,1)

Resultando
\( A_x = [ -0.1625 \,,\,  -3.4728 ]\\
W_x = [  13.0374  \,,\,  2.3705 ]  \)

Siendo -0.1625 el coeficiente de amortiguamiento y  13.0374  la frecuencia angular.

Como control, grafico los resultados

Código: [Seleccionar]
% Comparo el resultado obtenido con la curva original
u  = exp(polyval(Ax,t)).*cos(polyval(Wx,t) ) ;
plot(t,x,'.',t,u)




De veras, muchísimas gracias! Es usted una personal genial.
Gracias a ambos, no se imaginan lo que he aprendido!

Bendiciones!