Scilab, Funciones en Linea

 

Funciones en Línea (Funcion deff)

En lugar de utilizar los comandos function y endfunctions, para definir funciones, también se puede utilizar la función deff, la cual tiene la siguiente sintaxis:

deff(‘String para la definición de la función’, ‘ string para el cuerpo de la función, ‘string para indicar si esta compilada la función’).

El String para definir la función está integrado por:

‘[out] = Nombre_Función(in)’

El string para el cuerpo de la función está integrado por:

‘out=expresión’

El tercer parámetro puede tomar dos valores ‘c’, si la función esta compilada y ‘n’ si la función no está compilada. Cuando no se coloca el tercer parámetro de la función deff, se toma como valor predeterminado que la función es compilada.

La ventaja de este tipo de función es que puede ser utilizadas para funciones sencillas, sin necesidad de crear un archivo para la función.

Ejemplo:

deff(‘y=funct(x)’, ‘y=x^2+2’)

funct(3.5)

ans=

14.25

Funciones Complejas con Múltiples Líneas

A pesar de que la función deff se utiliza para escribir funciones de forma rápida, pueden escribirse funciones más complejas, que tengan varias líneas de códigos. Para hacer esto se pueden utilizar las siguientes reglas:

· Se utilizan comas para separar instrucciones.

· Se utiliza el punto y coma para separar instrucciones y evitar que se muestren en pantalla resultados preliminares.

Se utilizan dos puntos para indicar la continuación de línea.

A continuación, se muestra un ejemplo del uso de la función deff con múltiples instrucciones.

deff(‘[A, P]=circular(r)’, ‘A=%pi*r^2; ..

P=2*%pi*r; ‘)

[Area, perimetro]=circular(2)

Perimetro =

12.566371

Area =

12.566371

Funciones Llamando a otras Funciones

Una función puede llamar a otras funciones, si estas están disponibles en la sesión de Scilab, ya sea porque ha sido creada o si ha sido cargada utilizando cualquiera de los métodos para ese propósito.

Vamos a crear una función para calcular el área y perímetro de un cuadrado de longitud ‘a’.

deff(‘[Ac, Pc]=cuadrado(a)’, ‘Ac=a^2; ..

Pc=4*a;’)

Ahora vamos a crear una función que va a llamar a lar funciones ya creadas circular( r) y cuadrado(a).

deff(‘[Acirc, Acuad]=figuras(a)’, ..

‘Acirc=circular(a); ..

Acuad=cuadrado(a); ‘)

[circ, cuad] = figuras(2)

cuad =

4.

circ =

12.566371

Scilab, Utilizando Funciones

 

Conceptos Generales

Una función en Scilab es un procedimiento que se utiliza para agrupar un conjunto de pasos dentro de un contenedor, limitado por los comandos function y endfunction. La ventaja de la función es que es reusable, y permite la agrupación de múltiples líneas de instrucciones en un procedimiento, que puede ser llamado con una sola línea con el nombre de los argumentos de salida, el nombre de la función y los argumentos de entrada.

Definiendo Funciones

La sintaxis de una función es la siguiente

function [Salida1, Salida2, ….] = nombre_función(par1, par2, ….)

Instrucción

Instrucción

Salida1= expresión

Salida2 = expresión

endfunction

El encabezado de la función comienza con el comando function, seguido del listado de las variables de salida encerradas entre corchetes y separadas por comas; se coloca un signo de igual, y luego un nombre para la función y entre paréntesis se colocan el listado de variables de entradas (parámetros de entrada), separados por comas.

El cierre de la función consiste en el comando endfunction. Entre los comandos de inicio y de cierre de la función se crea un contenedor de instrucciones, que forman el cuerpo de la función. Dentro del cuerpo de la función se colocan instrucciones para calcular las variables de salidas. Deben colocarse instrucciones donde se le asignen valores a estas variables.

En la siguiente figura se muestra la estructura general de una función

clip_image002

Los parámetros de entrada se introducen en el lado derecho de la ecuación y los parámetros de salida se colocan en el lado izquierdo de la ecuación, estos van encerrados entre corchetes y separados por coma.

La función más sencilla en Scilab tiene un solo parámetro de entrada y un solo parámetro de salida. En este caso el único parámetro de salida puede colocarse sin corchetes.

function y = f(x)

Cuerpo de la función

y= expresión

endfunction

Como ejemplo podemos construir una función que calcule la siguiente función de un polinomio segundo grado: f(x)=x2 + 3x +25

function y = f(x)

y= x2 + 3x +25

endfunction

Para utilizar esta función solamente tendríamos que ingresar el nombre de la función y el argumento de entrada entre paréntesis.

f(2)

ans=

35

Una función con dos parámetros de salida se muestra a continuación.

function [A, Peri] = circ(r)

A=%pi*r^2

Peri=2*%pi*r

endfunction

Esta función tiene dos parámetros de salida, A y Peri; y tiene un solo parámetro de entrada, r. El nombre de la función es circ.

Para hacer uso de esta función debemos introducir los argumentos de salida y los argumentos de entrada de la función. Es de resaltar que los nombres de los argumentos no tienen que ser iguales a los de los parámetros utilizados cuando se creó la función.

[Area, Perimetro] = circ(3)

Perimetro =

18.849556

Area=

28.274334

Aquí se observa que el orden en que se muestran las variables de salida, primero se muestra la última variable de la lista, y continua en orden inverso hasta la primera variable de la lista. También se observa que los argumentos tienen nombres diferentes a los parámetros:

Area (argumento) y A (parámetro de la función)

Perimetro (argumento) y Peri (parámetro de la función)

Si no se coloca un listado de argumentos, solo se mostrará el resultado de la variable correspondiente al primer parámetro definido en la lista de parámetros de salida de la función.

Por ejemplo

circ(3)  \\da como resultado

ans =

28.274334

Que corresponde con el parámetro A, que es el primero en la lista de parámetros de la función.

Formas de Definir una Función

Existen al menos tres formas de definir una función

1. Introducir la función en la ventana de la consola

2. Copiar la función de un archivo a la consola.

3. Creando un archivo con extensión sce. Importarlo desde la consola con el comando exec.

4. Introducir la función en la ventana del editor de Scilab (Sci-notes).

Introducir Función en la Consola

Una de las formas de crear una función es introducirla directamente en la consola, en forma interactiva. Una vez se ha introducido el comando function y se han definido los parámetros de salida, el nombre de la función y los parámetros de entrada y se da enter, Scilab reconoce que se introducirá una función y creará una nueva línea para introducir las instrucciones del cuerpo de la función cada vez que se da enter. Cuando se introduce el comando endfunction, Scilab sale del modo de ingreso de función y regresa al modo normal de edición de Scilab.

Esta forma de introducir tiene la desventaja de que al cerrar la sesión de trabajo la función se perderá, aunque puede guardarse la sesión y abrirse para utilizar la función que ha sido guardada en la sesión.

Este método es adecuado si la función no es muy complicada y solo tiene pocas líneas de código, una función de cuando máximo unas 5 o 6 líneas que puede ser construida rápidamente sobre la marcha.

Copiar la función de un archivo a la consola

Si tenemos un archivo de texto, en lugar de teclear la función directamente en la consola, podemos copiarla del archivo de texto y pegarla en la consola. La función se comportará como si la hubiésemos ingresado directamente en la consola.

En la siguiente figura se muestra una función que ha sido creada en el editor de texto (Bloc de notas).

clip_image004

Utilizando un simple editor de texto podemos crear funciones que podemos guardar como archivos txt, y luego abrirlos para copiarlos en la consola, esta es una mejora con respecto a teclear las instrucciones de la función directamente en la consola. Podemos crear funciones más complejas con mayor número de líneas y copiarlas desde el archivo a la consola.

Utilizando el comando exec para importar un archivo con extensión sce

En lugar de copiar de un archivo de texto a la consola existe una mejor alternativa. El archivo con la función o funciones se guardan con la extensión sce y posteriormente se importan a la consola con el comando exec.

La sintaxis es:

exec(“Dirección al archivo sce”)

clip_image006

Al procesarse el comando exec hace que se ejecute el contenido del archivo a la consola, como si hubiesen sido tecleados directamente en la consola. Si el archivo contiene muchas líneas de instrucciones se mostrarán en la consola, si no se desea que todo del contenido del archivo se muestre se puede utilizar el comando punto y coma (;) para que no se muestre.

exec(“C:\Users\Luis\Documents\EjemplosFuncion.sce”);

Introducir la función en la ventana del editor de Scilab (Sci-notes)

En lugar de introducir la función en la consola, se puede ingresar en la ventana del editor de Scilab, y de allí se puede guardar como un archivo con extensión sci o sce. Luego se ejecuta y es el equivalente del comando exec. El archivo de la función se cargará a la consola y se podrá utilizar como cualquier función.

clip_image008

Es una mejor alternativa para ingresar una función que crear la función en un editor de texto, ya que permite utilizar las facilidades edición y de auto completación que tiene el editor de Scilab.

Scilab, Función Potencial

Una función potencial es una función del tipo:

clip_image001

Son ejemplos las siguientes funciones:

clip_image002

La grafica de la función f(x)=x2 se muestra en la siguiente figura

clip_image004

En Scilab se manejan escalares, vectores y matrices, como si fuesen matrices. Existen dos tipos de operaciones para la potenciación: Potenciación ( ^ y **) y Potenciación elemento por elemento ( .^ ).

Se presentan varios casos de la potenciación, dependiendo de si la base es un escalar o un vector o una matriz.

T = A ** b

T = A ^ b

T = A .^ b ( potenciación elemento por elemento)

Caso 1

A es un escalar y b es un escalar, el resultado T es un escalar.

scilab potenciacion 2

 

Caso 2

A es un vector y b es un escalar. El resultado es un vector donde cada elemento del vector esta elevado al escalar b. Es una operación de potenciación elemento por elemento.

clip_image008

Caso 3a

A es una matriz cuadrada y b es un escalar. Si la operación es de potenciación, el resultado es una matriz derivada de hacer la operación: A*A*A, b veces. A^4= A*A*A*A.

clip_image010

Caso 3b

A es una matriz cuadrada y b es un escalar. Si la operación es de potenciación elemento por elemento, el resultado es una matriz T, donde cada elemento resulta de elevar cada elemento de la matriz A a la potencia b.

clip_image012

Caso 4

Si A es un escalar y b es una matriz entonces el resultado T= A^b es una matriz donde cada elemento es igual a A^(b(i,j)).

clip_image014

Caso 5

Si A y b son matrices (o vectores) del mismo tamaño, entonces la matriz o el vector T resultado de la potenciación elemento por elemento es igual a A(i,j)^b(i,j). La potenciación como tal no está definida en este caso, solo la potenciación elemento por elemento.

clip_image016

Funciones en Scilab y la Ventana de Ayuda

Scilab proporciona una extensa librería interna de funciones matemáticas, las cuales son definidas Funciones Elementales (Elementary Functions). La librería de funciones está dividida en varias secciones:

Operaciones con Bits (Bitwise operations)

Complejos (Complex)

Matemáticas Discreta (Discrete Mathematics)

Matrices elementales (Elementary Matrices)

Logaritmos – Exponenciales – Potencias (Log-exp-power)

Punto flotante (Floting point)

Conversión de Radix (Radix conversios)

Manipulación de matrices (Matrix manipulation)

Operaciones con matrices (Matrix operations)

Operaciones con conjuntos (Set operations)

Procesamiento de señales (Signal Processing)

Operaciones simbólicas (Symbolic)

Trigonometría (Trigonometry)

Para acceder a la ayuda y ver la sintaxis de estas funciones hay que hacer clic en el icono con signo de interrogación que aparece en la barra de menú

clip_image002

También se puede hacer clic en la pestaña con el signo de interrogación y seleccionar la opción Scilab Help o con la tecla F1. Al utilizar cualquiera de estas opciones aparecerá una ventana de ayuda (Help Browser), la cual en el lado izquierdo muestra un explorador de temas de ayuda, y en la parte derecha una ventana donde aparece la ayuda sobre el tema seleccionado.

clip_image004

Si queremos investigar sobre cuales funciones están disponibles para cada una de las secciones definidas bajo las funciones elementales podemos hacer clic en el símbolo +, al lado de cada carpeta, para expandir su contenido. Se puede seleccionar cualquiera de las funciones y aparecerá en la ventana de la derecha la descripción de la función y su sintaxis.

clip_image006

En la figura se muestra como se ha expandido la carpeta correspondiente a las funciones logarítmica, exponencial y potencias, y se ha seleccionado la función exp, de la cual se muestra su descripción y sintaxis en la ventana de la derecha.

Son tantas las funciones que proporciona Scilab, que no nos detendremos a la discusión de cada una de ellas, el usuario interesado en cualquiera de ellas puede revisar la descripción y sintaxis de las funciones en la ventana de ayuda. Scilab también proporciona una facilidad de auto completación , la cual se activa al escribir las primeras letras de un comando o función y presionando la tecla Tab. Aparecerá un menú contextual con una lista de comandos y funciones que contienen los caracteres que hayamos ingresado.

clip_image008

Por ejemplo, si escribimos exp y presionamos la tecla tab, aparecerá el listado de funciones y comandos que se muestran en la figura, seleccionamos la función deseada y damos enter o hacemos doble clic y la función o comando será ingresada en la línea del editor de Scilab.

La mayoría de las funciones matemáticas se aplican tanto a nivel de escalar, vectores y matrices, cuando se aplican a nivel de vectores y matrices se utilizan a un nivel de elemento por elemento. Esto significa que, si tenemos una variable que almacena un solo valor y aplicamos la función exp, esta calculara el valor de la función exponencial de ese valor. En cambio, si tenemos una matriz se calculará el valor de la función exp para cada uno de los elementos de la matriz (element-wise operation).

clip_image010

Función linsolve en Scilab

En el artículo del 5 de octubre de 2016 habíamos tratado la solución de ecuaciones lineales simultaneas utilizando el álgebra lineal, donde teníamos un sistema de n ecuaciones con n incógnitas y queríamos encontrar el vector X de las incógnitas. Habíamos mostrado un ejemplo de un sistema de 3 ecuaciones con tres incógnitas.

Se había definido el sistema en función de los siguientes elementos:

Una matriz de coeficientes, que estamos denominando A.

Un vector de incógnitas, denominado X.

Un vector de constantes, denominado b.

A*X = b

En esa oportunidad habíamos conseguido una expresión para resolver el valor del vector X mediante la operación de división izquierda.

X = A\b

Otra forma de resolver el vector X es utilizando la función linsolve, la cual resuelve una ecuación de la forma:

A*X + B = 0

donde:

X = linsolve(A,B)

Hay que tomar en consideración que el signo de los valores del vector B que se utiliza con la función linsolve son el negativo de los valores del vector b utilizados cuando se utiliza la división izquierda. La razón es que para resolver linsolve se está pasando el vector del lado derecho de la ecuación al lado izquierdo de la ecuación.

A*X=b

A*X + (-b) = 0

A*X + B = 0

Donde B = -b

clip_image002

A continuación, se muestran los resultados de este sistema de ecuaciones utilizando ambos métodos: división izquierda y función linsolve.

clip_image004

Es de resaltar el hecho que el signo de los vectores b, utilizado en la operación de división izquierda y el signo del vector B utilizado con la función linsolve son de signo contrario: B = -b

Scilab: Seleccionando elementos de una matriz

 

Los elementos dentro de una matriz tienen dos coordenadas, número de fila y número de columna, así que cualquier elemento puede ser llamado si se conocen estos dos valores.

clip_image002

Así, si queremos seleccionar un solo elemento de esta matriz podemos hacerlo de la siguiente manera:

A(4, 1)

ans= 8, elemento en la fila 4, columna 1.

A(1, 4)

ans= 3, elemento en la fila 1, columna 4.

clip_image004

La Función Size

La función Size se utiliza para definir la forma de una matriz, es decir, las dimensiones de la matriz: número de filas y número de columnas.

[nf, nc] = size(A)

También puede utilizarse la siguiente sintaxis para la función size:

Número = size( A, sel=valor)

Donde sel puede tomar los siguientes valores

Sel= 1 o sel =”r” devuelve el número de filas de la matriz

Sel= 2 o sel =”c” devuelve el número de columnas de la matriz

Sel= * o sel =”r” devuelve el número de elementos de la matriz (número de filas por el número de columnas)

Las comillas utilizadas pueden ser sencillas o dobles.

Ejemplos:

Size( A, sel=1), también se puede utilizar size( A, ‘r’) para obtener el número de filas de la matriz A.

ans = 4

Size( A, sel=2), también se puede utilizar size( A, ‘c’) para obtener el número de columnas de la ,matriz A.

ans = 4

Size (A, ‘*’) para obtener el número de elementos de la matriz A

ans = 16

Seleccionando Sectores y Vectores de Matrices Utilizando el Operador Dos puntos ( : ).

Los dos puntos se utilizan para crear un rango de valores para crear un vector de valores. La sintaxis es:

Vector = i: s : j

Donde i es el valor inicial del rango, s es el incremento y j es el valor final

Vector = i, i+s, i+ 2s, i + 3s…..i +ns

Donde n es el número entero mayor tal que i + ns <= j

Si se omite el valor de s, toma el valor predeterminado de 1.

Vector = 1 : 2 : 12

Vector = 1, 3, 5, 7, 9, 11

Con esta notación vectorial podemos extraer un rango de elementos de una matriz:

clip_image006

A continuación, algunos ejemplos del uso del operador dos puntos para seleccionar rangos de una matriz.

clip_image008

Scilab, Solución de Ecuaciones lineales Simultaneas

Los sistemas de ecuaciones lineales simultaneas consisten en un conjunto de dos o más ecuaciones, con igual número de incógnitas, por ejemplo, para resolver un sistema de dos incógnitas se requiere un sistema con dos ecuaciones linealmente independientes. Para resolver un sistema de tres incógnitas se requiere un sistema con tres ecuaciones y así para cualquier otro número de incógnitas.

Existen diversos métodos para resolver sistemas lineales de ecuaciones, entre ellos tenemos el método de Cramer, el método de Gauss, el método de Gauss Jordán y los métodos numéricos.

En este artículo trataremos el método de matrices y utilizaremos la facilidad que ofrece Scilab para resolver este tipo de problemas.

A continuación, mostramos un sistema de ecuaciones lineales de 3 incógnitas, y como podemos representar el sistema utilizando la notación de matrices.

Creamos la matriz de los coeficientes de las incógnitas y la denominamos matriz A, en este caso es una matriz de 3 x 3. Creamos un vector X, con las incógnitas de dimensión 3 x 1. Y finalmente el vector B, con el valor de las constantes, que se encuentran en el lado derecho de las ecuaciones, este vector también es de dimensión 3 x 1.

clip_image002

Ahora lo que queremos es resolver la ecuación A * X = B y obtener el valor del vector X.

A * X = B

A-1 *A * X = A-1 * B

Recordemos que A-1 *A = I (la matriz identidad) y que

A-1 * B = A\B es la división izquierda.

X = A\B

Así que la solución en Scilab de un sistema de ecuaciones lineales se reduce a crear la matriz A de coeficientes y la matriz B de constantes y hacer la operación de división izquierda.

clip_image004