Introducción a Octave para la Docencia en la UCA

Tercera sesión

Guillem Borrell i Nogueras

10-13 de Junio de 2008

Temario

Representación gráfica

Plot

La manera más sencilla de representar datos es mediante la función plot

Ejemplo:

Representar una curva en el plano a partir de dos series de datos:

>> x=linspace(0,500,100000);
>> plot(x,exp(-x/100).*sin(x))

Para dibujar la función `e^{-x/100}\sin x` con `x \in [0,500]`

Plot II

El resultado...

files/abanico.jpg

Plot III

Los atributos de las gráficas se introducen con la ventana activa

Ejemplo:
>> title('Una función cualquiera')
>> xlabel('Tiempo')
>> ylabel('Amplitud')

Plot IV

El resultado...

files/abanico2.jpg

Plot V

Dentro del mismo comando podemos poner varias curvas con distintos estilos:

>> x=linspace(-pi,pi,100);
>> plot(x,sin(x),'m:',...
x,cos(x),'k^',x,tan(x),'bx')
>> axis([-pi,pi,-2,2])
>> grid on
>> legend('linea de puntos magenta',...
          'triangulos negros',...
          'cruces azules')

Plot VI

files/trigplot.jpg

Plot VII

Plot VIII

Subplot

Es el comando que permite poner más de una figura en una misma ventana. Su uso es parecido al de combinar figure y plot.

Ejemplo:
>> x= linspace(-pi,pi,100);
>> subplot(2,2,1)
>> plot(x,sin(x))

De este modo generamos la primera de las subfiguras en el primero de los cuatro sectores

Subplot II

files/trig1.jpg

Subplot III

Ahroa completamos los cuatro cuadrantes

Ejemplo:
>> subplot(2,2,2)
>> plot(x,cos(x))
>> subplot(2,2,3)
>> plot(x,sinh(x))
>> subplot(2,2,4)
>> plot(x,cosh(x))

Subplot IV

files/trig4.jpg

Otros comandos

semilogx:Dibuja una curva con el eje x en escala logarítmica
semilogy:Dibuja una curva con el eje y en escala logarítmica
loglog:Dibuna una curva en escala logarítmica.

Ejercicio

Representar en una misma ventana y dos frames (uno superior y otro inferior) la función:

`sqrt{x} \sin(1/x)\ \ x\in[0.001,1]`

en escala normal y en escala semilogarítmica en el eje x

Nota:La segunda gráfica tiene un problema de definición cerca de x =0. ¿Cómo puede arreglarse?

Contour

La mejor manera de representar superficies en tres dimensiones es representar su proyección en el plano mediante isolíneas. La ventaja de esta representación es que permite conocer el valor de la función con mucha más precisión. Probad lo siguiente

Ejemplo:
>> contour(peaks)

Plot handles

Plot handles

octave:1> p=plot([1,2,3,2,1])
p = -2.3944
octave:2> get(p)
ans =
{
  tag =
  type = line
  parent = -1.8402
  children = [](0x0)
  __modified__ =  1
  xdata =

     1
     2
     3
     4
     5
(...)

Plot handles

files/pico.jpg

Plot handles

>> set(p,'linewidth',2)
>> set(p,'marker','o')
>> set(p,'markersize',12)
>> set(p,'markeredgecolor','r')
>> t=title('masmejor')
>> set(t,'fontsize',14)
>> set(t,'color','g')
>> h=fill([1,2,3,4,5],[1,2,3,2,1],'y')

Plot handles

files/fancy.jpg

EDOs

EDOs II

EDOs III

lsode:Interfaz de Octave a odepack
ode45:Es un Runge-Kutta de paso variable y 4º orden. La primera opción
ode113:Esquema Adams multipaso
ode23s:Esquema para problemas stiff

EDOs IV

Un caso típico es la ecuación de Van der Pol

`x''+x+\mu(x'^2-1)x'=0`

Dependiendo del valor del coeficiente `\mu` el problema es stiff o no.

EDOs V

Para resolver el problema no stiff utilizamos un esquema Runge-Kutta, ode45:

>> lsode_options('integration method','non-stiff');
>> y=lsode(@vdp1,[0 2],linspace(0,20,1000);
>> plot(linspace(0,20,1000),xout(:,1));

EDOs VI

files/vdp1.jpg

EDOs VII

EDOs VIII

files/vdp1000.jpg

Ejercicio 8

Resolver el siguiente problema no stiff

`((\dot x=a(y-x)),(\dot y = x(b-z)-y),(\dot z=xy-cz))`

Con a =10, b =28 y c =8/3, `t \in [0,50]` y `(x_0,y_0,z_0)=(1,1,1)` y representar la solución en tres dimensiones como una curva paramétrica con plot3

El resultado...

files/lorentz.jpg

Ejercicio

A partir de dos series de datos