25
TUTORIAL BÁSICO DE SCILAB ¿Qué es Scilab? Scilab fue desarrollado para aplicaciones de control de sistemas y procesamiento de señales. Es un formato de código distribuido libremente. Scilab fue creado con tres partes distintas: un interpretador, librerías de funciones (procedimientos Scilab) y librerías de Fortran y C. Uno de los conceptos básicos de la sintaxis Scilab es su habilidad de manejar matrices: con manipulaciones básicas como concatenación, extracción o transposición que son llevadas a cabo inmediatamente tan bien como las operaciones básicas como suma y multiplicación. Scilab también maneja objetos más complejos que matrices numéricas. Por ejemplo, para aplicaciones de control se requiere manipular matrices racionales o polinomiales. Esto es hecho en Scilab manipulando listas y escribiéndolas, lo que permite una representación simbólica natural de objetos matemáticos complicados como funciones de transferencia. Scilab provee una variedad de poderosas funciones para el análisis de sistemas no lineales. La integración de modelos dinámicos explícitos a implícitos puede ser llevada a cabo numéricamente. La barra de herramientas scicos permite una definición gráfica y simulación de sistemas híbridos interconectados. Existen facilidades de optimización numérica para la optimización no lineal (incluyendo optimización no diferencial), optimización cuadrática y lineal. Scilab tiene una programación ambiental abierta en donde la creación de funciones y librerías de funciones están completamente en las manos del usuario. Las funciones son reconocidas como objetos de datos in Scilab y pueden ser manipulados o creados como otros objetos de información. Por ejemplo, funciones pueden ser definidas en Scilab y pasadas como una entrada o salida de argumentos de otras funciones. Además, Scilab acepta caracteres que permiten la creación de funciones en línea. Las matrices de caracteres también son manupiladas como matrices ordinarias. Finalmente, Scilab es fácilmente interfasado con Fortan o programas de C. Esto permite utilizar paquetes estandarizados y librerías en el ambiente de Scilab. La filosofía general de Scilab es proveer el siguiente tipo de ambiente computacional: x Tener tipos de datos que sean variables y flexibles con una sintaxis natural y fácil de usar. x Proveer un set razonable de funciones que sirva como base para una extensa variedad de cálculos. x Tener un ambiente abierto de programación en donde nuevas funciones puedan ser adheridas. El objetivo de este tutorial es dar al usuario una introducción a los comandos y estructuras básica de Scilab para que empiece a utilizarlo. Para información o

Tutorial Scilab

Embed Size (px)

Citation preview

TUTORIAL BÁSICO DE SCILAB

¿Qué es Scilab?Scilab fue desarrollado para aplicaciones de control de sistemas y procesamiento deseñales. Es un formato de código distribuido libremente. Scilab fue creado con trespartes distintas: un interpretador, librerías de funciones (procedimientos Scilab) ylibrerías de Fortran y C.

Uno de los conceptos básicos de la sintaxis Scilab es su habilidad de manejarmatrices: con manipulaciones básicas como concatenación, extracción otransposición que son llevadas a cabo inmediatamente tan bien como lasoperaciones básicas como suma y multiplicación. Scilab también maneja objetosmás complejos que matrices numéricas. Por ejemplo, para aplicaciones de controlse requiere manipular matrices racionales o polinomiales. Esto es hecho en Scilabmanipulando listas y escribiéndolas, lo que permite una representación simbólicanatural de objetos matemáticos complicados como funciones de transferencia.

Scilab provee una variedad de poderosas funciones para el análisis de sistemas nolineales. La integración de modelos dinámicos explícitos a implícitos puede serllevada a cabo numéricamente. La barra de herramientas scicos permite unadefinición gráfica y simulación de sistemas híbridos interconectados. Existenfacilidades de optimización numérica para la optimización no lineal (incluyendooptimización no diferencial), optimización cuadrática y lineal.

Scilab tiene una programación ambiental abierta en donde la creación de funciones ylibrerías de funciones están completamente en las manos del usuario. Las funcionesson reconocidas como objetos de datos in Scilab y pueden ser manipulados ocreados como otros objetos de información. Por ejemplo, funciones pueden serdefinidas en Scilab y pasadas como una entrada o salida de argumentos de otrasfunciones. Además, Scilab acepta caracteres que permiten la creación de funcionesen línea. Las matrices de caracteres también son manupiladas como matricesordinarias.

Finalmente, Scilab es fácilmente interfasado con Fortan o programas de C. Estopermite utilizar paquetes estandarizados y librerías en el ambiente de Scilab.

La filosofía general de Scilab es proveer el siguiente tipo de ambiente computacional: Tener tipos de datos que sean variables y flexibles con una sintaxis natural y

fácil de usar. Proveer un set razonable de funciones que sirva como base para una extensa

variedad de cálculos. Tener un ambiente abierto de programación en donde nuevas funciones

puedan ser adheridas.

El objetivo de este tutorial es dar al usuario una introducción a los comandos yestructuras básica de Scilab para que empiece a utilizarlo. Para información o

tutoriales en temas especializados como control, existen varios tutoriales ydocumentos accesibles por internet.

Instalación de Scilab en Windows.Puede obtenerse una versión lista para instalar, con interface gráfica, de la siguientedirección:

http://www.scilab.org/download/

Para MS Windows, baja e instala la versión:

scilab-4.1.2 installer for binary version

El instalador te generará un enlace con el símbolo de Scilab en tu escritorio, con elque podrás ejecutarlo.

Introducción a la línea de comandos.Al ejecutar Scilab, se abre una ventana con un indicador a la línea de comandos,indicada por “-->”. A continuación se presentarán algunos comandos simples. Todoslos comandos son interpretados.

Scilab hace diferencia entre minúsculas y mayúsculas. El carácter “;” después decada comando le indica a Scilab NO desplegar el resultado en la línea de comandos:

-->a=1;-->A=2;-->a+Aans =3.

Pueden escribirse varios comandos en una línea, separados por “;”. Sin embargo, espreferible por claridad escribir un comando por línea. Se pueden escribir comentariosutilizando la combinación de caracteres “//”:

-->//Dos comandos en la misma línea-->c=[1 2];b=1.5b =1.5

Puede escribirse un comando en varias líneas, utilizando la combinación de símbolos“…”. Esto es útil para fórmulas muy largas. No está permitido “cortar” el nombre deuna variable o función en dos líneas.

-->//Un comando en diferentes líneas-->u=1000000*(a*sin(A))ˆ2+...

--> 2000000*a*b*sin(A)*cos(A)+...--> 1000000*(b*cos(A))ˆ2u =81268.994

Podemos obtener una lista de las variable existentes con el comando “who”:

-->whoyour variables are...

u A b a scicos_pal %scicos_menu %scicos_short%scicos_help

%scicos_display_mode modelica_libs scicos_pal_libs%scicos_lhb_list %CmenuTypeOneVector %helps WSCI home SCIHOME CreateScilabHomeDir PWD TMPDIRMSDOS SCI guilib sparselib

xdesslib percentlib polylib intlib elemlib utillib statslib alglib sigliboptlib autolib roblib soundlib metalib armalib tkscilib tdcslib s2flib mtlblib %F %T %z%s %nan %inf COMPILER %gtk %gui %pvm %tk $ %t %f %eps%io %i %e

using 31767 elements out of 5000000. and 62 variables out of 9231

your global variables are...

LANGUAGE %helps demolist %browsehelp LCC %toolboxes%toolboxes_dir using 1165 elements out of 11000. and 7 variables out of 767

Observa que obtenemos la lista de las variables previamente definidas por nosotros,“u a b A” junto con un ambiente inicial compuesto de diferentes librerías y algunasvariables especificas “permanentes”.

Tipos de Datos

Constantes predefinidas.Scilab provee como constantes predefinidas %i, %pi, %e, y %eps. La constante %irepresenta 1 , %pi es = 3.1415927…, %e es l número de Euler e=2.7182818... y%eps es una constante que representa la precisión de la máquina (%eps es elnumero más grande para el que 1+%eps=1). %inf y %nan son para “Infinito” y“NounNumero” respectivamente. Otras constantes son %t y %f que son para“verdadero (trae)” y “falso (false)” respectivamente.

Estas constantes están protegidas y no pueden ser borradas ni modificadas por elusuario.

Escalares y Matrices

La estructura fundamental en Scilab son las matrices, como se verá a continuación.Pero antes es necesario definir que es un escalar para Scilab.

Escalares.Los escalares son números reales o complejos. Los valores de los escalares puedenser asignados a nombres de variable escogidos por el usuario.

--> a=5+2*%ia =5. + 2.i--> B=-2+%i;

--> b=4-3*%ib =4. - 3.i--> a*bans =26. - 7.i-->a*Bans =- 12. + i

Observa que Scilab evalúa inmediatamente líneas que terminan con espacio. Lasinstrucciones que terminan con punto y coma son evaluadas pero no se desplieganen pantalla.

Matrices.Las matrices son la estructura fundamental en Scilab. Una matriz es un arreglorectangular donde cada elemento puede localizarse con don índices, el número derenglón y el número de columna. Conocer el manejo de matrices es fundamentalpara el uso eficiente de Scilab.

Creación de una matriz.La forma más fácil para crear una matriz es especificando directamente suselementos. Observa que los elementos de cada renglón pueden separarse conespacios o con comas, y para indicar un nuevo renglón se utiliza el punto y coma.Los elementos deben especificarse dentro de paréntesis cuadrados.

-->A = [1 2 4; 5 7 9] A =

1. 2. 4. 5. 7. 9.

-->B = [2,7;5,1] B =

2. 7. 5. 1.

Una matriz también puede especificarse sobre varias líneas:

-->C=[1 2 3 5;-->2 8 9 3] C =

1. 2. 3. 5. 2. 8. 9. 3.

Extracción de rangos de matrices.La extracción de rangos de matrices o submatrices es una de la operaciones masimportantes para la programación eficiente en Scilab. Veamos algunos ejemplos:

-->A = [1.5,2,7,9.2,8.3-->2.7,5.2,3,1,8-->1,2,3,4,5] A =

1.5 2. 7. 9.2 8.3 2.7 5.2 3. 1. 8. 1. 2. 3. 4. 5.

Definimos una matriz de 3 renglones por 5 columnas. Si queremos extraer elelemento correspondiente al primer renglón, segunda columna, utilizamos:

-->A(1,2) ans =

2.

Observa que para acceder a los elementos de una matriz se utilizan paréntesisnormales, no cuadrados!

Para extraer todos los elementos de la primera columna utilizamos:

-->A(:,1) ans =

1.5 2.7 1.

Observa como el símbolo “:” se utiliza en la posición correspondiente al índice delrenglón, y un uno en la posición correspondiente al índice de la columna. Estecomando puede leerse como:

“Regresa los elementos correspondientes a todos los renglones, primera columna”.

Observa como el resultado es una matriz de tres renglones por una columna, o 3 X1.

Para extraer los elementos del tercer renglón utilizamos:

-->A(3,:) ans =

1. 2. 3. 4. 5.

En este caso, el resultado es una matriz de un renglón por tres columnas, o 1 X 3,como es de esperarse.

También podemos extraer submatrices definidas por rangos de renglones ycolumnas, por ejemplo:

-->A(2:3,1:2) ans =

2.7 5.2 1. 2.

Este comando podemos leerlo como: “regresa la submatriz formada por loselementos correspondientes desde el segundo renglón hasta el tercer renglón, ydesde la primera columna hasta la tercera columna.

Formación de matrices a partir de otras matrices.Podemos “componer” matrices a partir de otras matrices, mientras las dimensionessean congruentes. Por ejemplo:

-->A = [ 1 2 3; 5 7 9; 2 8 7] A =

1. 2. 3. 5. 7. 9. 2. 8. 7.

-->B = [ 1; 5; 9] B =

1. 5. 9.

-->C = [A B] C =

1. 2. 3. 1. 5. 7. 9. 5. 2. 8. 7. 9.

Observa que A y B tienen que tener el mismo número de renglones para poder haceresta composición.

Como ejercicio, explica como se forma la siguiente matriz compuesta:

-->D = [C; [A(3,:) B(2,1)]] D =

1. 2. 3. 1. 5. 7. 9. 5. 2. 8. 7. 9. 2. 8. 7. 5.

Matrices especiales.Scilab tiene varios comandos para generar algunas matrices especiales de usocomún. Observa los siguientes ejemplos:

Generación de una matriz con todos sus elementos igual a uno:

-->C = ones(4,3) C =

1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

Generación de una matriz con todos sus elementos igual a zero:

-->D = zeros(4,3) D =

0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

Generación de una matriz cuadrada con unos en su diagonal principal y ceros fuerade ella:

-->E=eye(5,5) E =

1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1.

Generación de una matriz cuadrada con los elementos de la diagonal especificados,y ceros fuera de la diagonal principal:

-->D = diag( [2 1 0 -1 -2] ) D =

2. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. - 1. 0. 0. 0. 0. 0. – 2.

Generación de una matriz cuadrada con los elementos en la diagonal debajo de ladiagonal principal especificados:

-->L = diag( [1 2 3 4], -1 ) L =

0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 2. 0. 0. 0. 0. 0. 3. 0. 0. 0. 0. 0. 4. 0.

Generación de una matriz con números aleatorios entre 0 y 1:

-->R = rand(3,2) R =

0.2922267 0.3321719 0.5664249 0.5935095 0.4826472 0.5015342

Operaciones con matrices

Transpuesta de una matriz.La transpuesta de una matriz (intercambiar renglones y columnas) se obtieneutilizando el símbolo de comilla simple, por ejemplo:

-->A = [ 1 3 8; 5 2 7] A =

1. 3. 8. 5. 2. 7.

-->B = A' B =

1. 5. 3. 2. 8. 7.

Multiplicación por un escalar.Una matriz puede multiplicarse por un escalar utilizando el símbolo “*”. Todos loselementos de la matriz se multiplican por el escalar, por ejemplo:

--> B = [2, 5, 9; 3, 7, 4] B =

2. 5. 9. 3. 7. 4.

-->C = 2*B C =

4. 10. 18. 6. 14. 8.

Suma y resta de matrices.Para que dos matrices puedan sumarse o restarse, tienen que ser del mismo orden.La suma y resta se hacen elemento a elemento correspondiente.

-->A = [2, 3; 5,1; 7,9] A =

2. 3. 5. 1. 7. 9.

-->B = [8,25; 2,37; 5,7] B =

8. 25. 2. 37. 5. 7.

-->C=A+B C =

10. 28. 7. 38. 12. 16.

-->D=A-B D =

- 6. - 22. 3. - 36. 2. 2.

Multiplicación de matrices.La multiplicación de matrices se representa con el símbolo “*”. Recuerda que paraque dos matrices puedan multiplicarse, deben ser conformes (el número decolumnas de la primera matriz tiene que ser igual al número de columnas de lasegunda matriz), y que la multiplicación de matrices no es conmutativa. El resultadotiene el mismo número de renglones que la primera matriz, y el mismo número derenglones que la segunda.

->F = [2, 5, 9; 1, 7, 2] F =

2. 5. 9. 1. 7. 2.

-->G = [0, 5; 10 29; 7 21] G =

0. 5. 10. 29. 7. 21.

-->H=F*G H =

113. 344. 84. 250.

Multiplicación de matrices elemento a elemento.Esta es una operación que NO ESTA DEFINIDA dentro del álgebra matricial, peroque es muy útil en la solución de algunos tipos de problemas con matrices. Se defineen Scilab como la multiplicación de los elementos correspondientes de dos matrices,y se representa con la secuencia de símbolos punto y asterisco: “.*”. Observa que lasmatrices tienen que ser del mismo orden, y que obviamente es conmutativa.

-->A = [1 5 3; 2 7 8; 3 5 4; 0 2 9] A =

1. 5. 3. 2. 7. 8. 3. 5. 4. 0. 2. 9.

-->B = [0 0 25; 7 1 2; 2 1 3; 7 2 1] B =

0. 0. 25. 7. 1. 2. 2. 1. 3. 7. 2. 1.

-->C = A .* B C =

0. 0. 75. 14. 7. 16. 6. 5. 12. 0. 4. 9.

-->D = B .* A D =

0. 0. 75. 14. 7. 16. 6. 5. 12. 0. 4. 9.

Vectores.Un caso especial muy importante de matrices en Scilab son los vectores, que semanejan como una matriz de un solo renglón (vector renglón) o de una sola columna(vector columna). Los elementos de un vector pueden accederse utilizando solo uníndice. Observa los siguientes ejemplos:

-->X = [1 5 7 9]' // Vector columna

X =

1. 5. 7. 9.

-->X(3) ans =

7.

-->Y = [2 4 6 8] // Vector renglón Y =

2. 4. 6. 8.

-->Y(4) ans =

8.

Vectores con componentes equiespaciados.Los vectores equiespaciados se utilizan frecuentemente para evaluar funciones, porlo que Scilab provee una forma muy conveniente de formarlos. Por ejemplo, paraformar un vector con elementos del 0 al 10 en intervalos de 1 podemos usar:

-->X=0:10 X =

0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Si queremos que es espaciamiento entre los elementos sea de 0.5, introducimos elcomando:

X = column 1 to 20

0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8.8.5 9. 9.5

column 21

10.

El siguiente comando genera un vector columna de 2 a 3 con espaciamientos de=0.2:

-->Y=(2:0.2:3)' Y =

2. 2.2 2.4 2.6 2.8 3.

Funciones en Scilab

Las funciones son otro de los componentes fundamentales de Scilab. Existen cientosde funciones predefinidas, y el usuario puede definir sus propias funcionesfácilmente.

Por ejemplo, algunas de las mas utilizadas son: log(), sin(), cos(), tan(), asin, acos,atan, exp(), abs(), sqrt().

Algo muy importante que debes recordar es que la mayoría de las funcionesmatemáticas en Scilab aplican tanto a número reales como complejos.

Ejemplos:

-->sin(0.5) ans =

0.4794255

-->c=sqrt(-9) c =

3.i

-->exp(-3.2) ans =

0.0407622

-->log(10) ans =

2.3025851

Observa que en el último ejemplo, la función “log()” obtiene el logaritmo natural de unnúmero.

Puede encontrarse información sobre lo que hace una función con el comando help,por ejemplo:-->help logAbre una página con documentación de esta función:

Last update : April 1993

log - natural logarithm

Calling Sequencey=log(x)

Parameters

x : constant vector or constant matrix

Description

log(x) is the "element-wise" logarithm. y(i,j)=log(x(i,j)) . For matrix logarithm seelogm .

Examples

exp(log([1,%i,-1,-%i]))

See Also

exp , logm , ieee ,

Aplicación de funciones a los elementos de una matriz.

Una característica distintiva de paquetes como Scilab, Matlab, y Octave, es que esmuy fácil aplicar una función escalar a todos los elementos de una matriz. Basta conpasar la matriz como argumento a la función. Esto se ve claramente en el siguienteejemplo:

-->A = [ 9 16; 25 36] A =

9. 16. 25. 36.

-->B = sqrt(A) B =

3. 4. 5. 6.

Observa como se aplicó la función “sqrt()”, raíz cuadrada, a cada elemento de lamatriz A.

Funciones especiales para matrices.Existen varias funciones definidas especialmente para matrices. Algunas de las masútiles son:

Determinante de una matriz.El determinante de una matriz cuadrada se obtiene utilizando la función inv.

-->A = [1 7 9; 2 5 4; 3 2 8] A =

1. 7. 9. 2. 5. 4. 3. 2. 8.

-->det(A) ans =

- 95.

Número de condición de una matriz.El número de condición de una matriz es un escalar positivo. Si el número es muycercano a cero, la matriz es mal condicionada, y el cálculo de la inversa puede sererróneo por errores de redondeo. El número de condición es una medida masconfiable que el determinante para evaluar la importancia de lo errores de redondeo.Se obtiene con la función “cond()”. Por ejemplo, para la matriz anterior:

-->cond(A) ans =

9.1383552

La matriz está bien condicionada y el cálculo de la inversa es confiable.

Inversa de una matriz.La inversa de una matriz cuadrada (si existe y la matriz es bien condicionada) pudeobtenerse con la función “inv()”. Para la matriz del ejemplo anterior:

-->inv(A) ans =

- 0.3368421 0.4 0.1789474 0.0421053 0.2 - 0.1473684 0.1157895 - 0.2 0.0947368

Observa que en este caso, la función regresa una matriz.

En Scilab, una función pude regresar una matriz o un vector. Tmbién pude regresarmas de un resultado. Un ejemplo muy útil es la función “size()”, que nos sirve paradeterminar el orden de una matriz. Observa los siguientes ejemplos:

B =

1. 7. 9. 2. 5. 4. 3. 2. 8. 5. 3. 2.

-->size(B) ans =

4. 3.

-->[reng,cols]=size(B)

cols =

3. reng =

4.

Definición de Funciones por el Usuario

Es posible definir funciones directamente en la línea de comandos de Scilab, pero esmas recomendable hacerlo abriendo el editor en la barra de opciones (recuerda quepuedes guardar el archivo creado con tus funciones para reutilizarlo). Veamos unejemplo para crear una función que obtenga la raíz cúbica de un número.

function r = cubica(x)// Funcion para calcular la raiz cubica

r = exp(1.0/3.0 * log(x));endfunction

Una vez creada nuestra función, la “cargamos” a Scilab con la opción “Load intoScilab” dentro de “Execute” en el editor. La función esta lista para usarse:

-->cubica(27) ans =

3.

-->A = [27 8 64] A =

27. 8. 64.

-->cubica(A) ans =

3. 2. 4.

Observa que si utilizamos nuesta función con una matriz, ¡la aplica a cada uno de loselementos de ésta!

Vamos a analizar uno por uno los elementos de nuestra función:

function r = cubica(x)

Este es el encabezado de nuestra función. La palabra reservada “function” indicaque se esta declarando una función. La vairable “r” es representa la salida o

resultado de la función, en este caso tenemos un escalar. El nombre puede sercualquier nombre válido. El signo igual se utiliza para indicar la asignación denuestra función. La palabra “cubica” es el nombre con el cual vamos a llamar nuestrafunción. Puede ser cualquier nombre válido. El parámetro “x” representa elargumento de nuestra función. Una función puede tener mas de un argumento.

// Funcion para calcular la raiz cúbica

Esta línea es un comentario. Es importante incluir comentarios para facilitar el uso dela función. Además este comentario aparecerá automáticamente en ladocumentación de la función si se busca con el comando ”help cubica”. No debenincluirse caracteres especiales en el comentario, como acentos, ya que ladocumentación automática no los permite.

r = exp(1.0/3.0 * log(x));

Esta línea asigna a la variable de salida el valor de la raíz cúbica de lo que se lepase a la función como argumento. Es necesario que en alguna parte de nuestrafunción se le asigne valor a la variable o variables de salida.

endfunction

Esta línea señala el final de la declaración de la función.

Enseguida vamos a declarar una función que reciba como parámetro el radio de uncírculo, y regrese el valor del perímetro y del área.

function [p,a] = circulo(r)// Regresa el perimetro del circulo de radio r en p,// y el area en a. p = 2 * %pi * r; a = %pi * r * r;endfunction

IMPORTANTE¡Es muy importante dejar al menos una línea en blanco al final del archivo, yaque el interpretador de Scilab lo requiere!

Después de cargar la función en Scilab, podemos utilizarla:

-->[perimetro,area] = circulo(3) area =

28.274334 perimetro = 18.849556

Observa que si llamamos la función sola, regresa el valor de salida de la últimavariable que se declaró en el encabezado:

-->circulo(3) ans =

18.849556

Ahora vamos a modificar la función círculo para que entregue el perímetro y el áreacomo componentes de un vector:

function S = circulo(r)// Regresa el perimetro y el area del circulo de radio r.// S(1) = perimetro. S(2) = area. S(1) = 2 * %pi * r; S(2) = %pi * r * r;endfunction

Al ejecutar la función obtenemos el resultado en un vector columna:

-->circulo(3) ans =

18.849556 28.274334

Métodos Numéricos

Scilab incluye funciones pre-programadas para diversos métodos numéricos. Enseguida presentamos algunos de los mas utilizados.

Solución de sistemas de ecuaciones lineales.Resolver sistemas de ecuaciones lineales es muy sencillo con Scilab. La mejor formade mostrarlo es con un ejemplo:

Resolver el sistema:

52131523582523

1522542525122

1252525

54321

54321

54321

54321

54321

xxxxxxxxxxxxxxxxxxxx

xxxxx

Primero capturamos la matriz de coeficientes del sistema en forma matricial enScilab:

-->A=[5 -2 -5 2 -5; 2 12 -5 2 -5; 4 1 -5 22 -5; 3 2 -5 2 -8; 3 2 15 3 -21] A =

5. - 2. - 5. 2. - 5. 2. 12. - 5. 2. - 5. 4. 1. - 5. 22. - 5. 3. 2. - 5. 2. - 8. 3. 2. 15. 3. - 21.Ahora el vector de términos independientes como un vector columna:

-->b = [12 -2 -1 5 5]' b =

12. - 2. - 1. 5. 5.

La solución se obtiene como pre multiplicando el vector de términos independientespor la inversa de la matriz de coeficientes:

-->X = inv(A) * b X =

2.4985607 - 0.4645941 0.0540779 - 0.4553828 0.0481673

Comprobación:

-->A*X ans =

12. - 2. - 1. 5. 5.

Otra forma (más eficiente para sistemas grandes) es utilizando el comando “\”:

-->X = A \ b X =

2.4985607 - 0.4645941 0.0540779 - 0.4553828 0.0481673

Solución numérica de integrales definidas.Para evaluar una integra definida numéricamente existen varias opciones. Vamos autilizar la función predefinida “intg()”. Empezamos utilizando el comando help parasaber mas detalles de esta función:

intg - definite integral

Calling Sequence

[v,err]=intg(a,b,f [,ea [,er])

Parameters

a,b : real numbers f : external (function or list or string) ea, er : real numbers ea : absolute error required on the result. Default value: 1.d-14 er : relative error required on the result. Default value: 1.d-8 err : estimated absolute error on the result.

Los parámetos entre paréntesis cuadrados son opcionales.

Vamos a ver como se aplicaría esta función si se desea evaluar numéricamente lasiguiente integral:

dxx

xsenx2

0 2)2

(1

)30(

Primero debemos programar la función en el editor de Scilab:

function y = f(x)y = x * sin(30*x) / sqrt( 1 - ( (x / (2*%pi) )^2 ) );

endfunction

Una vez cargada la función en Scilab, utilizamos la función “integ()”:

-->[v,error]=intg(0,2*%pi,f) error =

4.625D-09 v =

- 2.5432596

El valor de la integral fue asignado a “v”, y a la variable “error” se le asignó elestimado del error del resultado.

Solución numérica de ecuaciones no lineales.En Silab podemos utilizar la función ‘fsolve()’ para encontrar las raíces reales de unaecuación no lineal, o de un sistema de ecuaciones no lineales. Veamos como seutiliza con varios ejemplos simples:

Deseamos encontrar una raíz real de la ecuación:

02 xexPrimero programamos la función usando el editor de Scilab y la cargamos:

function y = f(x) y = x^2 - exp(x^2);

endfunction

¡RECUERDA DEJAR AL MENOS UNA LINEA EN BLANCO AL FINAL DELARCHIVO!

Ahora la pasamos como parámetro a “fsolve()”:

-->x=fsolve(1.0,f) x =

- 0.0002122

Observa que fsolve requiere una aproximación inicial de la raíz, en este casoutilizamos 1.0.

Ahora utlizaremos la función ‘fsolve’ para encontrar una raíz del siguiente sistema deecuciones no lineales:

05168

22 yx

0)(52 xsenyPrimero programamos la función en el editor de Scilab, utilizando un vector para losparámetros de entrada, y un vector de salida para las funciones evaluadas:

function F = Fxy(V) x = V(1); y = V(2); F(1) = x*x/8 + y*y/16 -5; F(2) = y*y - 5*sin(x);

endfunction

Ahora podemos pasar la función como parámetro a fsolve() :

-->fsolve([1.0,1.0]',Fxy) ans =

6.3177262 - 0.4155362

Observa como tuvimos que pasar un vector con dos condiciones iniciales. Elresultado es un vector, donde el primer elemento correspode al valor de x, y elsegundo al valor a y, respetando el orden en que los asignamos al declarar lafunción.

La función “fsolve( )” tiene varias opciones, las cuales puedes explorar utilizando elcomando help.