You are on page 1of 14

ProgramacinBsica y MtodosNumricos OCTAVE3.2.

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

1. Introduccin
GNU OCTAVE es un programa libre utilizado para realizar clculos numricos y distintas representaciones graficas trabajando incluso con nmeros complejos, vectores y matrices. Octave es en la actualidad el lenguaje de alto nivel libre ms parecido a Matlab. Entre varias caractersticas que comparten se puede destacar que ambos ofrecen un intrprete sencillo el cual permite al usuario ejecutar rdenes en modo interactivo. Una particularidad extraordinaria de los nmeros tanto en Octave como en Matlab es que no hay distincin entre reales, complejos, enteros, de precisin sencilla o de doble precisin. En Octave, todos estos nmeros estn conectados continuamente. Esto significa que cualquier variable puede contener nmeros de cualquier tipo sin una declaracin especial durante la programacin, hacindola ms productiva y rpida. La amplia biblioteca matemtica de octave facilita el anlisis y la resolucin de problemas de ndole matemtico. Adems, el usuario puede crear rutinas adicionales con mucha ms facilidad que en otros lenguajes de programacin, gracias a la continuidad entre las variables reales y complejas. Entre las numerosas funciones matemticas, los solucionadores de lgebra lineal desempean un papel crucial; de hecho, todo el sistema se basa en estos solucionadores.

Precisinnumrica
En OCTAVE la exactitud de los clculos depende de la forma en que se reasignan y procesan los nmeros. Los parmetros claves que indican la exactitud de los nmeros en un lenguaje de programacin son: Nmero positivo ms pequeo: 2.2251x10-308. Nmero positivo ms grande: 1.7977x10+308.

GrficosenOCTAVE
El anlisis visual de los problemas matemticos ayuda a comprender las matemticas y hacerlas ms accesibles. Con OCTAVE, mediante la aplicacin de unos cuantos comandos, es posible representar funciones y crear grficos cientficos e incluso artsticos en la pantalla utilizando expresiones matemticas.

Pgina2

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

1.

Comenzando con OCTAVE

Cuando se ejecuta OCTAVE aparece una ventana sencilla (sin interfaz grfica) conocida como consola o intrprete, conteniendo informacin inherente al programa. La ltima lnea, llamada lnea de comandos, se identifica por medio del smbolo > y es all donde deben ingresarse las diferentes rdenes.

2.

Aritmtica y clculo

El manejo de la operaciones bsicas en Octave se hace de una manera muy simple, solo basta con ingresar la expresin a calcular y presionar la tecla enter. Todos los resultados son precedidos por la palabra ans. Ejemplo > (5+7)*2 ans = 24 Como todo lenguaje de alto nivel Octave permite la asignacin de variables, pero esta se realiza de una forma mucho ms sencilla que en muchos otros lenguajes, debido a que no hay que especificarle el tipo de la variable que se va a introducir ya que l mismo puede reconocerlo. Tener especial cuidado al nombrar y utilizar nombres de variables pues Octave, al igual que C, es case-sensitive. Esto significa que vol, Vol y VOL son tres variables diferentes. Ejemplos > a=8 a= 8 Clculo del volumen de una esfera > r=2; #Asignamos el radio de la esfera, el ; no muestra el valor ingresado. > Vol=(4/3)*pi*r^3; #Ecuacin que define el volumen de una esfera en funcin del radio. > Vol Vol = 33.510 > b=10/3 b= 3.3333 > c=(1+2i) c= 1 + 2i

Pgina3

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

Como se vio en los ejemplos anteriores no interesa si la variable es de tipo flotante, real, entera o compleja, Octave permite trabajar con cadenas de texto (string) de forma similar, sin tener que cambiar o redefinir los tipos de las variables. Ejemplo > d=5; >d d= 5 > d="CASA"; >d d = CASA #Se asigna un valor cualquiera a la variable d. #Se verifican los datos que contiene la variable. #Se asigna, entre comillas, informacin tipo texto en d. #Se verifican los datos que contiene la variable.

Operadoresaritmticos
Los operadores aritmticos son +,-,* y /. Adems OCTAVE emplea un operador no tradicional, \ divisin inversa. Este operador produce el reciproco de la divisin, es decir, a\ b produce b/a. Comando .* ./ .\ .^ Operacin Multiplicacin (elemento a elemento) Divisin (elemento a elemento) Divisin a la izquierda (elemento a elemento) Potencia (elemento a elemento)

Funcionesmatemticas
Octave tiene numerosas funciones matemticas, desde elementales hasta las de alto nivel. Las funciones elementales pueden agruparse en tres categoras: Funciones trigonomtricas. Otras funciones elementales Funciones que realizan tareas.

Pgina4

Programacin Bsica y Mtodos Numricos


En la tabla se muestran las funciones de las dos primeras categoras: Funciones Matemticas Elementales abs(x) angle(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) atan2(x) sinh(x) cosh(x) tanh(x) asinh(x) acosh(x) atanh(x)

OCTAVE 3.2.4

Funciones Trigonomtricas

Comentarios

Comentarios Valor absoluto de x ngulo de fase de un valor complejo: si x = real, ngulo = 0 si x = -1, ngulo = /2 Raz cuadrada de x Parte real del valor complejo de x Parte imaginaria del valor complejo x Conjugado complejo x Redondear al entero ms cercano Redondear un valor real hacia cero Redondear hacia - infinito Redondear hacia + infinito +1 si x>0; -1 si x<0 Residuo al dividir: x - y*fix(x/y) Base exponencial e Logaritmo base e Logaritmo base 10

-atan(x)/2 Igual que atan(y/x) -atan(y,x)

sqrt(x) real(x) imag(x) conj(x) round(x) fix(x) floor(x) ceil(x) sign(x) rem(x) exp(x) log(x) log10(x)

Las funciones matemticas en Octave presentan dos grandes diferencias respecto de los otros lenguajes de programacin: Funcionan con variables complejas sin discriminacin alguna. Funcionan con argumentos vectoriales y matriciales.

Ejemplo Para ilustrar mejor el trabajo con variables imaginarias, probemos: > cos( 2 + 3i) ans = -4.1896-9.1092i

3.

Matrices y vectores

Una matriz es un arreglo rectangular de nmeros, en el caso particular de Octave, encerrados entre corchetes. Una matriz con una sola columna o una sola fila se denomina vector, una matriz 1n (una fila y n columnas) se denomina vector fila, y una matriz m1 (una columna y m filas) se denomina vector columna. El caso particular en que la dimensin de la matriz es 1 x 1 se denomina escalar. Las matrices pueden tener cualquier tamao y pueden ser ampliadas o reducidas dinmicamente, es decir, no es necesario declarar el tamao previamente, como ocurre en otros lenguajes de programacin, ya que el entorno se encarga de conseguir la memoria necesaria.

Pgina5

Programacin Bsica y Mtodos Numricos Ingresodevectores


Las matrices pueden generarse, a groso modo de tres maneras distintas:

OCTAVE 3.2.4

DEFINICION EXPLCITA Se realiza indicando los elemento entre corchetes ([ ]). La coma (,) o el espacio se utilizan para separar los elementos de una fila. El punto y coma (;) o el salto de lnea se utiliza para separar una fila de la siguiente. Se recomienda la utilizacin de la coma y el punto y coma en lugar del espacio y el salto de lnea, ya que el uso de estos ltimos suele llevar a errores difciles de localizar. Ejemplo > A=[1, 2, 3; 4, 5, 6; 7, 8, 9] A= 1 2 3 4 5 6 7 8 9

Los elementos pueden ser constantes, expresiones u otras matrices, siempre y cuando de lugar a una matriz de dimensiones correctas. Ejemplo Con este concepto puede aadirse a la matriz A una columna con los elementos 11, 12 y 13 para generar B. > B=[A, [11; 6*2; 10+3]] B= 1 2 3 11 4 5 6 12 7 8 9 13

Octave posee una sistema muy til para la generacin de vectores fila de elementos equiespaciados basado en la siguiente sentencia: Valor inicial : Paso : Valor final Ejemplo > C=[0:1:10] C= 0 1 2 3

9 10

RESULTADO DE OPERACIONES MATRICIALES

Es posible generar nuevas matrices a partir de otras definidas previamente utilizando cualquiera de las funciones matemticas detalladas con anterioridad. Ejemplo > A=[0,4;5,1]; >B=[2;3]; >C=cos(A)*B C= 0.039069 2.188231

Pgina6

Programacin Bsica y Mtodos Numricos


RESULTADO DE UNA FUNCION GENERADORA

OCTAVE 3.2.4

Existe una serie de funciones que se utilizan muy a menudo para generar matrices de ciertas caractersticas. zeros(n): Crea una matriz cuadrada de dimensin n (con n filas y n columnas) con todos sus elementos iguales a 0. zeros(n,m) zeros([n,m]): Genera una matriz de n filas y m columnas con todos sus elementos iguales a 0. ones(): Compone una matriz con todos sus elementos iguales a 1. Tiene las mismas formas de invocacin que zeros, es decir, ones(n), ones(n,m), ones([n,m]). eye(): Devuelve una matriz con sus elementos iguales a 0 excepto en la diagonal principal, cuyos elementos sern iguales a 1. En caso de ser cuadrada esta representara la identidad para la dimensin correspondiente. Tiene las mismas formas de invocacin que la funcin zeros. rand(n): Crea una matriz de elementos aleatorios con distribucin normal (gaussiana de media 0 y varianza 1). donde n especifica el tamao de la matriz de nmeros aleatorios que debe devolverse. Si n=1, devuelve un solo nmero aleatorio; si n>1, devuelve una matriz n x n de nmeros aleatorios. linspace(inicial, final, n): Genera un vector de elementos equi-espaciados a partir del valor inicial hasta el final. Habr tantos elementos como indique n, o 100 si este parmetro no se especifica. A diferencia de los rangos, en que se conoce la separacin de los elementos pero no su nmero, en este caso se conoce el nmero de elementos pero no su separacin. logspace(inicial, final, n): Similar a linspace pero con una separacin logartmica entre los elementos del vector. En este caso inicial y final representan los exponentes de 10 para el valor inicial y final del vector. En el caso de que final valga el valor final ser y no 10.

Operacionesconvectores
Entre una extensa cantidad de funciones que realizan distintas tareas podemos destacar las siguientes: sort(x): Ordena los elementos de un vector en orden ascendente. El argumento x puede ser un vector fila, vector columna o una matriz. Si x es una matriz, el reordenamiento se realizar en cada columna. sum(x): Calcula la sumatoria de los elementos de un vector o matriz x. para los vectores tanto de fila como de columna, sum calcula el total de los elementos. Si x es una matriz, se calcula la sumatoria de cada columna y se devuelve un vector fila formador por la sumatoria de todas las columnas. max(x): Encuentra el mximo en el vector x y min(x) encuentra el mnimo. El argumento x puede ser un vector fila o columna o una matriz. Si x es una matriz, la respuesta es un vector fila que contiene el mximo o mnimo de cada columna de x. size(x): Da como resultado el tamao (cantidad de componentes) de alguna matriz x ingresada previamente en Octave.

Pgina7

Programacin Bsica y Mtodos Numricos


det(x): Calcula el determinante de un matriz cuadrada.

OCTAVE 3.2.4

inv(x): Calcula la matriz inversa de otra matriz cuadrada ingresada previamente, excepto cuando esta ltima es una matriz singular. En una matriz singular, al menos una fila o columna puede expresarse como suma o resta de otras filas o columnas. Para generar la matriz transpuesta de una matriz ya ingresada se utiliza el operando ' . Por ejemplo B = A', la matriz B es la matriz transpuesta de A. Para operar elemento a elemento una matriz A y otra matriz B, de igual tamao, se utilizan los operadores encabezados por un punto, por ejemplo: .* de modo que C= A .* B.

4.

Resolucin de sistemas de ecuaciones lineales


Considerando un conjunto de m ecuaciones con n incgnitas dado por: a1,1x1 + a1,2x2 +.... + a1,nxn = b1 a2,1x1 + a2,2x2 +.... + a2,nxn = b2 am,1x1 +am,2x2 +....+am,nxn = bm

Donde los am,n son coeficientes conocidos, x son incgnitas y bm son trminos conocidos que se denominan trminos no homogneos (trminos independientes). Los sistemas de ecuaciones lineales pueden expresarse matricialmente de la siguiente forma: Ax=b En los sistemas de ecuaciones lineales donde m = n, el nmero de ecuaciones es igual al nmero de incgnitas, entonces se tiene la particularidad de que la matriz de coeficientes A es cuadrada. Dependiendo de las caractersticas del sistema de ecuaciones, puede obtenerse una buena aproximacin a la verdadera solucin del mismo (x) ingresando en la lnea de comandos: >x=inv(A)*b o bien >x=A\b este mtodo es ms eficiente ya que el tiempo de cmputo es aproximadamente 50% menor que el anterior Ejemplo > A=[3,2;1,-1]; b=[-1;1]; > x=A\b x= 0.20000 -0.80000

SistemasdeecuacioneslinealesynmerodecondicinK
En lgebra se ha visto el concepto de mdulo o norma de un vector, utilizando lo que se conoce como norma 2 o norma eucldea. Por ejemplo, si x=(1,2,2), entonces, Cuando se emplean mtodos numricos para resolucin de Sistemas de Ecuaciones Lineales, se utiliza generalmente la norma infinito en lugar de la norma eucldea. La norma infinito se define como el mximo de los valores absolutos de las componentes del vector (o sea la mayor componente en valor absoluto).

Pgina8

Programacin Bsica y Mtodos Numricos


Para el caso anterior ser ||x||=max{|1|, |2|, |2|}=2

OCTAVE 3.2.4

Para calcular la norma eucldea se utiliza: >norm(x) mientras que el clculo de la norma infinito se calcula ingresando: >norm(x,inf). Estos comandos se aplican tanto a vectores como a matrices, en este ltimo caso la norma infinito se define como el mximo entre los resultados de las sumas de los valores absolutos de los coeficientes de cada fila de la matriz. Como se dijo anteriormente cuando se resuelve un sistema de ecuaciones lineales se obtiene una x de la solucin y al no conocer el valor verdadero no es posible saber qu tan buena aproximacin ~ es dicha aproximacin. Cmo se podra sospechar que quizs se est cometiendo un grave error? Para ello se utiliza el nmero de condicin K. El nmero de condicin de una matriz no es otra cosa que el producto de la norma de la matriz por la norma de su inversa. Utilizando norma infinito sera K(A)= ||A|| ||A-1|| que se calcula con Octave ingresando en la consola norm(A,inf)*norm(inv(A),inf) o directamente con el comando: > cond(A,inf) Si el nmero de condicin es cercano a 1, se dice que la matriz est bien condicionada mientras que si es significativamente mayor que 1, la matriz est mal condicionada. Cuando una matriz est mal condicionada, se puede sospechar que una aparentemente buena aproximacin quizs diste mucho de la solucin real.

5.

Obtencin de races de funciones

Para hallar las races reales de una funcin cualquiera existe el comando: > fzero(fun,[x0,x1]). El valor devuelto por esta funcin ser alguno de los puntos donde la funcin cambia de signo dentro del intervalo definido por x0 y x1, en caso de que la bsqueda falle el resultado ser warning: fzero: equal signs at both ends of the interval., indicando que no existe raz real en el intervalo. Ejemplo: y = 2x + x + 4x +5 >fun = @(x) 2*x.^3+x.^2+4*x+5; >fzero(fun,[-2,6]) ans = -1.0000
3 2

La forma de ingresar una funcin es colocar el smbolo @ precedido por la variable independiente entre parntesis y seguido a ello la funcin misma. Ejemplo: y = sin(x^2) >fun = @(x) sin(x^2); > fzero(fun,[0,2]) ans = 1.2533

Pgina9

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

Es de suma importancia aclarar que al trabajar funciones con discontinuidades, tales como la tangente, existe la probabilidad de que el comando fzero() entregue el punto de discontinuidad como una raz aunque esta no lo sea.

Funcionespolinmicas
En Octave un polinomio se representa mediante un vector fila que contiene los coeficientes de las potencias en orden descendente y si alguno no estuviera, se coloca 0 en su posicin. Las races tanto reales como complejas de un polinomio se obtienen mediante el comando: >roots() Ejemplo: y = 2x + x + 4x +5 >y=[2,1,4,5]; >roots(y) ans = 0.25000 + 1.56125i 0.25000 - 1.56125i -1.00000 + 0.00000i Pueden recalcularse los coeficientes a partir de las races mediante el comando poly(). Para el ejemplo anterior seria: >poly(0.25000 + 1.56125i ,0.25000 - 1.56125i ,-1.00000 + 0.00000i ); ans = 1.00000 0.50000 2.00000 2.50000 Sin embargo puede observarse que todos los coeficientes aparecen normalizados con respecto a los originales. Esto se debe a que un polinomio determinado a partir exclusivamente de las races sigue siendo arbitrario en cuanto a un multiplicador constante. Para poder determinar un polinomio de orden n se requieren n +1 puntos de datos, pero el nmero de races de un polinomio es solo n, por ello Octave normaliza los coeficientes de modo que el primero sea la unidad.
3 2

6.

Resolucin de integrales

Para resolver numricamente una integral definida mediante el mtodo de aproximacin trapezoidal con segmentos unitarios, Octave posee una funcin integrada denominada: trapz(Y) Lo que se hace generalmente es definir un vector equiespaciado cuyo valor inicial se corresponde con el lmite inferior de integracin y el valor final con el lmite superior. Luego se aplica al vector la funcin a integrar y se encuentra el valor de la integral multiplicando el resultado de la funcin trapz(Y) con el tamao del segmento. Ejemplos

sen( x)

>X=0:0.00001:pi/2; >Y=sin(X); > trapz(Y)*0.00001 ans = 0.99999

Pgina10

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

e sen(10x)
x 0

>X=0:0.00001:pi/2; >Y=exp(X).*sin(X); > trapz(Y)*0.00001 ans = 2.9052

Otro mtodo para resolver integrales, es utilizando el comando quad(Y), para ello, se debe definir la funcin, colocando el smbolo @ precedido por la variable independiente entre parntesis y seguido la funcin. Ejemplos

sen( x)

>Y=@(X) sin(X); > quad(Y,0,pi/2) ans = 1.0000 >Y=@(X) exp(X).*sin(10*X); > quad(Y,0,pi/2) ans = 2.9052

e sen(10x)
x 0

7.

Resolucin de ecuaciones diferenciales ordinarias


Para resolver Ecuaciones Diferenciales Ordinarias, del tipo:
dx = f ( x, y ) con ciertas condiciones dy

iniciales, Octave posee un comando llamado >lsode() el cual permite observar una aproximacin a la solucin particular en un intervalo definido por el usuario. La informacin a ingresar es la ecuacin diferencial, un vector columna con el valor inicial, el valor final de la variable independiente y el paso y el comando lslode que tiene como parmetros la funcin derivada, el valor inicial de la variable dependiente (condiciones iniciales) y la variable dependiente. Ejemplo > Dx=@(t,x) -t*x^2; > t=linspace(0,5,10)'; > x=lsode(Dx,2 ,t ) #Se define la ecuacin diferencial como una funcin de t e y #Se define un vector tiempo #Se ejecuta el comando lsode.

Se obtiene como salida puntos de la funcin original Para lograr la grfica de la funcin solucin se deben especificar los siguientes comandos: > Dx=@(t,x) -t*x^2; > t=linspace(0,5,500)'; > x=lsode(Dx,2 ,t ); > plot(t,x); #Se define la ecuacin diferencial como una funcin de t e y #Se define un vector tiempo en base al cual se graficara. #Se ejecuta el comando lsode. #Se grafica la solucin en una ventana

Pgina11

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

8.

Grficos con Octave

La mayor parte de las ecuaciones matemticas expresan relaciones complicadas en una o ms dimensiones, tratar de entenderlas sin grficas es casi lo mismo que tener los ojos vendados. Las grficas son ahora una parte natural del entorno de computacin con Octave y la grfica de los resultados de los clculos pueden efectuarse con algn comando. Octave utiliza un tipo especial de ventanas para realizar las operaciones grficas implementadas a partir de la aplicacin WGnuPlot. Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien sustituyendo lo que hubiera en ella o aadiendo nuevos elementos grficos a un dibujo anterior.

Grficassimples
Octave dispone de cuatro funciones bsicas para crear grficos 2-D. Estas cuatro funciones se diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas y de ordenadas. plot(): crea un grfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes. loglog(): dem con escala logartmica en ambos ejes semilogx(): dem con escala lineal en el eje de ordenadas y logartmica en el eje de abscisas semilogy(): dem con escala lineal en el eje de abscisas y logartmica en el eje de ordenadas

Ejemplos > x = 0:0.05:10; > y =sin(x).*exp(-0.4*x); > plot(x,y) > title(Ejemplo 1); > xlabel(' Coordenada X'); > ylabel('Coordenada Y'); #Se define el origen, el paso y el fin de la variable independiente. # Se aplica la funcin al vector anterior. # Se ejecuta el comando grfico. #Se define el titulo del grafico. #Se define un nombre para la etiqueta de abscisas. #Se define un nombre para la etiqueta de ordenadas.

Pgina12

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

Ahora se cambiara el titulo a Ejemplo 2 se agregara una grilla y se graficara una funcin seno, en rojo, sobre la anterior. > title(Ejemplo 2) > z =sin(x); # Se aplica la funcin al vector de la variable independiente. > grid on; #Activa la grilla. > hold on # Mantiene el grafico anterior. > plot(x,z,r) # Se ejecuta el comando grfico en color rojo (r).

> title(Ejemplo 3) > t = 0.1:0.01:3; > x = exp(t); > y = exp(t.*sinh(t)); > loglog(x,y,.); #Ploteo en escala logartmica. > grid on En Octave tambin es posible realizar grficos en 3 dimensiones. La forma ms sencilla de hacerlo es mediante el comando plot3(), que es el anlogo tridimensional de plot(). Esta funcin dibuja puntos cuyas coordenadas estn contenidas en 3 vectores, bien unindolos mediante una lnea continua (defecto) o bien mediante markers.

> title(Ejemplo 4 Grafica 3D) > fi=[0:pi/20:6*pi]; > plot3(cos(fi),sin(fi),fi,'r')

9.

Guardar y recuperar los datos en Octave

En muchas ocasiones puede resultar necesario interrumpir el trabajo con Octave y recuperarlo ms tarde en el mismo punto en el que se dej (con las mismas variables definidas, y los mismos resultados intermedios), excepto los grficos, ya que ocupan una gran cantidad de memoria.

Pgina13

Programacin Bsica y Mtodos Numricos

OCTAVE 3.2.4

Hay que tener en cuenta que al salir del programa todo el contenido de la memoria se borra automticamente. Para guardar el estado de una sesin de trabajo en el directorio actual existe el comando save el cual debe ingresarse seguido del nombre deseado del fichero. Dicho estado puede recuperarse la siguiente vez que se arranque el programa mediante el comando load seguido del nombre del fichero a cargar. Para saber qu variables estn cargadas en la sesin de Octave, se utilizan los comandos who o whos, los cuales presentarn las variables con sus respectivos valores y atributos.

10.

Ayuda

Si se tipea en la consola la palabra help, aparecern en pantalla los distintos paquetes de ayuda. Tambin se puede consultar el manual online ingresando a: http://wiki.octave.org

Pgina14