49
Scilab * Funciones para solución de tareas * Resultados de rutinas o funciones programadas * librería o herramientas: simulación, automatización y control, … Intérpret e Fortran, C, C++ Java Scri pt Breve curso introductorio de Scilab. Introducción Desarrollado por INRIA (Institut National de Recherche en Informatique et Automatique) y la ENPC (École Nationale des Pontset Chaussées) desde 1990. Actualmente es un gran consorcio integrado por compañías y organizaciones académicas en 2003, luego integra el Digiteoresearchnetwork en 2008, Empresa ScilabEnterprises se fundó en junio de 2010con el apoyo de INRIA, para garantizar el futuro de Scilab. Desde entonces ha tenido plenamente a cargo de la edicióny desarrollo de Scilab desde julio de2012.... Sus principales características son: *software para cálculo científico, * interactivo, * programable, * de libre uso, con la condición de siempre hacer referencia a sus autores , * disponible para diferentes plataformas: Windows, Linux, Mac OS X (sólo plataforma intel), Sun, Alpha, ... Scilab es un paquete libre, “software libre” para la computación científica, posee un lenguaje de programación propio, como los de cálculo numéricos (Fortran, C, C++, Java), permite al usuario hacer sus propios scripts (conjunto de comandos o instrucciones escritos en un archivo que se pueden ejecutar con una única orden) para resolver problemas o tarea, y se ejecutan mediante un intérprete. Se escriben en un editor de texto integrado al Scilab. Este paquete se puede obtener de la siguiente dirección http://www.scilab.org ,ver figura1,buscar la opción o icono de descargar. Se le sugiere al usuario registrarse, no tiene ningún costo, sirve para realizar mejoras con la experiencia de uso, ya sea para pedir 1 Ernesto Calderón C. [email protected]

Apuntes1 Del Curso Introductorio de Scilab

Embed Size (px)

DESCRIPTION

mmmmmmmmm

Citation preview

Page 1: Apuntes1 Del Curso Introductorio de Scilab

Scilab* Funciones para solución de tareas * Resultados de rutinas o funciones

programadas* librería o herramientas: simulación,

automatización y control, …

IntérpreteFortran, C, C++Java

Script

Breve curso introductorio de Scilab.

Introducción

Desarrollado por INRIA (Institut National de Recherche en Informatique et Automatique) y la ENPC (École Nationale des Pontset Chaussées) desde 1990.Actualmente es un gran consorcio integrado por compañías y organizaciones académicas en 2003, luego integra el Digiteoresearchnetwork en 2008, Empresa ScilabEnterprises se fundó en junio de 2010con el apoyo de INRIA, para garantizar el futuro de Scilab. Desde entonces ha tenido plenamente a cargo de la edicióny desarrollo de Scilab desde julio de2012....

Sus principales características son: *software para cálculo científico, * interactivo, * programable, * de libre uso, con la condición de siempre hacer referencia a sus autores, * disponible para diferentes plataformas: Windows, Linux, Mac OS X (sólo plataforma intel), Sun, Alpha, ...

Scilab es un paquete libre, “software libre” para la computación científica, posee un lenguaje de programación propio, como los de cálculo numéricos (Fortran, C, C++, Java), permite al usuario hacer sus propios scripts (conjunto de comandos o instrucciones escritos en un archivo que se pueden ejecutar con una única orden) para resolver problemas o tarea, y se ejecutan mediante un intérprete. Se escriben en un editor de texto integrado al Scilab.

Este paquete se puede obtener de la siguiente dirección http://www.scilab.org,ver figura1,buscar la opción o icono de descargar. Se le sugiere al usuario registrarse, no tiene ningún costo, sirve para realizar mejoras con la experiencia de uso, ya sea para pedir ayuda en línea o por correo electrónico por alguna función, algún problema que se le pueda presentar, para recibir alguna clave para el uso de librerías o herramienta especializada.

Figura 1. Imagen del sitio inicial donde se puede descargar directamentepara Windows o ir la liga para otra plataforma, ver figura 2.

1Ernesto Calderón C. [email protected]

Page 2: Apuntes1 Del Curso Introductorio de Scilab

Figura2. Imagen del sitio web donde bajar el Scilab según la plataforma de su PC

Dispone de una ayuda con el símbolo de interrogación “?” o , también hay tutoriales en http://www.scilab.org/resources/documentation/tutorials (25 de marzo de 2013).

Una vez que se termine de bajar, se instala en la PC [/USB] a usar. Se puede copiar toda la carpeta del Scilab donde se instaló en la PC a la unidad de USB para usarse como paquetería portátil. Al haber terminado de copiar la carpeta <Scilab.4.1.0> se procede a crear un acceso directo del comando ejecutable para activar/ejecutar el programa rápidamente, este paso se realiza solamente una vez, así lo indican las imágenes en el Anexo A.

El acceso directo creado se ejecutará con un doble clic cada vez que se use el Scilab.

Es recomendable crear una carpeta donde se guardarán algunos archivos de trabajo y realizar el cambio de directorio de trabajo dentro del Scilab así lo muestran en el Anexo B.

2Ernesto Calderón C. [email protected]

Page 3: Apuntes1 Del Curso Introductorio de Scilab

Operadores a usar en ScilabOperadores aritméticos: Operadores relacionales: Operadores lógicos:Mayor prioridad ( ) ^ o ** < y & * / > o |Menor prioridad + - >= no ~

<= Boleanos: ~= , <> Falso %f o %F = == verdadero %t o %T

/ división por la derecha, x/y = xy-1

\ división por la izquierda, x\y = x-1yEl == se usa como operador de comparación no de asignación =.‘ apóstrofe, transpuesta, (‘ a un lado de la tecla cero, 0)

Tipos de variables

Reales: 8.01, -5.2, 0.056, 1.4e+5, 0.23E-2, -0.567d-21, 8.003D-12Enteros: 8, 1 Complejos: 1+2*%iCaracteres (entre apóstrofes o comillas): ’esto es una cadena de caracteres’ “string“

En Scilab, por defecto, los números son codificados como números reales en coma flotante en doble precisión. -0.567d-21, 8.003D-12

Algunas constantes numéricas están predefinidas. Sus nombres comienzan por el símbolo %. En particular %pi es el número π, %e es el número e, %i es la unidad imaginaria, %eps es la precisión de la máquina(mayor número real doble precisión para el que 1+%eps/2 es indistinguible de 1), %inf es el infinitomáquina(overflow: cualquier número que supere al mayor número real representable en doble precisión),%nan es el símbolo NaN (Not a Number) para una operación inválida (por ejemplo, 0/0 es %nan).

El lenguaje de Scilab es interpretado, esto es, las instrucciones se traducen a lenguaje máquina una a una y se ejecutan antes de pasar a la siguiente. Es posible escribir varias instrucciones en la misma línea, separándolas por una coma o por punto y coma.

Scilab distingue entre mayúsculas y minúsculas: %nan NO ES LO MISMO QUE %NanSe pueden recuperar comandos anteriores, usando las teclas de flechas arriba↑ y abajo↓. Con las flechas izquierda← y derecha→ nos podemos desplazar sobre la línea de comando y modificarlo.

En Scilab las variables no son nunca declaradas: su tipo y su tamaño cambian de forma dinámica de acuerdo con los valores que le son asignados. Así, una misma variable puede ser utilizada, por ejemplo, para almacenar un número complejo, a continuación una matriz 25x40 de números enteros y luego para almacenar un texto. Las variables se crean automáticamente al asignarles un contenido. Así mismo, es posible eliminar una variable de la memoria si ya no se utiliza.

3Ernesto Calderón C. [email protected]

Page 4: Apuntes1 Del Curso Introductorio de Scilab

Algunas funciones elementalessqrt(x):raiz cuadrada sin(x):seno (radianes)abs(x): valor absoluto cos(x):coseno (radianes)conj(z):complejo conjugado tan(z):tangente (radianes)real(z):parte real cotg(x):cotangente (radianes)imag(z) :parte imaginaria asin(x) :arcosenoexp(x):exponencial acos(x):arcocosenolog(x) :logaritmo natural atan(x):arcotangentelog10(x):logaritmo decimal cosh(x):cos. hiperbólicorat(x):aprox. racional sinh(x):seno hiperbólicomodulo(x:y):resto de dividir x por y tanh(x):tangente hiperbólicafloor(x):n tal que n<=x<(n+1) acosh(x):arcocosenohiperb.ceil(x):n tal que (n-1)<x<=n asinh(x):arcosenohiperb.int(x):parte entera inglesa:floor(x) si x>=0ceil(x) si x<0

atanh(x):arcotangenteLas funciones trigonométricas da valores en radianes.

El significado de la mayoría de estas funciones es absolutamente claro. La siguiente tabla muestra varios ejemplos utilizando las funciones de parte entera y redondeo.

x ceil(x) floor(x) int(x) round(x)2 2 2 2 2

1.8 2 1 1 21.5 2 1 1 21.2 2 1 1 1

- 3.1 - 3 - 4 - 3 - 3- 3.5 - 3 - 4 - 3 -4- 3.8 - 3 - 4 - 3 - 4

Imagen del Scilab 4.0, el área de trabajo será en la “Consola de Scilab”, /intro/enter.

El símbolo del prompt es --> aquí se escriben todas las instrucciones dadas por el usuario para hacer los cálculos necesarios.

4Ernesto Calderón C. [email protected]

Page 5: Apuntes1 Del Curso Introductorio de Scilab

A medida que iniciemos y avancemos en el manejo del Scilab se irán dando algunas breves explicaciones acerca de los comandos más frecuentes.

Uso como calculadora

-->//escribe comentario en la consola o área de trabajo

-->A=1 A = 1.

-->a=2 a = 2.

-->A A = 1.

-->a a = 2.

División por la derecha y división por la izquierda:-->1/2 ans = 0.5

-->1\2 ans = 2.

-->3+7*5 ans = 38.

Operación asignada a una variable-->a=3+7*5 a = 38.

En la siguiente línea el ; no muestra el resultado/asignación de la operación/número-->t=4.5; -->t=4.5 t = 4.5

Los números pueden escribirse usando la notación usual o notación científica:

5Ernesto Calderón C. [email protected]

Page 6: Apuntes1 Del Curso Introductorio de Scilab

3.5-4.12343.14e-103.14E-100.0023e20-12.345e+12

Escribiendo valores de 1 a n datos y asignados a una variable-->i=1:3 i = 1. 2. 3.

Números aleatorios renglón,columna

-->w=rand(2,4) w =column 1 to 30.2113249 0.0002211 0.6653811 0.7560439 0.3303271 0.6283918

column 4 0.8497452

0.6857310 (continuación de la línea anterior)

-->w(1,i) ans = 0.2113249 0.0002211 0.6653811

-->w($,$) ans = 0.6857310

-->w($,$-1) ans = 0.6283918

El símbolo de $ indica el último valor de un renglón o columna o de ambos, como el caso anterior.

-->sqrt([4 3]) ans = 2. 1.7320508

Who: Scilab muestra las variables que está usando en ese momento, además de las variables que usa por omisión/default

-->who

Sus variables son:

t a ans home scinoteslib modules_managerlib atomslib atomsguilib matiolib parameterslib simulated_annealinglib genetic_algorithmslib umfpacklibscicos_autolibscicos_utilslibxcoslibspreadsheetlib demo_toolslib assertlib development_toolslib external_objectslib soundlib tclscilib m2scilib compatibility_functilib arnoldilib statisticslib windows_toolslib WSCI timelib stringlib special_functionslib sparselib signal_processinglib %z %s polynomialslib overloadinglib optimsimplexlib optimbaselib neldermeadlib optimizationlib interpolationlib linear_algebralib

6Ernesto Calderón C. [email protected]

Page 7: Apuntes1 Del Curso Introductorio de Scilab

jvmlib output_streamlib iolib integerlib dynamic_linklib guilib uitreelib data_structureslib cacsdlib graphic_exportlib graphicslib datatipslib fileiolib functionslib elementary_functionslib differential_equationlib helptoolslib corelib PWD %tk %F %T %nan %inf SCI SCIHOME TMPDIR %gui %fftw $ %t %f %eps %io %i %e %pi

usando 8107 elementos de 10000000.y 81 variables de 9231.

Sus variables globales son:

%modalWarning %toolboxes %toolboxes_dir

usando 19 elementos de 999.y 3 variables de 767.

Los espacios en blanco antes y después del signo = no son necesarios, simplemente facilita la lectura. Las variables siempre deben iniciar con una letra o $.

-->b=4.5;

Cuando en la orden no hay ninguna asignación, sino simplemente una operación válida,Scilab crea o actualiza una variable llamada ans. Por ejemplo,

-->a+b ans = 42.5

-->c=a+b; -->c c =42.5

-->a=%T a = T

-->b=(0==1) b = F

Operaciones repetitivas

Se desea calcular √ y , se da un valor inicial a una variable y luego se usa x = (x+y/x)/2, se repite el cálculo usando flecha hacia arriba ↑ luego aparece la ecuación y presione, hasta que no varíe su valor. Ejemplo √3

-->y=3; -->x=y; -->x=(x+3/x)/2 x = 2.

7Ernesto Calderón C. [email protected]

Page 8: Apuntes1 Del Curso Introductorio de Scilab

-->↑x=(x+3/x)/2 x = 1.75

-->↑ x=(x+3/x)/2 x = 1.7321429

-->↑ x=(x+3/x)/2 x = 1.7320508

-->↑ x=(x+3/x)/2 x = 1.7320508

En una misma línea de Scilab puede haber varias órdenes o instrucciones. Éstas deben estar separadaspor coma o por punto y coma. Por ejemplo,

-->t1=2, t2=3; dt=t2-t1 t1 = 2. dt = 1.

Entre operadores de igual prioridad, se utiliza el orden de izquierda a derecha. Porejemplo, 2*3+4^5-6/7 es equivalente a ((2*3)+(4^5))-(6/7).

->2*3+4^5-6/7 ans = 1029.1429

Para escribir la siguiente ecuación ( sen ( x ) )2+ (cos ( x ) )2=1, con x inicial=2

-->x=2; -->y1=(sin(x))^2 y1 =

0.8268218

-->y2=(cos(x))^2 y2 = 0.1731782

-->y1+y2 ans = 1.

-->(sin(x))^2+(cos(x))^2 ans = 1.

Algunas variables matemáticas predefinidas: %i es el número imaginario, %pi es la constante matemática π.-->sin(%pi)+cos(%pi)ans = - 1.

Otra función matemática, ésta ya con dos parámetros de entrada, es modulo. Sus dosparámetros deben ser enteros. El resultado es el residuo de la división entera.modulo(17,5)da como resultado 2.

-->modulo(17,5) ans = 2.

Formato numérico

Se puede modificar el formato utilizado por Scilab para mostrar los resultados, medianteformat. Si se da la ordenformat(16)a partir de ese momento, Scilab utilizará 16 \columnas" (16 posiciones) para mostrar cada número. Estas 16 columnas incluyen el espacio para el signo la parte entera y elpunto. Por defecto, Scilab usa 10 posiciones.

8Ernesto Calderón C. [email protected]

Page 9: Apuntes1 Del Curso Introductorio de Scilab

La notación científica con 14 posiciones format(‘e’,14) o format(‘e’)

format(v) o format(‘v’,10) regresar al formato inicial, el formato “variable” (el predefinido por Scilab)

Scilab tiene predefinidas algunas constantes especiales cuyos nombres están precedidosdel signo % . Para los valores e, π, √−1, sus nombres son: %e , %pi , %i . Observeque dos de estas variables aparecieron al utilizar who. Después de la siguiente asignación,la variable r tendrá el valor -1.

-->r = log(1/%e) r = - 1.

Otras operaciones

-->exp(3) ans = 20.08553692318766792368

-->t=log(ans) t =3.

String o cuerdas-->x="hola, " x =hola

-->y="¿cómo estás?" y =¿cómo estás?

-->x+y ans =hola,¿cómo estás?

Ayuda

Para obtener la ayuda de Scilab, puede presionar la tecla F1 y aparecerá una ventana como lo muestra la siguiente imagen

9Ernesto Calderón C. [email protected]

Page 10: Apuntes1 Del Curso Introductorio de Scilab

Pero si desea una ayuda acerca de alguna función o comando, al teclear lo siguiente mostrará una ventana con información correspondiente.

-->helpfloor

10Ernesto Calderón C. [email protected]

Page 11: Apuntes1 Del Curso Introductorio de Scilab

se desea buscar sobre un tema, se debe utilizar apropos. Por ejemplo:apropospolynomial

Complejos

Scilab maneja de manera sencilla los números complejos, i=-1. Para las operaciones con números complejos (suma, resta, multiplicación, ...) se utilizan exactamente los mismos símbolos + - * / ** ^.

Las funciones real, imag y conj permiten obtener la parte real, la parte imaginaria y el conjugado de un complejo. Si se utiliza la función abs con un complejo, se obtiene la magnitud o módulo de él.

imult multiplicación por el i, la unidad imaginariaisreal regresa verdadero si la variable no tiene una entrada de complejo

11Ernesto Calderón C. [email protected]

Page 12: Apuntes1 Del Curso Introductorio de Scilab

Las funciones de Scilab usadas para funciones reales elementales que tienen generalizacionesen complejos, se pueden usar también para los complejos, por ejemplo, sin, cos, log, ...

-->real(%i) ans = 0.

-->imag(%i) ans = 1.

-->conj(%i) ans = - i

-->x=1+%i x = 1. + i

-->isreal(x) ans = F

-->x' ans = 1. - i

-->y=1-%i y =1. - i

-->real(y)ans = 1.

-->imag(y) ans = - 1.

Finalmente se verifica la igualdad por Scilab de (1+i)(1-i) = 1-i2 = 2

-->x*y ans = 2.

-->%i %i =i

-->c=sqrt(-1) c =i

-->r=-5; -->a = 3 + 4*r*%i a = 3. - 20.i

-->b = sqrt(-4) b =2.i

-->z = 3 + 4*%i; r = sin(z) r =3.853738 - 27.016813i

Ejercicios

¿Cuál es el resultado de las siguientes operaciones?, piense antes de hacerlo en Scilab.2 * 3 + 42 + 3 * 42 / 3 + 42 + 3 / 4

Usando paréntesis, ¿cuál es el resultado de las siguientes operaciones?, piense antes de hacerlo en Scilab.2 * (3 + 4)

12Ernesto Calderón C. [email protected]

Page 13: Apuntes1 Del Curso Introductorio de Scilab

(2 + 3) * 4(2 + 3) / 43 / (2 + 4)

Usando algunas funciones, ¿cuál es su resultado?sqrt (4)sqrt (9)sqrt ( -1)sqrt ( -2)exp (1)log(exp (2))exp(log (2))10^2

log10 (10^2)10^ log10 (2)sign (2)sign ( -2)sign (0)

Usando algunas funciones trigonométricas, ¿cuál es su resultado?cos (0)sin (0)cos(%pi)sin(%pi)cos(%pi /4) - sin(%pi /4)

Matrices

Los corchetes [ inicio y fin ] de la matriz, las comas (o espacios en blanco, esto es opcional) separan los valores en las columnas, el ; separa los valores de diferentes renglones, tres puntos consecutivos … indican/denotan valores intermedios.

La sintaxis es: -->A=[a11, a12, … a1n ; an1, an2, … ann] Una matriz de 2x3 es-->a=[1,2,3;4,5,6] a = 1. 2. 3. 4. 5. 6.

Se pueden usar espacios en blanco para separar valores de renglones y columnas, al escribir el

siguiente renglón se da un enter,.Esta sintaxis es útil cuando se escriben los valores en un archivo, permiten verificar la lectura/escritura de la matriz.

-->a=[1 2 3 -->4 5 6] a = 1. 2. 3. 4. 5. 6.

Algunas funciones de matrices:-->A=ones(2,3) A = 1. 1. 1.

1. 1. 1.

Matriz vacía 0x0, borra el contenido de la matriz y libera la memoria.-->b=[] b = []El comando size regresa el total de renglones, nr y el total de columnas, nc, nr, nc>1-->[nr,nc]=size(A)

13Ernesto Calderón C. [email protected]

Page 14: Apuntes1 Del Curso Introductorio de Scilab

nc =3. nr = 2.

La siguiente sintaxis nr=size(matriz,sel), sel=1 o “r” o ‘r’ da el número de renglones, sel=2 o “c” da el número de columnas, sel=”*” da el total del número de elementos de la matriz.-->A=ones(2,3) A = 1. 1. 1. 1. 1. 1. -->size(A,'*') ans =6.

Accesando a los elementos de la matriz.A toda la matriz, A, a los elementosde A, su sintaxis esA(i,j), para un rango determinado se usa el operador : -->A=ones(2,3) A = 1. 1. 1. 1. 1. 1.

-->B=2*ones(2,3) B = 2. 2. 2.

2. 2. 2.

-->A+B ans =3. 3. 3. 3. 3. 3.

Un vector: i:j, v=2:4, v=i:s:j donde s es el incremento-->v=2:4 v = 2. 3. 4.

-->v=3:2:10 v =3. 5. 7. 9.

-->v=3:2:10 v = 3. 5. 7. 9.

-->v=10:-2:3 v = 10. 8. 6. 4.

-->v=3:-2:10 v = []

La siguiente sintaxis sirve para indicar elemento inicial i, k, su incremento s, t, elemento final j, l, para renglón y columna, A(i:s:j,k:t:l).

Se puede generar matrices de nxn con el fin de mostrar otro manejo de datos y funciones del Scilab. Tal es el procedimiento testmatrix que crea algunas matrices particulares conociendo n, mediante la matriz de Franck y otro es mediante la matriz de Hilbert, ambos usan valores propios o eigenvalores, tema de algebra lineal. Para fines práctico lo usaremos en el siguiente ejemplo:

-->A=testmatrix("hilb",5) A = 25. - 300. 1050. - 1400. 630. - 300. 4800. - 18900. 26880. - 12600. 1050. - 18900. 79380. - 117600. 56700.

14Ernesto Calderón C. [email protected]

Page 15: Apuntes1 Del Curso Introductorio de Scilab

- 1400. 26880. - 117600. 179200. - 88200. 630. - 12600. 56700. - 88200. 44100.

A (vi, vj),donde vi, vj son vectores de subíndices, se puede utilizar para designar los elementos de Acuyos subíndices son los elementos de vi y vj. Eso sintaxis se ilustra en lasiguiente ejemplo.

A toda la matrizA(:,:) toda la matrizA(i:j,k) todos los elementos de los renglones desde i a j, de la columna kA(i,j:k) los elementos del renglón i, en las columnas desde j hasta kA(i,:) el renglón iA(:,j) la columna j

-->A(1:2 ,3:4) ans = 1050. - 1400. - 18900. 26880.

-->vi=1:2 vi = 1. 2.

-->vj=3:4 vj = 3. 4.

-->A(vi,vj) ans = 1050. - 1400. - 18900. 26880.

-->vi=vi+1 vi =

2. 3.

-->vj=vj+1 vj =

4. 5.

-->A(vi,vj) ans =

26880. - 12600. - 117600. 56700.

Se puede usar la función random para crear matrices

Usando números aleatorios tenemos:-->A=rand(3,3) A =0.4573049 0.4126882 0.7436821 0.1952018 0.7140648 0.8766705 0.3230850 0.6329206 0.6898754

-->A([1 2],:) ans =

0.4573049 0.4126882 0.7436821 0.1952018 0.7140648 0.8766705

-->A([2 1],:) ans =

0.1952018 0.7140648 0.8766705 0.4573049 0.4126882 0.7436821

-->A([1 2],:)=A([2 1],:) A =

0.1952018 0.7140648 0.8766705

15Ernesto Calderón C. [email protected]

Page 16: Apuntes1 Del Curso Introductorio de Scilab

0.4573049 0.4126882 0.7436821 0.3230850 0.6329206 0.6898754

Operaciones básicas con matrices, a*b, a+b, a-b, a/b, x*a, a’, inv(a), det(a)-->a=[1 2 1;3 4 2;5 3 1] a = 1. 2. 1. 3. 4. 2. 5. 3. 1.

-->d=diag(a) d = 1. 4. 1.

-->b=a' b = 1. 3. 5. 2. 4. 3. 1. 2. 1.

-->inv_a=inv(a) inv_a = - 2. 1. - 5.551D-16 7. - 4. 1. - 11. 7. - 2.

-->round(inv_a) ans = - 2. 1. 0. 7. - 4. 1. - 11. 7. - 2.

-->aa=round(inv_a);-->a+b ans = 2. 5. 6. 5. 8. 5. 6. 5. 2.

-->a*b ans = 6. 13. 12.

13. 29. 29. 12. 29. 35.

-->a-b ans = 0. - 1. - 4. 1. 0. - 1. 4. 1. 0.

-->a/b ans = 0. 0. 1. - 2. 7. - 9. - 7. 24. - 36.

-->a2=2*a a2 = 2. 4. 2. 6. 8. 4. 10. 6. 2.

-->rango=rank(a)rango = 3.

-->determinante=det(a) determinante = 1.

-->tamano=size(a) tamano = 3. 3.

-->//matriz diagonal superior LU -->mlu=triu(a) mlu = 1. 2. 1. 0. 4. 2. 0. 0. 1.

16Ernesto Calderón C. [email protected]

Page 17: Apuntes1 Del Curso Introductorio de Scilab

-->mli=tril(a) mli = 1. 0. 0. 3. 4. 0. 5. 3. 1.

-->[l,u]=lu(a) u = 5. 3. 1. 0. 2.2 1.4 0. 0. - 0.0909091 l = 0.2 0.6363636 1. 0.6 1. 0. 1. 0. 0.

-->reducida=rref(a) reducida = 1. 0. 0. 0. 1. 0. 0. 0. 1.

-->maleatoria=rand(3,4)*10 maleatoria = 2.1132487 3.3032709 8.4974524 0.6837404 7.5604385 6.653811 6.8573102 5.6084861 0.0022113 6.2839179 8.7821648 6.6235694

Sistema de ecuaciones, resolución por el método de Gauss-JordanSe conoce el siguiente sistema de ecuaciones4x1 - 9x2 + 2x3 = 5 2x1 - 4x2 + 6x3 = 3x1 - x2 + 3x3 = 4

*se introduce la matriz de coeficiente del sistema de ecuacionesX1

X2 X3 =bi

4 -9 2 52 -4 6 31 -1 3 4

*Se calcula la inversa del sistema considerando nxn, sin el bi* Multiplicamos la matriz rectangular inicial por la matriz inversa = da la solución del sistema

El Scilab puede representar un polinomio a partir de la matriz de coeficientes, nxn, lo hace mediante el procedimiento de calcular los valores propios de la matriz. Después podemos calcular las raíces de dicho polinomio, como también puede escribir un polinomio en particular.

Script/Macros/procedimientos. Escribiendo en el editor de Scilab, scinote

Macros, conjunto de instrucciones secuenciales escrito en un editor de texto como el SciNotes, que se guarda con la extensión sce, que se ejecuta dentro del paquete.

Posicionándose sobre el comando/función y ctrl +F1, = da la ayuda dentro del editor

Algunos comandos para desplegar texto o mensajes y cálculos en la consola/área de trabajo

17Ernesto Calderón C. [email protected]

Page 18: Apuntes1 Del Curso Introductorio de Scilab

disp('macro/scripts hecha por nombre')ejemplo de archivo ejecutado por ejemplo1.sce en Scilab

macro/script hecha por “nombre” usando matrices de ejemplo, para operaciones básicas

matriz a

1. 2. 1. 4. 2. 5. 3. 1. 2.

transpuesta de a 1. 4. 3. 2. 2. 1. 1. 5. 2.

2*a=

2. 4. 2. 8. 4. 10. 6. 2. 4.

suma de b+a2

3. 8. 5. 10. 6. 11. 7. 7. 6.

Polinomios:Dado un sistema de ecuaciones podemos escribir su polinomio característico (valores propios)a=[1,2,3;4,5,6;7,8,-9];p=poly(a,"x")

-->a=[1,2,3;4,5,6;7,8,-9]a = 1. 2. 3. 4. 5. 6. 7. 8. - 9.

-->pp=poly(a,"x")pp = 2 3 - 54 - 126x + 3x + x -->roots(pp)ans = - 0.4248820 10.059332 - 12.63445

-->P=poly([2 4 7],"x","roots")P = 2 3 - 56 + 50x - 13x + x

-->roots(P)ans = 2. 4. 7.

Manejo de datos

Leer datos de archivo.* Los datos deben estar en un archivo tipo texto, previamente, con la extensión csv o tabulador (o por un espacio en blanco)* Preferentemente no contenga letreros iniciales en la 1ª filaVariable=read(“nombre_archivo.csv”,-1,NoColumnas)-1 significa que no se conoce el total de líneas o datos

18Ernesto Calderón C. [email protected]

Page 19: Apuntes1 Del Curso Introductorio de Scilab

-->Datos=read(“data.cvs”,-1,2)Ejemplo en un script/macro/procedimiento//script/macro para analizar datos//ejercicio usar disp() para desplegar informaciónclcdatos=read("datavi17ene14.csv",-1,3)x1=datos(:,1);y1=datos(:,2);y2=datos(:,3);st_deviation(y1)

st_deviation(y2)mean(y2)mean(y1)variance(y1)variance(y2)median(y1)median(y2)max(y1);min(y1)max(y2);min(y2)

Ordenando datos, gsort(datos),lex_sort(datos,column)datos es la tabla de valores leída de archivos o asignadagsort(datos) ordena la tabla sin respetar apareamiento (ordena cada columna)lex_sort(datos,#decolumna) ordena la columna elegida respetando su apareamiento (renglón correspondiente con sus respectivas columnas)

datos1=read("datavi17ene14.csv",-1,3) datos1 = 1. 29. 25. 2. 46. 34. 3. 16. 24. 4. 13. 32. 5. 42. 16. 6. 43. 45. 7. 42. 22. 8. 46. 17. 9. 11. 44.

10. 18. 9. 11. 18. 37. 12. 15. 14. 13. 12. 48. 14. 15. 35. 15. 15. 1. 16. 3. 33. 17. 8. 16. 18. 38. 12. 19. 32. 36. 20. 48. 21.

-->gsort(datos1) ans = 48. 22. 13. 48. 21. 12. 46. 20. 12. 46. 19. 12. 45. 18. 11. 44. 18. 11. 43. 18. 10. 42. 17. 9. 42. 17. 9. 38. 16. 8.

19Ernesto Calderón C. [email protected]

Page 20: Apuntes1 Del Curso Introductorio de Scilab

37. 16. 8. 36. 16. 7. 35. 16. 6. 34. 15. 5. 33. 15. 4. 32. 15. 3. 32. 15. 3. 29. 14. 2. 25. 14. 1. 24. 13. 1.

-->lex_sort(datos1,2) ans = 16. 3. 33. 17. 8. 16. 9. 11. 44. 13. 12. 48. 4. 13. 32. 15. 15. 1. 14. 15. 35. 12. 15. 14. 3. 16. 24.

11. 18. 37. 10. 18. 9. 1. 29. 25. 19. 32. 36. 18. 38. 12. 7. 42. 22. 5. 42. 16. 6. 43. 45. 8. 46. 17. 2. 46. 34. 20. 48. 21.

Comando modulo(var1,var2)Módulo calcula i = n (módulo m) es decir resto de n dividido por m (n y m son enteros). i = n - m . * int (n ./ m). Aquí la respuesta puede ser negativa si n o m son negativos. pmodulo calcula i = n - m . * floor (n ./ m) , la respuesta es positiva o cero. modulo(x,0) devuelve un mensaje de error: "División por cero... ". Con ieee(2), módulo(x,0) devuelve %nan. pmodulo(x,0) devuelve un mensaje de error: "División por cero... ". Con ieee(2), pmodulo(x,0) devuelve %nan.

Para ejecutar alguna macro o procedimiento en la consola puede usar el comando exec()-->exec('archivo.sce',0); o -->exec('archivo.sce',-1); -->exec('\directorio2\archivo.sce',0);

Algunos tópicos de programación comandos y funciones

Como se vio anteriormente las instrucciones de comandos son escritas en un editor de texto como el SciNotes, para realizar alguna tarea, o los pasos para la solución de un problema.

Pasos de programación Tarea o enunciado del problema Modelo matemático Requerimiento de datos Algoritmo: se puede expresar mediante pseudocódigos o diagramas de flujo Codificación (cualquier lenguaje) Resultados y análisis

Algunos comando de programaciónActividades básica: * lectura de datos: en Scilab, se puede usar mediante la asignación de variables desde la consola o desde un archivo.

20Ernesto Calderón C. [email protected]

Page 21: Apuntes1 Del Curso Introductorio de Scilab

* salida de datos, mediante el comando disp.(variable,”texto_mensaje”) o escritura en archivo* si condicional, usando el comando if_then_else

Actividades derivadas:Para hacer menús: select_case_else_endCircuito de cálculo: for_vi:vf_endCircuito de convergencia: while_condicion_end

Otros comandos relacionados con el control de flujo son:El comando break permite la salida forzada (en cualquier parte interna) de un circuito for o de un cicuito while.El comando return permite salir de una función antes de llegar a la última orden. Todos los parámetros de salida o resultados deben estar definidos con anterioridad.Otra orden que sirve para interrumpir una función, en este caso interrumpiendo la evaluación, es abort.

Actividades básicasLectura de datos: desde la consola, desde un script o desde un archivo, asignando valores a la variable de entrada, a←valor1 o A←leer archivo(valor1, valor2,…).a=2.34 , datos1=read(“data.csv”,-1,2); , x=input(‘mensaje’) o x=input(“mensaje”,’s’);

Escritura o salida de datos: el resultado puede ser asignado a una variable, desplegar el mensaje directamente en la consola o escribir datos en un archivoEn la consola: -->x , En una macro para desplegar algún mensaje o resultado: disp.(“mensaje”); disp(“texto=”+string(x)); disp(x,”texto”);

El si condicional, if_then_else_endif condicion thenactividad1;actividad2;end

if condicion then actividad1;else actividad2;end

ejemplos del uso del si condicionalDadas dos variables indicar si es par o non cada una.Para este caso haremos uso del commando modulo(var1,var2), ya que si se divide un número entre 2 y el residuo es 1 el número es non, si el residuo es 0 el número es par.

21Ernesto Calderón C. [email protected]

Page 22: Apuntes1 Del Curso Introductorio de Scilab

En un script escribiremos lo siguiente (recuerde guardar el archivo después de escribirlo y antes de correrlo) ://para determinar si un número es par o non// contiene un valor predeterminado de aa=3disp("valor de a= "+string(a))if modulo(a,2)==0 then disp("el número "+string(a)+" es par")else disp("el número "+string(a)+" es non")enddisp("ver/editar archivo parnon2.sce")

ejecutado en la consola:-->exec('parnon2.sce',-1); valor de a= 3 el número 3 es non ver/editar archivo parnon2.sce

Está la opición de que las variables se escriban en la consola/area de trabajo, luego se corre el scipt o archivo ejecutable-->a=1

//se corre el archivo desde el editor del Scilab

El texto escrito sera://para determinar si es par o non un número dadoif modulo(a,2)=0 then disp(“el número “+string(a)+” es par”)else disp(“el número ”+string(a)+” es non”)end

También se puede correr/ejecutar en la consola, el primero se le escribe hasta arriba el clc

el número 4 es par -->exec('F:\c\cursoscilab\ejemplos\parnon.sce', -1) el número 4 es par Sin usar el clc y ejecutando el archivo parnon.sce se muestra lo siguiente:

-->a=9;

22Ernesto Calderón C. [email protected]

Page 23: Apuntes1 Del Curso Introductorio de Scilab

-->exec('parnon.sce',-1); el número 9 es non

Acrividades Derivadas: Circuito de conteo, for_vi:inc:vf_endDonde vi es valor inicial, inc es el incremento y vf es el valor final.Pseudocódigo:Para un valor_inicial:valor_del_incremento:valor_finalActividad1; actividad2;FinSu sintaxis:for var = lim1:incr:lim2actividad1actividad2end

Ejemplo:Desplegar en pantalla valores consecutivos desde 1 hasta el 5, (guardar en un archivo circuito_de_conteo.sce *)//despliega valores desde 1 hasta el 5 de uno en unofor i=1:5 disp(i)end-->exec('circuito_de_conteo.sce',-1); 1. 2. 3. 4. 5.

Desplegar en pantalla valores desde 1 hasta el 3 con incremento de 0.5//usando incrementos definidosdisp("despliega valores del 1 a 3 con incremento de 0.5")for i=1:0.5:3 disp(i)end

-->exec('circuito_de_conteo2.sce',-1); despliega valores del 1 a 3 con incremento de 0.5 1. 1.5 2. 2.5

23Ernesto Calderón C. [email protected]

*

Page 24: Apuntes1 Del Curso Introductorio de Scilab

3.

Otra manera de ejecutar el ejemplo anterior en la consola. Se usan comas o punto y coma para separar instrucciones.-->for i=1:0.5:3,disp(i),end 1. 1.5 2. 2.5 3.

Circuito de convergencia, while_condicion_endPseudocódigo:Mientras la condición se cumpla hacer Actividad1, Actividad2

Sintaxis:while condiciónactividad1;actividad2;end

Por ejemploe = 1;while e+1 > 1e = e/2;end

Ejemplo 2//usando el while_condicion_endi=0;while i<10 i=i+1; //contador de linea, incremento disp("contador i= "+string(i));enddisp("termina el circuito hasta que i>10");

su resultado en consola es:-->exec('c_convergencia.sce', -1) contador i= 1 contador i= 2 contador i= 3 contador i= 4

24Ernesto Calderón C. [email protected]

Page 25: Apuntes1 Del Curso Introductorio de Scilab

contador i= 5 contador i= 6 contador i= 7 contador i= 8 contador i= 9 contador i= 10 termina el circuito hasta que i>10

El comando input, permite mandar un mensaje de entrada de datos asignando a una variable que puede ser real o de tipo string (texto),

Para realizar menú se usa el comando select_case_else_endLa forma general es:select variablecase valor1 then... actividad1; actividad2;case valor2 then... actividad1; actividad2;case valor3 then... actividad1; actividad2;case valor4 then... actividad1; actividad2;else... actividad1; actividad2;end

Ejemplo del select_case

//usando select_case_else_end para hacer un menú//asignando un valor desde la consola A=opcion;if A~="" thenselect Acase 1 then disp("usted selecciono la opcion 1")case 2 then disp("usted selecciono la opcion 2")case 3 then disp("usted selecciono la opcion 3")else disp("valor no válido, sólo tiene 3 opciones")endend

Corrida del procedimiento

25Ernesto Calderón C. [email protected]

Page 26: Apuntes1 Del Curso Introductorio de Scilab

-->A=2; -->exec('menu2.sce',0); usted selecciono la opcion 2

-->A=1; -->exec('menu2.sce',0) usted selecciono la opcion 1

-->A=0; -->exec('menu2.sce',0); valor no válido, sólo tiene 3 opciones

Usando entrada de datos desde el script con el comando input.//comandos para escribir datos de entrada desde consola y desplegando su contenidox1=input("valor de x1=");disp("almacenando texto en x2");x2=input("¿Cómo estás? ",'s');disp("desplegando su contenido de cada variable asignada");disp("x1="+string(x1),"x2="+string(x2));disp("otra manera de desplegar contenido");disp(x1,"x1=",x2,"x2=");

Resultado de la ejecución-->exec('entrada_datos1.sce', -1)valor de x1=10 almacenando texto en x2 ¿Cómo estás? bien desplegando su contenido de cada variable asignada x2=bien x1=10 otra manera de desplegar contenido x2= bien x1= 10.

Tarea 1Aplicar el comando input en los ejemplos anteriores, si lo requieren.

Tarea 2

26Ernesto Calderón C. [email protected]

Page 27: Apuntes1 Del Curso Introductorio de Scilab

Elaborar una tabla de frecuencias con intervalo de 10, a partir de los datos aleatorios trabajados en clase, del 0 a 50.

Se les recuerda que pueden generar un procedimiento (script) inicial que a su vez mande a llamar uno o varios procedimientos (scripts), esta forma ayuda a resolver problemas muy grandes.

Guardando datos en archivoPara correr este script/procedimiento es necesario correr tabla_frecuencias.sce, hecho en clase y enviado, este archivo corre previamente a lectura5.sce que contiene los cálculos iniciales a necesitar, enviado a sus correos. Se escriben algunos archivo.sce:

Procedimiento para crear tabla_frecuencias.sce

//tabla de frecuencias//1)leer datos, la siguiente instrucion corre lectura5.sceexec('lectura5.sce',0);//usamos la variable separada pesdos para la tabla de frecuencia//al corre lectura5.sce, conocemos el total de datos por columna, n//inicializar contadores para cada intervalo de 10i1=0; i2=0; i3=0; i4=0; i5=0;for i=1:n if pesdos(i)>=0 then if pesdos(i)<=10 then i1=i1+1; //disp("hola10, "+string(i1)); end end if pesdos(i)>10 then if pesdos(i)<=20 then i2=i2+1; end end if pesdos(i)>20 then if pesdos(i)<=30 then i3=i3+1; end end if pesdos(i)>30 then if pesdos(i)<=40 then i4=i4+1; end end if pesdos(i)>40 then if pesdos(i)<=50 then i5=i5+1;

27Ernesto Calderón C. [email protected]

Page 28: Apuntes1 Del Curso Introductorio de Scilab

end endenddisp(" 0 a 10, "+string(i1));disp("10 a 20, "+string(i2));disp("20 a 30, "+string(i3));disp("30 a 40, "+string(i4));disp("40 a 50, "+string(i5));disp('para guardar datos debe generar datos para la tabla de frecuencias');

Resultado de la ejecución:-->exec('F:\d\tabla_frecuencias.sce', -1) datos leidos y guardados en variables pesuno, pesdos,... estadística básica aplicada a las variables 0 a 10, 3 10 a 20, 4 20 a 30, 3 30 a 40, 4 40 a 50, 6

Script/procedimiento para crear guarda_resultados.sce

//lee 1 arch si existe abre y vuelve a escribirlo//al abrirlo en excel los resultados,decir que si y continuaru=file('open','hola.xls','unknown');write(u,'frecuencias, con intervalos de 10, 0<=x<=50, con x aleatorio');write(u,i1);write(u,i2);write(u,i3);write(u,i4);write(u,i5);file('close',u);disp("datos guardado en hola.xls con formato de texto")

Resultado de la ejecución:-->exec('F:\d\guardar_resultados.sce', -1) datos guardado en hola.xls con formato de texto

Creación de funcionesLas funciones se escriben en el editor de SciNotes, puede escribir una función en un archivo o varias funciones en un archivo, al guardar el paquete le asigna la extensión sci, teniendo el archivo.sci, generalmente se guarda una función. Las funciones se ejecutan en la consola o pueden ser llamadas en un procedimiento (archivo.sce)

28Ernesto Calderón C. [email protected]

Page 29: Apuntes1 Del Curso Introductorio de Scilab

Es importante respetar la sintaxis para disminuir o evitar errores al usarla. No deben tener nombres como F1, F2,… F12, ya que están asignadas para algunas funciones propias del Windows o de otro paquete, en el caso de F1 es la tecla función que generalmente se usa para pedir ayuda en la mayoría de los paquetes o programas. No debe coincidir su nombre con los nombres de las funciones propias del paquete, palabras reservadas, consultar referencias. No dejen espacio en el nombre de la función.

Mandando error de nombre de la función, desconocida, entonces podemos usarla como función propia o creada por el usuario.

Sintaxis con un resultado de salida y varios parámetros de entradafunction resultado = nombrefuncion(par1, par2, ...) actividades resultado=actividadendfunction

Sintaxis usando varios resultados de salida y varios parámetros de entradafunction [res1, res2, ...] = nombrefuncion(par1, par2, ...) actividad1 … res1=actividad_n-1 res2=actividad_nendfunction

Ejemplos de la creación de funciones y resultado en la consola:El comando deff se usa para definir cualquier función en la consola, no se guarda al salir del Scilab.

-->deff('y=f(x)','y=x+1.5'); -->f(2) ans = 3.5

Puedo graficar adicionando lo siguiente: x va de 0 a 10

-->x=0:10; -->plot(x,f(x));

También se puede crear de la siguiente manera:-->function [y1]=fun1(x), y1=2*x+1, endfunction -->fun1(1) ans = 3.

29Ernesto Calderón C. [email protected]

Page 30: Apuntes1 Del Curso Introductorio de Scilab

Escribiendo una función en un archivo.sce, puede haber problemas si se corre los ejemplos de manera continua, por lo que se sugiere limpliar la memoria con clear o funcprot(0) antes de ejecutar los ejemplos. Puede cambiar los nombres de las funciones para evitar problemas de duplicidad, y continuar su trabajo.El comando fruncprot(0) permite redifinir variables de la función.

//este archivo contiene ejemplo de funciones//así se carga/llama al *.sci de funciones//-->exec('funciones1.sci',0) function [y]=fun1(x), y=2*x+1, endfunction

function [x,y]=sumrest(a, b)x=a+by=a-bendfunction

Otra manera de crear funciones usando un procedimiento, archivo.sce://procedimiento para escribir cualquier función, dando su resultadofu=input("Ingrese la funcion f(x) = ",'s');x=input("ingrese el valor de x= ");deff('y=f(x)','y='+fu);disp("f("+string(x)+")="+string(f(x)));

Resultado de la corrida o ejecución:-->exec('F:\d\funcion3.sce', -1)Ingrese la funcion f(x) = 2-x+x^3/2ingrese el valor de x= 0 f(0)=2

Escribiendo varias funciones en un mismo archivo.sce

Resultado de la ejecución:-->funcprot(0); -->exec('funcion0.sce',0); -->ftxt('hola') ans = escribio= hola

Al escribir una segunda función en el mismo archivo, es necesario volverlo a llamar:Mostrando el contenido del archivo funicion1.sce

30Ernesto Calderón C. [email protected]

Page 31: Apuntes1 Del Curso Introductorio de Scilab

//con dos o más funcionesfunction [texto]=ftxt(a) texto='escribio= '+string(a);endfunction

function [y]=f_1(x) y=1+x/2;endfunction

Ejecutando funciones en la consola:-->exec('funcion1.sce',0); -->f_1(2) ans = 2.

Agregamos una tercera función a funcion1.sce//con dos más funcionesfunction [texto]=ftxt(a) texto='escribio= '+string(a);endfunction

function [y]=f_1(x) y=1+x/2;endfunction

function [result1,result2]=fdos(a,b) suma=a+b; resta=a-b; result1='la suma es = '+string(suma) result2='la resta es = '+string(resta)endfunction

Resultado de la ejecución de la función en la consola-->exec('funcion1.sce',0); -->fdos(3,5) ans = la suma es = 8 Nota si no se especifica que variable de salida quiero, manda el resultado a la primera variable de salida de izquierda a derecha, result1, cuya operación es la suma.Si se especifican las dos variables de salida, manda el resultado en orden de derecha a izquierda como está escrito en el contenido de la funcion1.sce.

31Ernesto Calderón C. [email protected]

Page 32: Apuntes1 Del Curso Introductorio de Scilab

-->[r1,r2]=fdos(3,5) r2 = la resta es = -2 r1 = la suma es = 8

Parte matemática II

Interpolando datosPor el método de Lagrange de 2do y 3er orden, nos permite calcular en valor entre datos numéricos, el cual es útil en diferentes áreas: dado un conjunto de 2 o 3 pares de datos, calcular un valor específico no tabulado. Polinomio de orden n se expresa como fn(x) o Pn(x). Para un polinomio de segundo grado se necesitan 3 pares de datos y para un f3(x) se requiere 4 pares de datos.

Los modelos matemáticos:

Los datos para un orden 2, se pueden escribir como dos vectores, el par x,y y una variable a interpolar que le llamaremos xint. A continuación se verá el contenido escrito en el script interpolar.sce//interpolación por el método de Lagrange//usando funcion //Recuerde teclear las siguientes instrucciones// funcprot(0); exec('interpolar.sce',0) ;//creando la función para 3 pares de datos x,y xinfunction [yinter2]=finter2(x,y,xin) L1=y(1)*((xin-x(2))*(xin-x(3)))/((x(1)-x(2))*(x(1)-x(3))) L2=y(2)*((xin-x(1))*(xin-x(3)))/((x(2)-x(1))*(x(2)-x(3))) L3=y(3)*((xin-x(1))*(xin-x(2)))/((x(3)-x(1))*(x(3)-x(2))) yinter2=L1+L2+L3;endfunction//creando función para 4 pares de datos x,y xinfunction [yinter3]= finter3(x,y,xin) L1=y(1)*((xin-x(2))*(xin-x(3))*(xin-x(4)))/((x(1)-x(2))*(x(1)-x(3))*(x(1)-x(4))) L2=y(2)*((xin-x(1))*(xin-x(3))*(xin-x(4)))/((x(2)-x(1))*(x(2)-x(3))*(x(2)-x(4))) L3=y(3)*((xin-x(1))*(xin-x(2))*(xin-x(4)))/((x(3)-x(1))*(x(3)-x(2))*(x(3)-x(4))) L4=y(4)*((xin-x(1))*(xin-x(2))*(xin-x(3)))/((x(4)-x(1))*(x(4)-x(2))*(x(4)-x(3))) yinter3=L1+L2+L3+L4;endfunction

A continuación se dan los valores necesarios del par x,y y el valor a interpolar de x, para el siguiente valor a interpolar de 6.

32Ernesto Calderón C. [email protected]

Page 33: Apuntes1 Del Curso Introductorio de Scilab

x=[2 4 7 9 10 13 15], y=[0.1 0.3 0.5 0.8 1 1.2 1.4]Ejemplo, escritura y ejecución en la consola de Scilab, si vamos a usar la función finter2(x,y,xin) se necesitarán 3 pares de datos por lo que separamos en otra variable de nombre similar: -->x=[2 4 7 9 10 13 15] x = 2. 4. 7. 9. 10. 13. 15. -->y=[0.1 0.3 0.5 0.8 1 1.2 1.4] y = column 1 to 6 0.1 0.3 0.5 0.8 1. 1.2 column 7 1.4

O escribir los datos de la siguiente manera:-->x=[2 4 7 9 10 13 15]; -->y=[0.1 0.3 0.5 0.8 1 1.2 1.4];

Separando variables y reescribiéndolas en una nueva variables xx, yy xin=6 para la función finte2(x,y,xin):-->xx=[4,7,9]; -->yy=[0.3,0.5,0.8] yy = 0.3 0.5 0.8 -->yy2=finter2(xx,yy,6) yy2 = 0.4

Separando variables y reescribiéndolas en una nueva variables x3, y3 xin=6 para la función finte3(x,y,xin), ahora escribimos en la consola lo siguiente:-->x3=[4,7,9,10]; -->y3=[0.3,0.5,0.8,1]; -->yy3=finter3(x3,y3,6) yy3 = 0.4

Solución de ecuaciones no linealesf(x) = a0 + a1 x +a2 x2 + a3 x3 + … anxn= 0 , si f(x)=0 entonces x es raízEjemplos:x2−2x+3=0deff(‘nombre_funcion’,’funcion’) : para definir una función en la consola/área de trabajo.

33Ernesto Calderón C. [email protected]

Page 34: Apuntes1 Del Curso Introductorio de Scilab

fsolve(valor_inicial,funcion) : encuentra el valor de x, mediante procedimientos iterativos. Se sugiere que el valor inicial sea 0 o entre 0 y 10. Recordar que no todo tipo de ecuación no lineal se resuelve con el solve. Si se tiene mayor número de incógnitas en una ecuación, puede que no de un buen resultado. (verificar la operación de manera manual paso a paso o con cualquier paquete matemático). Usar otro método de optimización.

Nota respetar la asignación de variable de salidadeff(‘y=f(x)’, ‘y=x^2-2*x+3’); fsolve(0,f)

Verificación manual de la ecuación de segundo grado x1,2=−b±√b2−4ac

2a, x2−2x+3=0 ,a=3, b=-2 c=1

-->a=3; b=-2; c=1; -->d=b^2-4*a*c d = - 8. -->sqrt(d) ans = 2.8284271i

Nota, la solución es un número complejo para dicha ecuación, ya que su discriminante d, es un número negativo. Da el resultado imaginario si se le saca raíz cuadrada.Se puede graficar la función para verificar visualmente, usando -10≤x≤10 o x=linespace(-10,10), automáticamente da 100 unidades en el intervalo, o usar x=linespace(-10,10,21), esto es 10 elementos considerando el 0.-->x=-10:10; -->y=x^2-2*x+3; -->plot(x,y)

Tarea: cambiar el signo de

Ejemplo1+4 x−16 x2+3 x3+3 x4=0-->deff('yy=ff(x)','yy=1+4*x-16*x^2+3*x^3+3*x^4') -->fsolve(0,ff) ans = - 0.1534801

Integración

Ejemplo de integración definida ∫lim inf

lim ¿

f ( x )dx

Sintaxis: intg(lim_inf,lim_sup,funcion)

34Ernesto Calderón C. [email protected]

4

3 5

2

1 4 2x x x dx

Page 35: Apuntes1 Del Curso Introductorio de Scilab

Primero se define la función, tomar en cuenta los limites inferior y superior para escribirlo en la función intg.-->deff('y=fi(x)','y=1-x-4*x^3+2*x^5'); -->intg(-2,4,fi) ans = 1104.

Ecuación diferencial ordinaria de primer orden. EDORepresentación matemática, de la EDO o en inglés ODE.dydx

= y '=f ( x , y )

PVI, problema del valor inicial; indican las condiciones iniciales de la ecuación diferencial; intervalo de x, y inicial.dydx

= y '=f ( x , y )=0.3 (2− y ) y PVI: en 0≤x≤20, con y(0)=0.1.

Se usa la función ode(yini,xini,intervalo_x,dydx), en la consola se escribe primero la ecuación diferencial ordinaria, se genera los valores del intervalo de x, luego la función ode y sus parámetros:Linspace(vi,vf) divide el intervalo en 100 subdivisiones, por omisión (default) n=100, calculando el tamaño de paso, h=(vf-vi)/n-->function [dydx]=fty(t,y), dydx=0.3*y*(2-y), endfunction; -->t0=0; tf=20; y0=0.1; -->t=linspace(t0,tf); -->y=ode(y0,t0,t,fty); -->plot2d(t,y); Figure saved. -->

Disminuimos el tamaño de paso o las sudivisionesDe n para que puedan ver el resultado de manera tabularTecleamos lo siguiente en la consola, mandando sus resultados:

-->t=0:2:20 t = column 1 to 6 0. 2. 4. 6. 8. 10. column 7 to 11 12. 14. 16. 18. 20. -->y=ode(y0,t0,t,fty) y = column 1 to 3 0.1 0.2974999 0.7343112

35Ernesto Calderón C. [email protected]

t y 0 0.1 2 0.2974999 4 0.7343112 6 1.316525 8 1.7295574 10 1.910044 12 1.9720265 14 1.9914914 16 1.9974296 18 1.9992251 20 1.9997665

Page 36: Apuntes1 Del Curso Introductorio de Scilab

column 4 to 6 1.316525 1.7295574 1.910044 column 7 to 8 1.9720265 1.9914914 column 9 to 10 1.9974296 1.9992251 column 11 1.9997665

Tarea: colocar los resultados en una tabla en Word para una mejor visualización.

36Ernesto Calderón C. [email protected]

Page 37: Apuntes1 Del Curso Introductorio de Scilab

ANEXO A

Secuencia de pasos para crear un acceso directo del archivo que ejecuta el Scilab, en la carpeta principal.

La siguiente imagen muestra en cuadros rojos de izquierda a derecha los pasos para crear el acceso directo; seleccionando primero la carpeta copiada en la USB o en cualquier PC, cuando no se instala el programa.

Figura 1A. Imagen de los primeros pasos para crear el acceso directo

Se selecciona primero la carpeta del Scilab copiado, luego posicionarse sin marcar nada con el mouse al lado derecho donde está el contenido de la carpeta y hacer clic con el botón izquierdo del mouse activar la ventana o lugar, hacer clic con el botón derechodel mouse aparece un menú, recorriendo el puntero hacia “Nuevo”, luego seleccionar la opción , ver figura 1A.

37Ernesto Calderón C. [email protected]

Page 38: Apuntes1 Del Curso Introductorio de Scilab

Figura 2A. Imagen de la continuación de la creación del acceso directo

Figura 3A. Imagen de la continuación de la creación del acceso directo

38Ernesto Calderón C. [email protected]

Page 39: Apuntes1 Del Curso Introductorio de Scilab

Figura 5A. Imagen de la creación del acceso directo finalizada, el cual se ejecutará con un doble clic con el botón izquierdo del mouse.

ANEXOB

Secuencia de imágenes que indican los pasos para cambiar de subdirectorio o carpeta de trabajo.

39Ernesto Calderón C. [email protected]

Figura 4A. Imagen de la continuación de la creación del acceso directo.

Page 40: Apuntes1 Del Curso Introductorio de Scilab

40Ernesto Calderón C. [email protected]

Page 41: Apuntes1 Del Curso Introductorio de Scilab

REFERENCIASBIBLIOGRÁFICAS

REFERENCIAS DE ARCHIVOS DIGITALES, Accesados enero 2014.

Introducción a SCILAB. Héctor Manuel Mora Escobar. Departamento de Matemáticas. Universidad Nacional de Colombia. Bogotá, mayo del 2005. http://www.hectormora.info/sci.pdf

Introduction to Scilab. Michael Baudin. September 2011http://forge.scilab.org/index.php/p/docintrotoscilab/downloads/311/

UNA INTRODUCCIÓN RÁPIDA A SCILAB. Rosa Echevarría Líbano – Dpto. Ecuaciones Diferenciales y Análisis Numérico – Universidad de Sevilla. ApuntesScilab.pdfhttp://personal.us.es/echevarria/docencia.html

Introducción al SCILAB. LABORATORIO DE COMPUTACIÓN DE ALTO DESEMPEÑO (LCAD). FACULTAD DE INGENIERÍA. UNIVERSIDAD NACIONAL DE ASUNCIÓN. Febrero/Marzo 2005http://www.ing.una.py/pdf/calculo/scilab/CURSO%20DE%20SCILAB.pdf

41Ernesto Calderón C. [email protected]

Page 42: Apuntes1 Del Curso Introductorio de Scilab

Manual de iniciación al Scilabhttp://docencia-eupt.unizar.es/ctmedra/manual_scilab.pdf

----------------------------------------------------------Ernesto Calderón [email protected] Scilab

42Ernesto Calderón C. [email protected]