Scilab una alternativa libre para el cálculo numérico

3,164 views

Published on

Scilab una alternativa
libre para el cálculo
numérico

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,164
On SlideShare
0
From Embeds
0
Number of Embeds
108
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Scilab una alternativa libre para el cálculo numérico

  1. 1. Scilab una alternativalibre para el cálculonumérico (1ra parte)Scilab es un entorno de trabajo para realizar cálculos numéricos especialmentedestinados a ingenierías. El programa contiene cientos de funciones matemáticasdando la posibilidad de añadir las propias, si las escribimos en lenguajes como C oFortran. Las funciones se pueden mostrar gráficamente en 2D e incluso animarse entres dimensiones. También permite crear simulaciones ODE y DAE. realizar experimentos que contribuyan a la ciencia y a la investigación. ✔ Hacer uso de funcionalidades ya implementadas, en lugar de desarrollarlas desde cero ✔ Reusar procedimientos y funciones realizadas por otros profesionales. ✔ .....Antecedentes Es así que dentro del mundo matemático, hoy en día contamos con una ampliaHoy en día la mayoría de los centros de variedad de aplicaciones software tantoformación superior y Universidades, tratan de comerciales como libres; un fenómeno quefomentar la investigación entre sus destaca actualmente es el uso del softwareprofesionales y alumnado, pero muchas libre, que al margen de proveer solucionesveces esta tarea se ve limitada por la falta de iguales o mejores a sus similares dentro elherramientas e instrumentos que permitan ámbito comercial de pago, permite fomentarencarar este proceso. Una de estas directamente el trabajo en comunidad,herramientas y/o instrumentos la conforman estudia detalle de soluciones existenteslas aplicaciones software, cuyo objetivo (tener a disposición el código de laprincipal es la automatización de tareas aplicación), su libre distribución y lamorosas y álgidas que muchas veces las colaboración dentro los proyectos existentes,personas deben realizar. aspecto que se convierte en fundamental alPara los profesionales y estudiantes dentro el momento de encarar una investigación.mundo académico y de la investigación, esfundamental contar con herramientas que lepermitan: Introducción ✔ Convertir la teoría en práctica Scilab es un software matemático, con un lenguaje de programación de alto nivel, para ✔ Realizar tareas de forma automática cálculo científico, interactivo de libre uso y ✔ Realizar cálculos matemáticos de disponible en múltiples sistemas operativos. forma más cómoda, sencilla, rápida y Scilab contiene numerosas herramientas, confiable. entre las que destacan: gráficos 2-D y 3-D, ✔ Valerse de estas herramientas para animación, álgebra lineal, matrices dispersas,
  2. 2. Polinomios y funciones racionales, ✔ Resolución de sistemas deSimulación: programas de resolución de ecuaciones lineales y ecuacionessistemas de ecuaciones diferenciales diferenciales(explícitas e implícitas), Xcos: simulador por ✔ Creación y definición de funcionesdiagramas en bloque de sistemas dinámicos propiashíbridos, Control clásico, robusto,optimización LMI, Optimización diferenciable ✔ Creación y utilización de funcionesy no diferenciable, Tratamiento de señales, destinadas a aplicaciones específicasGrafos y redes, Scilab paralelo empleando denominados “Toolboxes”, conPVM, Estadísticas, Creación de GUIs, aplicación al Control, Optimización,Interfaz con el cálculo simbólico (Maple, Redes Neurales, etc.MuPAD), Interfaz con TCL/TK.Otra de sus ventajas es que se pueden Funciones incluidasagregar numerosas herramientas otoolboxes, hechas por los usuarios como ✔ Entrada/SalidaGrocer una herramienta para Econometría u ✔ GráficasOpen FEM (Una caja de Herramientas paraElementos Finitos), hecha por INRIA. ✔ Manejo de matrices ✔ Álgebra linealRequerimientos ✔ Ecuaciones no linealesPara su instalación se puede hacer uso del ✔ Ecuaciones diferencialesgestor de paquetes propio de cada ✔ Optimizacióndistribución: ✔ Estadística ✔ YUM, para CentOs, Fedora ✔ Funciones financieras ✔ apt-get, para Debian, Ubuntu ✔ Conjuntos Manejo de polinomiosCaracterísticas ✔ ✔ Teoría de control ✔ Se basa en un lenguaje orientado al cálculo numérico simple y fácilmente ✔ Procesado de señales asimilable ✔ Procesado de imágenes ✔ Proporciona una consola para el uso ✔ Procesado de audio del interprete de forma interactiva ✔ Compatible con la mayoría las instrucciones de Matlab Modos de trabajo ✔ Puede extenderse mediante el uso de En Scilab existen dos formas de trabajar: procedimientos y funciones por medio ✔ Modo interactivo: Ejecución de de módulos dinámicos cualquier expresión, programa o ✔ Capacidad de ser utilizado en función Scilab dentro del entorno. El archivos script modo interactivo puede arrancarse en modo ventana o en modo texto ✔ Es multiplataforma ✔ Modo ventana: $ scilab ✔ Generación de gráficos en dos y tres dimensiones ✔ Modo texto: $ scilab -nw ✔ Operaciones matriciales ✔ Modo bash: Ejecución de un fichero sin necesidad de entrar en el entorno ✔ Operaciones con polinomios y del programa. funciones de transferencia
  3. 3. ✔ $ echo "exec(ordenes.sce); quit" | Matriz unidad scilab -nw > resultados.out -->ones(5,5) ans = 1. 1. 1. 1. 1.Tipos de datos 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. ✔ Escalares 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. ✔ Vectores y Matrices Matriz ceroEscalares -->zeros(5,5)-->17 ans = ans = 0. 0. 0. 0. 0. 17. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.Vectores 0. 0. 0. 0. 0.-->[2 4 6 8 10] ans = Números aleatorios 2. 4. 6. 8. 10. -->rand() ans =Matrices 0.2113249-->[1 2;3 4] ans = -->rand(3,3) 1. 2. ans = 3. 4. 0.7560439 0.6653811 0.6857310 0.0002211 0.6283918 0.8782165 0.3303271 0.8497452 0.0683740Constantes Variables-->%e %e = -->x=1 2.7182818 x = 1.-->%pi %pi = -->y=rand(2,2) 3.1415927 y = 0.5608486 0.7263507 0.6623569 0.1985144Algunos ejemplos sobrematrices Intervalos -->1:5 ans =Matriz identidad 1. 2. 3. 4. 5.-->eye(5,5) -->1:3:25 ans = ans = 1. 0. 0. 0. 0. column 1 to 6 0. 1. 0. 0. 0. 1. 4. 7. 10. 13. 16. 0. 0. 1. 0. 0. column 7 to 9 0. 0. 0. 1. 0. 19. 22. 25. 0. 0. 0. 0. 1.
  4. 4. -->2|2Operaciones ans = T Operación Descripción + Adición suma Comparación entre vectores -->[2 4 6 8] <= [5 2 7 8] – Sustracción resta ans = T F T T * Multiplicación Comparación entre matrices Traspuesta -->[1 3; 5 7] <= [5 2; 6 7] ans = ^ Potenciación T F T T División-izquierda / División-derecha Variables En Scilab, las variables no son declaradas: .* Producto elemento a su tipo y su tamaño cambian de forma elemento dinámica de acuerdo con los valores que le son asignados. Así, una misma variable ./ y . División elemento a puede ser utilizada para almacenar en elemento distintos tiempos un valor de tipo distinto. Las variables se crean automáticamente al .^ Elevar a una potencia asignarles un contenido. elemento a elemento Es importante comprender que el uso de == ~= (ó mayúsculas y minúsculas en el nombre de <>) una variable hace que esta sea distinta una <> de la otra. Operadores de comparación <= En Scilab es importante determinar que variables tenemos a disposición en un >= determinado instante, eliminar variables, etc; para esto podemos hacer uso de los & siguientes comandos utiles para la gestión de | Operadores lógicos variables. ~ Función DescripciónComparación de escalares who lista las variables actuales-->2>5 ans = whos como el anterior, pero más F detallado clear elimina todas las variables-->2&2 que existan en ese ans = momento T clear a b c elimina las variables a, b y c (atención: sin comas!) browsevar() abre, en ventana aparte, un
  5. 5. “ojeador” de la memoria de date() Devuelve la Fecha actual trabajo de Scilab: permite “ver” el contenido y características de las Funciones variables e, incluso, editar su valor. Scilab por defecto incluye una amplia variedad de funciones, entre las más utilizadas podemos destacar:FormatosPor defecto, Scilab muestra los números en Función Descripciónformato variable con 10 dígitos. Se puedemodificar esto mediante el comando format sqrt(x) raiz cuadrada de x abs(x) módulo de x Función Descripción conj(z) complejo conjugado de z format(14) 14 dígitos real(z) parte real de z format(‘e’) formato científico o exponencial, coma flotante imag(z) parte imaginaria de z format(‘v’) formato variable (por exp(x) exponencial de x defecto) log(x) logaritmo natural de x format(‘v’,20) formato variable con 20 dígitos log10(x) logaritmo decimal de x format(‘e’,15) formato científico con 15 rat(x) aprox. Racional de x dígitos modulo(x,y) resto de dividir x por y floor(x) valor entero más próximoAlgunos utilitarios hacia -∞Dentro de Scilab muchas veces tenemos lanecesidad de incluir ficheros o variables de ceil(x) valor entero más próximosistema, para esto están disponibles algunos hacia +∞comandos utilitarios, como: sin(x) seno cos(x) coseno Función Descripción tan(x) tangente ls Lista de ficheros del directorio actual (como Unix) asin(x) arco seno dir Lista de ficheros del directorio acos(x) arco coseno (de otra forma) atan(x) arco tangente (devuelve un pwd Devuelve el nombre y path del ángulo entre -90 y 90 directorio actual grados) cd Para cambiar de directorio sinh(x) seno hiperbólico clc Limpia la ventana de comandos cosh(x) coseno hiperbólico
  6. 6. lu(A) factorización LU de la matriz Atanh(x) tangente hiperbólica chol(A) factorización de Cholesky de la matriz Aasinh(x) arco seno hiperbólico qr(A) factorización QR de la matriz Aacosh(x) arco coseno hiperbólicoatanh(x) arco tangente hiperbólica Algunos ejemplos de estas operaciones la mostramos a continuación:Algunas funciones -->x=[2 6 4 8 12 10] x =estadísticas y matemáticas 2. 6. 4. 8. 12. 10. Función Descripción -->max(x) max() Valor máximo de un vector ans = 12. min() Valor mínimo de un vector -->min(x) sum() La suma de los elementos de ans = 2. un vector prod() Producto de los elementos de -->median(x) un vector ans = 7. median() La media de un vector -->gsort(x) std() Desviación estándar de un ans = 12. 10. 8. 6. 4. 2. vector gsort() Ordena los elementos de un ->m vector m = 1. 2. 3. 4. 5. 6. size(A) Devuelve, en un vector fila, las 7. 8. 9. dimensiones de la matriz A size(A,r) Número de filas/columnas de -->length(m) ans = la matriz A 9. size(A,c) length(A) Devuelve un escalar con el -->size(m) número de elementos de la ans = matriz A: si A es una vector, 3. 3. length(A) es su longitud; si A es una matriz length(A) es el -->size(m,r) producto de sus dimensiones ans = 3. det(A) Determinante de la matriz cuadrada A -->size(m,c) ans = rank(A) Rango de la matriz 3. inv(A) Inversa de la matriz A
  7. 7. -->rank(m) ans = e,f,n) logarítmicamente espaciados 2. desde 10^e hasta 10^f, es decirAlgunas funciones logspace( Como el anterior, pero sematriciales e,f) asume n=50 Función Descripción Nota: Scilab brinda la posibilidad de poder diag(v) Si v es un vector, diag(v) es crear nuestras propias funciones y ponerlas una matriz cuadrada de ceros disponibles dentro de nuestras aplicaciones. con diagonal principal = v Algunos ejemplos de estas operaciones la diag(A) Si A es una matriz, diag(A) es mostramos a continuación: un vector = diagonal principal de A -->v=[1 2 3] v = 1. 2. 3. diag(A,k) Si A es una matriz y k es un entero, diag(A,k) es un vector = k-ésima sub o super -->diag(v) ans = diagonal de A (según sea k<0 1. 0. 0. ó k>0) 0. 2. 0. 0. 0. 3. tril(A) Triangular inferior de A triu(A) Triangular superior de A -->w=[4 5 6] w = zeros(n,m) matriz nxm con todas sus 4. 5. 6. componentes iguales a cero -->w ones(n,m) matriz nxm con todas sus ans = componentes iguales a uno 4. 5. 6. eye(n,m) matriz unidad: matriz nxm con diagonal principal =1 y el resto de las componentes =0 -->m=[1 2 3;4 5 6;7 8 9] m = 1. 2. 3. matrix(A,n Re-dimensiona una matriz: si 4. 5. 6. ,m) A es una matriz hxk, 7. 8. 9. matrix(A,n,m) es otra matriz con los mismos elementos -->m que A, pero de dimensiones ans = nxm (tiene que ser h*k=n*m) 1. 4. 7. 2. 5. 8. linspace(a Si a y b son números reales y 3. 6. 9. ,b,n) n un número entero, genera una partición regular del -->mat=[v;w;0 1 0] intervalo [a,b] con n nodos (n- mat = 1 subintervalos) 1. 2. 3. 4. 5. 6. 0. 1. 0. linspace(a Como el anterior, pero se ,b) asume n=100 logspace( Vector con n elementos
  8. 8. -->zeros(m) precedidos de un punto deben entenderse en ans = 0. 0. 0. el sentido de que la operación se efectúa 0. 0. 0. elemento a elemento. 0. 0. 0.-->ones(w) Función Descripción ans = 1. 1. 1. A+B (A-B) matriz de elementos aij + bij ( aij - bij ) (si dimensiones-->size(m) iguales) ans = 3. 3. A*B producto matricial de A y B (si dimensiones-->v adecuadas) v = 1. 2. 3. A^k matriz A elevada a la-->diag(v) potencia k ans = 1. 0. 0. A+k matriz de elementos aij + k 0. 2. 0. 0. 0. 3. A-k matriz de elementos aij - k-->m k*A matriz de elementos k * aij m = 1. 2. 3. A/k =(1/k)*A matriz de elementos aij / k 4. 5. 6. 7. 8. 9. A^k matriz A elevada a la-->diag(m) potencia k: si k entero>0, ans = A^k=A*A*...*A 1. 5. si k entero <0, A^k= 9. (inv(A))^(-k) si no, A^k se calcula por-->m diagonalización m = 1. 2. 3. 4. 5. 6. k./A matriz de elementos k / aij 7. 8. 9. A.^k matriz de elementos ( aij ) ^ k-->tril(m) ans = 1. 0. 0. k.^A matriz de elementos k ^ 4. 5. 0. ( aij) 7. 8. 9. A.*B matriz de elementos aij * bij-->triu(m) (si dimensiones iguales) ans = 1. 2. 3. A./B matriz de elementos aij / bij 0. 5. 6. (si dimensiones iguales) 0. 0. 9. A.^B matriz de elementos aij ^ bijOperaciones matriciales (si dimensiones iguales)Los operadores aritméticos representan lascorrespondientes operaciones matricialessiempre que tengan sentido. Cuando van
  9. 9. Algunos ejemplos de estas operaciones la -->a a =mostramos a continuación: 1. 2. 3. 4.-->a=[1 2;3 4] a = 1. 2. -->a+y 3. 4. ans = 3. 4.-->det(a) 5. 6. ans = - 2. -->a*y ans =-->a 2. 4. a = 6. 8. 1. 2. 3. 4. -->a^y ans =-->prod(a) 7. 10. ans = 15. 22. 24.-->sum(a) -->a.^y ans = ans = 10. 1. 4. 9. 16.-->b=[-2 -4;-6 -8] b = - 2. - 4. Funciones para operar con - 6. - 8. matrices-->abs(b) ans = 2. 4. Función Descripción 6. 8. sum(A) suma de las componentes de la matriz A-->a a = sum(A,1) es un vector fila (row) 1. 2. conteniendo la suma de sum(a;r) 3. 4. elementos de cada columna de A-->a+a ans = sum(A,2) es un vector columna 2. 4. conteniendo la suma de 6. 8. sum(a;c) elementos de cada fila de A-->a*a trace(A) traza de A : sum(diag(A)) ans = 7. 10. prod(A) producto de las 15. 22. componentes de la matriz A prod(A,1) es un vector fila (row)-->y=2 conteniendo el producto los y = prod(A,r) 2. elementos de cada columna de A prod(A,2) es un vector columna
  10. 10. prod(A,c) conteniendo el producto de Función Descripción elementos de cada fila de A v(i) Si v es un vector es vi max(A) máximo de las componentes de la matriz A A(i,j) Si A es una matriz, es aij max(A,r) máximos de columnas y filas A(k) Si A es una matriz, es el k- max(A,c) respectivamente ésimo elemento de A, en el orden en que está almacenada mean(A) media de las componentes en la memoria (por columnas) de la matriz A medias de mean(A,r) columnas y filas mean(A,c) respectivamente Pero Scilab posee un buen número de facilidades para designar globalmente un norm(v) norma euclídea del vector v conjunto de elementos de una matriz o norm(v,2) vector, consecutivos o no. Algunos ejemplos de ello: norm(v,p) norma-p del vector v: -->A(2:3,1:2) sum(abs(v).^p)^(1/p) // elementos de la fila 2 a la 3 y de las columnas 1 a la 2 norm(v,inf) norma infinito del vector v: -->A(:,2) max(abs(v)) // representa la segunda columna de A norm(v, %inf) -->A(:,2:$) // representa las columnas desde 2 hasta norm(A) máximo autovalor de la la última matriz A norm(A,2) -->A(:) // representa todos los elementos de A, norm(A,1) norma-1 del matriz A: en una sola columna máximo entre las sumas de sus columnas: Interacción con lenguajes de max(sum(abs(A),r)) programación norm(A,inf) norma infinito de la matriz A: Una de las grandes virtudes de Scilab es máximo entre las sumas de brindar la posibilidad de ser utilizado desde norm(A, sus filas: una aplicación desarrollada en lenguajes de %inf) max(sum(abs(A),c)) programación como: Python, Perl, C, C++; cualidad que hace que se pueda reutilizar esta poderosa herramienta desde el desarrollo de nuestras propias aplicaciones.Manipulación de loselementos de una matriz ReferenciasScilab permite una amplia manipulación delos elementos de una matriz, algunos [1] http://www.scilab.org/ejemplos de ello los mostramos acontinuación:
  11. 11. AutoresPilar Castel Diaz Esteban Saavedra LópezCentro de Investigación en Física y Presidente de la Fundación AtixLibre (Bolivia)Matemáticas (ES) Activista de Software Libre en Boliviapilar.castel.diaz@gmail.com jesaavedra@opentelematics.org esteban.saavedra@atixlibre.org http://jesaavedra.opentelematics.org http://www.atixlibre.org

×