You are on page 1of 14

Programación Básica  y   Métodos Numéricos       OCTAVE 3.2.

Con OCTAVE. Entre las numerosas funciones matemáticas. de precisión sencilla o de doble precisión.2. Introducción GNU OCTAVE es un programa libre utilizado para realizar cálculos numéricos y distintas representaciones graficas trabajando incluso con números complejos. vectores y matrices. Número positivo más grande: 1. los solucionadores de álgebra lineal desempeñan un papel crucial. Octave es en la actualidad el lenguaje de alto nivel libre más parecido a Matlab.7977x10+308. En Octave.     Página 2     . es posible representar funciones y crear gráficos científicos e incluso artísticos en la pantalla utilizando expresiones matemáticas. todo el sistema se basa en estos solucionadores. Entre varias características que comparten se puede destacar que ambos ofrecen un intérprete sencillo el cual permite al usuario ejecutar órdenes en modo interactivo. Una particularidad extraordinaria de los números tanto en Octave como en Matlab es que no hay distinción entre reales. Esto significa que cualquier variable puede contener números de cualquier tipo sin una declaración especial durante la programación. de hecho. Precisión numérica  En OCTAVE la exactitud de los cálculos depende de la forma en que se reasignan y procesan los números. Además.Programación Básica y Métodos Numéricos OCTAVE 3.2251x10-308.4 1. La amplia biblioteca matemática de octave facilita el análisis y la resolución de problemas de índole matemático. Los parámetros claves que indican la exactitud de los números en un lenguaje de programación son: • • Número positivo más pequeño: 2. enteros. todos estos números están conectados continuamente. gracias a la continuidad entre las variables reales y complejas. el usuario puede crear rutinas adicionales con mucha más facilidad que en otros lenguajes de programación. mediante la aplicación de unos cuantos comandos. complejos. haciéndola más productiva y rápida. Gráficos en OCTAVE  El análisis visual de los problemas matemáticos ayuda a comprender las matemáticas y hacerlas más accesibles.

#Ecuación que define el volumen de una esfera en función del radio.510 > b=10/3 b= 3. #Asignamos el radio de la esfera.3333 > c=(1+2i) c= 1 + 2i     Página 3     . es case-sensitive. Tener especial cuidado al nombrar y utilizar nombres de variables pues Octave.Programación Básica y Métodos Numéricos OCTAVE 3. Aritmética y cálculo El manejo de la operaciones básicas en Octave se hace de una manera muy simple.   2. pero esta se realiza de una forma mucho más sencilla que en muchos otros lenguajes. se identifica por medio del símbolo > y es allí donde deben ingresarse las diferentes órdenes. Ejemplos > a=8 a= 8 Cálculo del volumen de una esfera > r=2. > Vol=(4/3)*pi*r^3. debido a que no hay que especificarle el tipo de la variable que se va a introducir ya que él mismo puede reconocerlo. Ejemplo > (5+7)*2 ans = 24 Como todo lenguaje de alto nivel Octave permite la asignación de variables. Todos los resultados son precedidos por la palabra ans. al igual que C. solo basta con ingresar la expresión a calcular y presionar la tecla enter.2. Esto significa que vol. Vol y VOL son tres variables diferentes. no muestra el valor ingresado. conteniendo información inherente al programa. el . > Vol Vol = 33. llamada línea de comandos. La última línea. Comenzando con OCTAVE Cuando se ejecuta OCTAVE aparece una ventana sencilla (sin interfaz gráfica) conocida como consola o intérprete.4 1.

Otras funciones elementales Funciones que realizan tareas. >d d = CASA #Se asigna un valor cualquiera a la variable d.      Página 4     . es decir.4 Como se vio en los ejemplos anteriores no interesa si la variable es de tipo flotante. #Se verifican los datos que contiene la variable.Programación Básica y Métodos Numéricos OCTAVE 3. a\ b produce b/a. Además OCTAVE emplea un operador no tradicional. Operadores aritméticos  Los operadores aritméticos son +. Este operador produce el reciproco de la división. >d d= 5 > d="CASA".  Ejemplo > d=5. #Se asigna. desde elementales hasta las de alto nivel. sin tener que cambiar o redefinir los tipos de las variables.* y /.2. información tipo texto en d.^ Operación Multiplicación (elemento a elemento) División (elemento a elemento) División a la izquierda (elemento a elemento) Potencia (elemento a elemento)   Funciones matemáticas  Octave tiene numerosas funciones matemáticas.-. Las funciones elementales pueden agruparse en tres categorías: • • • Funciones trigonométricas. Octave permite trabajar con cadenas de texto (string) de forma similar.\ .* .   Comando . entera o compleja. \ división inversa. entre comillas./ . #Se verifican los datos que contiene la variable. real.

Funcionan con argumentos vectoriales y matriciales. una matriz 1×n (una fila y n columnas) se denomina vector fila. Ejemplo Para ilustrar mejor el trabajo con variables imaginarias. encerrados entre corchetes. -1 si x<0 Residuo al dividir: x . Matrices y vectores Una matriz es un arreglo rectangular de números.      Página 5     .Programación Básica y Métodos Numéricos En la tabla se muestran las funciones de las dos primeras categorías: Funciones Matemáticas 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. Las matrices pueden tener cualquier tamaño y pueden ser ampliadas o reducidas dinámicamente.1896-9. es decir.infinito Redondear hacia + infinito +1 si x>0.2.4 Funciones Trigonométricas Comentarios Comentarios Valor absoluto de x Ángulo de fase de un valor complejo: si x = real. como ocurre en otros lenguajes de programación. ángulo = 0 si x = √-1. en el caso particular de Octave.y*fix(x/y) Base exponencial e Logaritmo base e Logaritmo base 10 -π≥atan(x)≥π/2 Igual que atan(y/x) -π≥atan(y. no es necesario declarar el tamaño previamente. Una matriz con una sola columna o una sola fila se denomina vector. ya que el entorno se encarga de conseguir la memoria necesaria. y una matriz m×1 (una columna y m filas) se denomina vector columna. El caso particular en que la dimensión de la matriz es 1 x 1 se denomina escalar.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 matemáticas en Octave presentan dos grandes diferencias respecto de los otros lenguajes de programación: • • Funcionan con variables complejas sin discriminación alguna. probemos: > cos( 2 + 3i) ans = -4.1092i 3. ángulo = π/2 Raíz cuadrada de x Parte real del valor complejo de x Parte imaginaria del valor complejo x Conjugado complejo x Redondear al entero más cercano Redondear un valor real hacia cero Redondear hacia .

Programación Básica y Métodos Numéricos Ingreso de vectores  Las matrices pueden generarse. expresiones u otras matrices.188231     Página 6     . 9] A= 1 2 3 4 5 6 7 8 9 Los elementos pueden ser constantes. >C=cos(A)*B C= 0. 12 y 13 para generar B. 5.2.1].) o el salto de línea se utiliza para separar una fila de la siguiente. 6. 7. 8. Se recomienda la utilización de la coma y el punto y coma en lugar del espacio y el salto de línea. [11. >B=[2. 2. 10+3]] B= 1 2 3 11 4 5 6 12 7 8 9 13 Octave posee una sistema muy útil para la generación 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 4 5 6 7 8 9 10 • RESULTADO DE OPERACIONES MATRICIALES Es posible generar nuevas matrices a partir de otras definidas previamente utilizando cualquiera de las funciones matemáticas detalladas con anterioridad. siempre y cuando de lugar a una matriz de dimensiones correctas. a groso modo de tres maneras distintas: OCTAVE 3. 3.039069 2. Ejemplo > A=[1. 6*2.3]. La coma (. Ejemplo > A=[0.4.) o el espacio se utilizan para separar los elementos de una fila. Ejemplo Con este concepto puede añadirse a la matriz A una columna con los elementos 11. ya que el uso de estos últimos suele llevar a errores difíciles de localizar. 4. El punto y coma (.4 • DEFINICION EXPLÍCITA Se realiza indicando los elemento entre corchetes ([ ]).5. > B=[A.

Si x es una matriz. final.m]). en este caso se conoce el número de elementos pero no su separación. n): Similar a linspace pero con una separación logarítmica entre los elementos del vector. sum(x): Calcula la sumatoria de los elementos de un vector o matriz x. Habrá tantos elementos como indique n. logspace(inicial. devuelve un solo número aleatorio. cuyos elementos serán iguales a 1. A diferencia de los rangos.m). devuelve una matriz n x n de números aleatorios. n): Genera un vector de elementos equi-espaciados a partir del valor inicial hasta el final. max(x): Encuentra el máximo en el vector x y min(x) encuentra el mínimo. donde n especifica el tamaño de la matriz de números aleatorios que debe devolverse. Operaciones con vectores  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. vector columna o una matriz. En este caso inicial y final representan los exponentes de 10 para el valor inicial y final del vector. se calcula la sumatoria de cada columna y se devuelve un vector fila formador por la sumatoria de todas las columnas. En caso de ser cuadrada esta representara la identidad para la dimensión correspondiente. ones(n). El argumento x puede ser un vector fila o columna o una matriz. Si x es una matriz. ones(n. ones(): Compone una matriz con todos sus elementos iguales a 1. ones([n. El argumento x puede ser un vector fila. si n>1. Si x es una matriz. el reordenamiento se realizará en cada columna.m) zeros([n.     Página 7     . o 100 si este parámetro no se especifica. en que se conoce la separación de los elementos pero no su número. eye(): Devuelve una matriz con sus elementos iguales a 0 excepto en la diagonal principal. la respuesta es un vector fila que contiene el máximo o mínimo de cada columna de x. Tiene las mismas formas de invocación que la función zeros. sum calcula el total de los elementos. final. es decir. para los vectores tanto de fila como de columna. zeros(n): Crea una matriz cuadrada de dimensión n (con n filas y n columnas) con todos sus elementos iguales a 0.2.m]): Genera una matriz de n filas y m columnas con todos sus elementos iguales a 0. size(x): Da como resultado el tamaño (cantidad de componentes) de alguna matriz x ingresada previamente en Octave. linspace(inicial. rand(n): Crea una matriz de elementos aleatorios con distribución normal (gaussiana de media 0 y varianza 1). Tiene las mismas formas de invocación que zeros.4 Existe una serie de funciones que se utilizan muy a menudo para generar matrices de ciertas características. En el caso de que final valga π el valor final será π y no 10π. Si n=1. zeros(n.Programación Básica y Métodos Numéricos • RESULTADO DE UNA FUNCION GENERADORA OCTAVE 3.

    Página 8     .Programación Básica y Métodos Numéricos det(x): Calcula el determinante de un matriz cuadrada..2x2 +. si x=(1. al menos una fila o columna puede expresarse como suma o resta de otras filas o columnas. OCTAVE 3. se utilizan los operadores encabezados por un punto.1]. entonces se tiene la particularidad de que la matriz de coeficientes A es cuadrada.. se utiliza generalmente la norma infinito en lugar de la norma euclídea. + a1. la matriz B es la matriz transpuesta de A.-1].1x1 + a1.2x2 +..20000 -0.4 inv(x): Calcula la matriz inversa de otra matriz cuadrada ingresada previamente...2. > x=A\b x= 0.nxn = b2 am.. Para operar elemento a elemento una matriz A y otra matriz B. Cuando se emplean métodos numéricos para resolución de Sistemas de Ecuaciones Lineales.nxn = bm Donde los am. por ejemplo: .1.2. el número de ecuaciones es igual al número de incógnitas.2x2 +. entonces. Los sistemas de ecuaciones lineales pueden expresarse matricialmente de la siguiente forma: Ax=b En los sistemas de ecuaciones lineales donde m = n.. 4. La norma infinito se define como el máximo de los valores absolutos de las componentes del vector (o sea la mayor componente en valor absoluto).2. excepto cuando esta última es una matriz singular. + a2. Para generar la matriz transpuesta de una matriz ya ingresada se utiliza el operando ' .* de modo que C= A . En una matriz singular.80000 Sistemas de ecuaciones lineales y número de condición K  En álgebra se ha visto el concepto de módulo o norma de un vector. puede obtenerse una buena aproximación a la verdadera solución del mismo (x) ingresando en la línea de comandos: >x=inv(A)*b o bien >x=A\b este método es más eficiente ya que el tiempo de cómputo es aproximadamente 50% menor que el anterior Ejemplo > A=[3.2). Por ejemplo B = A'.1x1 + a2.n son coeficientes conocidos. Por ejemplo. utilizando lo que se conoce como norma 2 o norma euclídea.1x1 +am.* B.. Resolución de sistemas de ecuaciones lineales Considerando un conjunto de m ecuaciones con n incógnitas dado por: a1. Dependiendo de las características del sistema de ecuaciones.. b=[-1. de igual tamaño.+am. x son incógnitas y bm son términos conocidos que se denominan términos no homogéneos (términos independientes).nxn = b1 a2.

indicando que no existe raíz real en el intervalo. Ejemplo: y = sin(x^2) >fun = @(x) sin(x^2). en este último caso la norma infinito se define como el máximo entre los resultados de las sumas de los valores absolutos de los coeficientes de cada fila de la matriz.Programación Básica y Métodos Numéricos Para el caso anterior será ||x||∞=max{|1|.2533     Página 9     .”. Utilizando norma infinito sería K∞(A)= ||A||∞ ||A-1||∞ que se calcula con Octave ingresando en la consola norm(A. 5. la matriz está mal condicionada. Cuando una matriz está mal condicionada. Obtención de raíces de funciones Para hallar las raíces reales de una función cualquiera existe el comando: > fzero(fun.2]) ans = 1.6]) ans = -1. Como se dijo anteriormente cuando se resuelve un sistema de ecuaciones lineales se obtiene una x de la solución y al no conocer el valor verdadero no es posible saber qué tan buena aproximación ~ es dicha aproximación. en caso de que la búsqueda falle el resultado será “warning: fzero: equal signs at both ends of the interval.4 Para calcular la norma euclídea se utiliza: >norm(x) mientras que el cálculo de la norma infinito se calcula ingresando: >norm(x.   >fzero(fun.[-2.x1]). El valor devuelto por esta función será alguno de los puntos donde la función cambia de signo dentro del intervalo definido por x0 y x1.0000 3 2   La forma de ingresar una función es colocar el símbolo @ precedido por la variable independiente entre paréntesis y seguido a ello la función misma.2. se puede sospechar que una aparentemente buena aproximación quizás diste mucho de la solución real.^3+x. Estos comandos se aplican tanto a vectores como a matrices. |2|}=2 OCTAVE 3. > fzero(fun.[x0.inf)*norm(inv(A).^2+4*x+5. |2|. se dice que la matriz está bien condicionada mientras que si es significativamente mayor que 1.inf). ¿Cómo se podría sospechar que quizás se esté cometiendo un grave error? Para ello se utiliza el número de condición K. El número de condición de una matriz no es otra cosa que el producto de la norma de la matriz por la norma de su inversa.inf) Si el número de condición es cercano a 1. Ejemplo: y = 2x + x + 4x +5 >fun = @(x) 2*x.[0.inf) o directamente con el comando: > cond(A.

25000 .00000 + 0.1.56125i .5].00000i Pueden recalcularse los coeficientes a partir de las raíces mediante el comando poly().4 Es de suma importancia aclarar que al trabajar funciones con discontinuidades. > trapz(Y)*0. Para poder determinar un polinomio de orden n se requieren n +1 puntos de datos.25000 . Octave posee una función integrada denominada: trapz(Y) Lo que se hace generalmente es definir un vector equiespaciado cuyo valor inicial se corresponde con el límite inferior de integración y el valor final con el límite superior. >Y=sin(X).00001 ans = 0.1.56125i .00000i ).4.25000 + 1.99999     Página 10     . >roots(y) ans = 0. pero el número de raíces de un polinomio es solo n.00000 2.Programación Básica y Métodos Numéricos OCTAVE 3. Funciones polinómicas  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.50000 Sin embargo puede observarse que todos los coeficientes aparecen normalizados con respecto a los originales.1.56125i 0. Las raíces tanto reales como complejas de un polinomio se obtienen mediante el comando: >roots() Ejemplo: y = 2x + x + 4x +5 >y=[2.0. Para el ejemplo anterior seria: >poly(0. Ejemplos π ∫ 0 2 sen( x) >X=0:0.00001:pi/2. por ello Octave normaliza los coeficientes de modo que el primero sea la unidad.25000 + 1. ans = 1. existe la probabilidad de que el comando fzero() entregue el punto de discontinuidad como una raíz aunque esta no lo sea. tales como la tangente.56125i -1. se coloca 0 en su posición. 3 2 6. Resolución de integrales Para resolver numéricamente una integral definida mediante el método de aproximación trapezoidal con segmentos unitarios.2.00000 + 0.00000 0. Luego se aplica al vector la función a integrar y se encuentra el valor de la integral multiplicando el resultado de la función trapz(Y) con el tamaño del segmento.50000 2.-1. Esto se debe a que un polinomio determinado a partir exclusivamente de las raíces sigue siendo arbitrario en cuanto a un multiplicador constante.

5. para ello. #Se define la ecuación diferencial como una función de t e y #Se define un vector tiempo en base al cual se graficara.10)'. del tipo: dx = f ( x. Octave posee un comando llamado >lsode() el cual permite observar una aproximación a la solución particular en un intervalo definido por el usuario.x) -t*x^2. el valor inicial de la variable dependiente (condiciones iniciales) y la variable dependiente.*sin(10*X).0000 >Y=@(X) exp(X). >Y=exp(X).9052 π ∫ e sen(10x) x 0 2 7. Se obtiene como salida puntos de la función original Para lograr la gráfica de la función solución se deben especificar los siguientes comandos: > Dx=@(t. > quad(Y.0. Ejemplo > Dx=@(t.pi/2) ans = 2.9052 Otro método para resolver integrales. el valor final de la variable independiente y el paso y el comando lslode que tiene como parámetros la función derivada. Resolución de ecuaciones diferenciales ordinarias Para resolver Ecuaciones Diferenciales Ordinarias. > plot(t.2 .Programación Básica y Métodos Numéricos π OCTAVE 3.x) -t*x^2.t ) #Se define la ecuación diferencial como una función de t e y #Se define un vector tiempo #Se ejecuta el comando lsode. > quad(Y. Ejemplos π ∫ 0 2 sen( x) >Y=@(X) sin(X).0. colocando el símbolo @ precedido por la variable independiente entre paréntesis y seguido la función. #Se ejecuta el comando lsode. y ) con ciertas condiciones dy iniciales.*sin(X).5. > trapz(Y)*0. > x=lsode(Dx. un vector columna con el valor inicial.x). > t=linspace(0. es utilizando el comando quad(Y).2. La información a ingresar es la ecuación diferencial.00001:pi/2. > x=lsode(Dx.00001 ans = 2.500)'. > t=linspace(0.t ). se debe definir la función.2 .4 ∫ e sen(10x) x 0 2 >X=0:0.pi/2) ans = 1. #Se grafica la solución en una ventana     Página 11     .

Estas cuatro funciones se diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas y de ordenadas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa.4 8. el paso y el fin de la variable independiente. #Se define un nombre para la etiqueta de ordenadas.2. Gráficos con Octave La mayor parte de las ecuaciones matemáticas expresan relaciones complicadas en una o más dimensiones. tratar de entenderlas sin gráficas es casi lo mismo que tener los ojos vendados. con escalas lineales sobre ambos ejes. #Se define un nombre para la etiqueta de abscisas.Programación Básica y Métodos Numéricos OCTAVE 3. Gráficas simples  Octave dispone de cuatro funciones básicas para crear gráficos 2-D. Octave utiliza un tipo especial de ventanas para realizar las operaciones gráficas implementadas a partir de la aplicación WGnuPlot. Las gráficas son ahora una parte natural del entorno de computación con Octave y la gráfica de los resultados de los cálculos pueden efectuarse con algún comando. # Se ejecuta el comando gráfico. #Se define el titulo del grafico. > ylabel('Coordenada Y'). loglog(): ídem con escala logarítmica en ambos ejes semilogx(): ídem con escala lineal en el eje de ordenadas y logarítmica en el eje de abscisas semilogy(): ídem con escala lineal en el eje de abscisas y logarítmica en el eje de ordenadas Ejemplos > x = 0:0. > plot(x. > xlabel(' Coordenada X'). bien sustituyendo lo que hubiera en ella o añadiendo nuevos elementos gráficos a un dibujo anterior. # Se aplica la función al vector anterior. > y =sin(x).y) > title(‘Ejemplo 1’). #Se define el origen.05:10.*exp(-0.     Página 12     . • • • • plot(): crea un gráfico a partir de vectores y/o columnas de matrices.4*x).

La forma más sencilla de hacerlo es mediante el comando plot3().01:3. en rojo. #Activa la grilla. sobre la anterior. > y = exp(t.’).sin(fi). > title(‘Ejemplo 3’) > t = 0. # Se aplica la función al vector de la variable independiente. bien uniéndolos mediante una línea continua (defecto) o bien mediante markers. Guardar y recuperar los datos en Octave En muchas ocasiones puede resultar necesario interrumpir el trabajo con Octave y recuperarlo más tarde en el mismo punto en el que se dejó (con las mismas variables definidas.*sinh(t)). > title(‘Ejemplo 2’) > z =sin(x).     Página 13     . > grid on.1:0.’r’) # Se ejecuta el comando gráfico en color rojo (‘r’). ya que ocupan una gran cantidad de memoria.4 Ahora se cambiara el titulo a Ejemplo 2 se agregara una grilla y se graficara una función seno. #Ploteo en escala logarítmica. > plot3(cos(fi).z. > plot(x. y los mismos resultados intermedios).2. > hold on # Mantiene el grafico anterior. excepto los gráficos.’.fi. > title(‘Ejemplo 4 – Grafica 3D’) > fi=[0:pi/20:6*pi].'r') 9. > grid on En Octave también es posible realizar gráficos en 3 dimensiones. que es el análogo tridimensional de plot().y. > x = exp(t).Programación Básica y Métodos Numéricos OCTAVE 3. > loglog(x. Esta función dibuja puntos cuyas coordenadas están contenidas en 3 vectores.

se utilizan los comandos who o whos. Ayuda Si se tipea en la consola la palabra help. Para saber qué variables están cargadas en la sesión de Octave.2.Programación Básica y Métodos Numéricos OCTAVE 3. 10. aparecerán en pantalla los distintos paquetes de ayuda. Para guardar el estado de una sesión de trabajo en el directorio actual existe el comando save el cual debe ingresarse seguido del nombre deseado del fichero. También se puede consultar el manual online ingresando a: http://wiki. Dicho estado puede recuperarse la siguiente vez que se arranque el programa mediante el comando load seguido del nombre del fichero a cargar.4 Hay que tener en cuenta que al salir del programa todo el contenido de la memoria se borra automáticamente. los cuales presentarán las variables con sus respectivos valores y atributos.org     Página 14     .octave.