Inicio / Wikis / Tutoriales / Introducción informal a Matlab y Octave - Calculo y Analisis (II)

Introducción informal a Matlab y Octave - Calculo y Analisis (II)

(13 opiniones)
Tutorial creado por Guillem Borrell i Nogueras. Extraido de: http://torroja.dmt.upm.es/%7Eguillem/matlab/
05 de Noviembre de 2006
Encriptación

13 - Calculo y Analisis (II)

5.5.3.1  Integración del problema no stiff (vdp1)

Integrar un problema no stiff es mucho más sencillo que un problema stiff. La inestabilidad numérica tiene efectos mucho más importantes que la pérdida de precisión. Los esquemas de integración que manejaremos son de paso variable. Esto significa que la propia subrutina calcula el paso de integración para, sea cual sea la función y el esquema utilizado, el resultado sea numéricamente correcto.
  • Octave
>> lsode_options('integration method','non-stiff')
 >> y=lsode('vdp1',[0 2],linspace(0,20,1000));
  
  • Matlab
>> [tout,xout]=ode45(@vdp1,[0 20],[2 0]); 
  
La diferencia esencial entre Octave y Matlab es que el primero pide por defecto los puntos en los que queremos la solución. Matlab prefiere resolver el problema y dar los puntos en el tiempo en los que se ha pasado durante la integración. Es por ese motivo por el que el argumento ``tiempo'' es en el primer caso un vector de un millar de elementos mientras que en el segundo es tan solo un par de escalares.

La superposición de ambas soluciones es un ejemplo perfecto para ver trabajar los esquemas de paso variable. Apreciamos en la figura
5.1 que el paso de integración disminuye según la curvatura de la solución



Figure 5.1: Solución de la ecuación de Van der Pol con ?=1


5.5.3.2  Integración del problema stiff (vdp1000)

Como los problemas stiff introducen gradientes elevados en la solución el paso de integración de un esquema explícito se va haciendo tan pequeño que su avance es demasiado corto. Es precisamente lo que ensayamos en este caso. Si intentamos resolver la ecuación de Van der Pol con ?=1000 y t∈[0,3000] mediante un esquema explícito:
  • Octave
>> lsode_options('integration method','non-stiff')
 
 >> y=lsode('vdp1000',[0 2],linspace(0,3000,100000));
  
  • Matlab
>> [tout,xout]=ode45(@vdp1000,[0 3000],[2 0]); 
  
nos encontramos con la desagradable sorpresa de que el calculo no termina nunca. Esto es porque la solución, aunque es regular, tiene puntos con gradiente casi infinito.

La solución es utilizar un esquema implícito o semimplícito. Por ejemplo:
  • Octave
>> lsode_options('integration method','stiff')
 
 >> ystiff=lsode('vdp1000',[2 0],linspace(0,20,1000));
  
  • Matlab
>> [tout,xout]=ode23s(@vdp1000,[0 3000],[2 0]);
  
Efectivamente, la solución demuestra por qué el problema es stiff (Figura 5.2):



Figure 5.2: Solución de la ecuación de Van der Pol con ?=1000


5.5.4  Inestabilidades y caos.

Uno de los casos en los que el cálculo numérico es una herramienta imprescindible es en la resolución de ecuaciones diferenciales no lineales, tanto ordinarias como en derivadas parciales. La no linealidad de las ecuaciones hace que el carácter de los problemas de evolución sea mucho más complejo que en el caso lineal. Uno de los fenómenos observados es la aparición de caos.2

Supongamos que queremos resolver la ecuación del dipolo de Rikitake
de ecuaciones:
x1 = -x1+x3x2
x2 = -x2+(x3-3.75)x1
x3 = 1-x1x2
Despues de introducirlo en la función rikitake.m:
function xdot=rikitake(x,t)
 %
 %   Ecuacion de la dinamo de Rikitake
 %
 xdot(1,1)=-x(1)+x(3)*x(2);
 xdot(2,1)=-x(2)+x(1)*(x(3)-3.75);
 xdot(3,1)=1-x(1)*x(2);
  
Y resolver el problema utilizando la función ode45 Octave3:
>> [t,x]=ode45(@rikitake,[0 300],[1 2 3],pair=0,ode_fcn_format=1);
 plot(t,x(:,1),';x_1;',t,x(:,2),';x_2;',t,x(:,3),';x_3;')
  
Nos encontramos con la desagradable sorpresa de que nuestra solución es completamente errática (figura 5.3).



Figure 5.3: Solución del dipolo de Rikitake


A primera vista puede parecer que la solución está mal. Si representamos exactamente el mismo resultado pero mediante una curva paramétrica:
>> plot3 (x(:,1),x(:,2),x(:,3))
  
llegamos a la figura 5.4.



Figure 5.4: Curva solución del dipolo de Rikitake


De este ejemplo aprendemos que las ecuaciones diferenciales no lineales pueden tener un comportamiento extraño. Un ejemplo claro de ello son las ecuaciones de Navier Stokes. Si simplificamos las ecuaciones para flujo incompresible nos encontraremos un término lineal (el viscoso) y uno no lineal (el convectivo). El estudio analítico de estas ecuaciones aún no ha llegado a la conclusión sobre la existencia y la unicidad de la solución4, sin embargo se resuelven por métodos numéricos.

La turbulencia, uno de los fenómenos físicos más complejos, aparece de forma espontanea cuando intentamos resolver las ecuaciones de N-S. Parte de la disciplina de la CFD (Computational Fluid Dynamics) es estudiar los flujos turbulentos a partir de la resolución numérica de las ecuaciones de N-S.

La conclusión es que la integración numérica de ecuaciones diferenciales es un problema complejo no sólo por la física del problema sino porque además se suman muchos otros factores. En esta pequeña introducción sólo hemos visto los problemas stiff y un caso muy sencillo de caos pero los problemas pueden complicarse muchísimo más.

5.6  Cálculo simbólico

La afirmación repetida hasta la saciedad de que Matlab es un programa estrictamente de cálculo matricial no es del todo correcta. Se basa en la aplicación del sentido crítico a una herramienta. La versión completa de Matlab incluye el programa de cálculo simbólico más utilizado actualmente, Maple. Los problemas generados por el uso del cálculo simbólico en Matlab son dos:
  1. Tenemos acceso al núcleo de cálculo de Maple, pero dicho acceso no es completo. Podemos efectuar las operaciones básicas como derivar, buscar primitivas, crear desarrollos de Taylor... Nunca dispondremos de la potencia de este tipo de programas.
  2. La arquitectura de matlab no está pensada para el cálculo simbólico. Los programas de cálculo simbólico suelen incluir un interfaz llamado notebook que sirve para ver las fórmulas de entrada y salida en una notación mucho más matemática. Las diferencias en el diseño de un programa de cálculo numérico y otro de cálculo simbólico son a mi parecer irreconciliables.
Esto no significa que sea un crimen utilizar las funciones de cálculo simbólico cuando uno disponga de ellas. Somos libres de hacer lo que queramos pero debemos ser conscientes de hasta qué punto no estamos utilizando la herramienta ideal para nuestro fín.

Octave también dispone de un soporte muy limitado para realizar operaciones simbólicas. Se podría decir que lo único que puede hacer es derivar y resolver sistemas de ecuaciones lineales. Tampoco parece que en un futuro cercano estas funcines se amplíen hasta un soporte equivalente al de Matlab. No son compatibles pero las funciones son tremendamente parecidas.

Los siguientes apartados sirven como introducción general al uso de variables simbólicas pero no conseguiremos más que arañar la superficie del total de las posibilidades del toolkit.

5.6.1  Definición de variables funciones simbólicas

Una de las diferencias más esenciales entre Matlab y Octave en lo que respecta a cálculo simbólico es que en Octave es necesario activar el toolkit con el siguiente comando:
>> symbols
  
Tanto en Matlab como en Octave el modo más fácil de definir una variable simbólica es crear una variable que contenga un argumento simbólico del mismo nombre:
sym
Define una variable que contiene un argumento simbólico. Es muy recomendable que la variable y el argumento tengan el mismo nombre para evitar confusiones
>> x = sym('x')
  
poly2sym
Define un polinomio simbólico a partir de sus coeficientes.
>> poly2sym([1 2 3 -2 10])
 ans =
 10.0+(-2.0+x*(3.0+(2.0+x)*x))*x
  

5.6.2  Funciones simbólicas elementales.

La aplicación de funciones elementales a variables simbólicas es completamente distinta en Matlab y en Octave. Mientras Matlab no diferencia las funciones simbólicas de las numéricas Octave prefiere llamarlas de un modo distinto. Esta distinción suele ser que la primera letra de la función es una mayúscula5. Entonces, para conseguir la función simbólica sinx en Matlab haremos:
>> x=sym('x')
 x =
 x
 >> y=sin(x)
 y =
 sin(x)
  
Mientras que en Octave haremos lo siguiente:
>> x=sym('x')
 x =
 x
 >> y=Sin(x)
 y =
 sin(x)
  
En la colección podemos encontrar todas las funciones trigonométricas, exponenciales, logaritmos...

5.6.3  Operaciones simbólicas

Casi todas las operaciones disponibles en el paquete simbólico de Octave están dedicadas a la manipulación simbólica de polinomios (muy interesante en el cálculo numérico). En cambio Matlab dispone de la mayoría de las operaiciones simbólicas existentes... Derivadas, primitivas, desarrollos en serie... La única función interesante en lo referente a cálculo simbólico que tiene Octave es la siguiente:
subs
Substituye una o varias variables de una expresión simbólica.
collect
Agrupa los términos polinómicos en una variable dada.
expand
Desarrolla una expresión simbólica.
differentiate
Sólo en Octave. Calcula la n-ésima derivada de una expresión simbólica.
Función que en Matlab recibe un nombre distinto:
diff
Sólo en Matlab. Calcula la n-ésima derivada de una expresión simbólica.
Matlab dispone además de las siguientes operaciones:
int
Encuentra la primitiva de una función simbólica
limit
Calcula el límite hacia un determinado valor de una función simbólica.
taylor
Calcula el desarrollo en serie de Taylor respecto a un punto dado de una función simbólica.
symsum
Calcula la suma de dos series.
Una de las pocas operaciones compatibles es la representación de una curva determinada por una función simbólica:
splot
Dibuja la curva representación de una función simbólica de una variable. El segundo argumento es un vector de dos elementos con el intervalo de la variable independiente.
 

1
Personalmente creo que éste es uno de los pocos casos en el que Octave es superior a Matlab. Ni entiendo ni comparto la organización de las rutinas de integración de Matlab, me parece confusa, desacertada y poco óptima.
2
Esta sección es sólo una pequeña introducción a los efectos del caos. No soy un absoluto un experto en el tema pero se comenta en esta sección porque puede tener efectos desconcertantes en la solución. Pido disculpas si existe algun fallo garrafal en alguna de las afirmaciones.
3
¿Por qué hemos tenido que utilizar el argumento adicional ode_fcn_format?
4
El estudio de existencia y unicidad de la solución de las ecuaciones de Navier Stokes para el caso incompresible es uno de los grandes problemas no resueltos de las matemáticas.
5
Siempre viene bien recordar que la arquitectura de Matlab distingue entre mayúsculas y minúsculas
Valora este capítulo: (13 opiniones)
Autor y licencia de 'Introducción informal a Matlab y Octave - Calculo y Analisis (II)'
Guillem Borrell i Nogueras Extraído de: http://torroja.dmt.upm.es/%7Eguillem/matlab/ CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Introducción informal a Matlab y Octave - Calculo y Analisis (II)' (13)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Introducción informal a Matlab y Octave - Calculo y Analisis (II)'

Este trabajo ha tenido en cuenta los supuestos teóricos analizados en el artículo “Competencias: Un... Más »
Las fotografias de flores (flora en general) quizas sean las que mejor se dejan enmarcar.... Más »
En la edición anterior, se explicó las bases de Netfilter/IPTables. En esta segunda entrega, se... Más »
Ya sea que la empresa este recibiendo el impacto de la globalización, se vea sometida... Más »
Género gramatical y sexo no son, como muchos ingenuos o espontáneos usuarios de la lengua... Más »
¿Estás seguro de que deseas eliminar este capítulo?