Practica2 LCA1 Scilab
Practica2 LCA1 Scilab
Practica2 LCA1 Scilab
- Introducción a Scilab II
Objetivo. El objetivo de esta práctica es continuar con las herramientas más usuales de Scilab, tales
como el manejo de polinomios, el cálculo de raíces y las instrucciones de graficación en 2D y en 3D.
Introducción.
Manejo de Polinomios en Scilab.
Además de las matrices, otro de los objetos básicos en Scilab son los polinomios. Un polinomio en Scilab se
puede representar por un vector fila conteniendo los coeficientes del dicho polinomio. En general, un
polinomio de grado n arreglado en potencias descendentes de la variable x tiene la forma
P ( x) = an x n + an −1 x n −1 + ... + a1 x + a0
Scilab proporciona varias funciones que permiten trabajar con polinomios, en la siguiente tabla se describen
brevemente las principales.
función descripción
roots(P) Obtiene las raíces del polinomio P
coeff(P) Obtiene los coeficientes del polinomio P
poly(c,'x','r'|'c') Obtiene el polinomio en potencias de x cuyas raíces o coeficientes son
los dados en el vector r
horner(P,valor) Evalúa el polinomio P en el valor indicado.
conv(A,B) Multiplica los polinomios A, B expresados por sus coeficientes
[R,Q]=pdiv(B,A) Realiza la división de polinomios B/A calculando cociente Q y residuo R
Ejemplo 2.1. El símbolo usado para la variable del polinomio es arbitrario y se puede utilizar cualquier literal,
por ejemplo, el polinomio los polinomios A( x) = 4 x 3 + 3 x 2 + 2 x + 1 , B ( x ) = x 3 − 1 , C (t ) = t 2 + 3t + 2 se
define en Scilab como sigue:
Dos polinomios en la misma variable se pueden sumar, restar, multiplicar y dividir, por ejemplo:
A+B
ans =
2 3
2 + 2x + 3x + 5x
A-B
ans =
2 3
2x + 3x + 3x
A*B
ans =
2 3 4 5 6
1 + 2x + 3x + 5x + 2x + 3x + 4x
A/B
ans =
2 3
1 + 2x + 3x + 4x
----------------
3
1 + x
Solución:
A=poly([1 1 1 1 1],'s','c') //Define el polinomio A a partir de sus coeficientes
A =
2 3 4
1 + s + s + s + s
// Es decir, A( s) = 1 + s + s 2 + s3 + s 4
B=poly([1 1 2 3],'s','r') //Define el polinomio B a partir de sus raíces
B =
2 3 4
6 - 17s + 17s - 7s + s
// Es decir, B( s) = 6 − 17 s + 17 s 2 − 7 s3 + s 4
r=roots(A) //Calcula las cuatro raíces de A
r =
0.3090170 + 0.9510565i
0.3090170 - 0.9510565i
- 0.8090170 + 0.5877853i
- 0.8090170 - 0.5877853i
horner(A,0.309017+0.9510565*%i) //Verifica que 0.3090170+0.9510565i es raíz de A
ans =
- 1.337D-09 + 7.331D-08i
// Obsérvese que no da cero porque se usaron solo 7 decimales
// Sin embargo, el resultado es cercano a cero.
Laboratorio de Electrónica “Ing. Luis García Reyes”. UMSNH-FIE 2
Elaboró: José Juan Rincón Pasaye
Práctica No. 2.- Introducción a Scilab II
// Para obtener un resultado más cercano a cero usamos más dígitos:
// Se pueden usar todos los dígitos sin escribirlos, puesto que Scilab
// los almacena todos, pero solo despliega los que requiere el formato actual:
horner(A,r(1))//Verifica la primer raíz calculada
ans =
6.661D-16 + 1.388D-15i
// Obsérvese que el resultado es casi cero (muy cercano a %eps).
Gráficas en 2D
Los gráficos son una poderosa herramienta visual para la representación e interpretación de datos, por esta
razón Scilab incorpora un poderoso conjunto de herramientas gráficas, el cual es demasiado extenso para
tratarse en este curso, de manera que solamente se tratarán los comandos básicos para el trazado de gráficas
en 2D y en 3D.
1
Ejemplo 2.2. Obtener la gráfica de la función f ( x) =
1 + x2
(curva de Agnesi) en el intervalo de valores de la variable
independiente: −5 ≤ x ≤ 5 .
Con lo cual se obtiene la figura 2.2. Como puede verse, en la figura 2.2 es muy difícil apreciar a simple vista la
ubicación exacta de la intersección buscada. Para mejorar la información que nos proporciona la gráfica
accederemos al manejador de propiedades de los ejes de la figura para modificar el rango vertical y horizontal.
xgrid(1);
//Activa rejilla de la gráfica en color negro
a=get("current_axes");
//Obtiene manejador de propiedades de los ejes
a.data_bounds=[-1,1,0,1];
//Reduce rango de visualización de la gráfica
//eje x de -1 a 1,eje y de 0 a 1
Mejoramiento de gráficas.
Una gráfica bien hecha debe representar la información que se quiere mostrar de manera que el usuario que
observa la gráfica (no quien la creó) advierta a simple vista lo que se quiere resaltar. Para lograr una buena
gráfica hay que considerar lo siguiente:
Ejemplo 2.4: La gráfica de la figura 2.3 se puede mejorar mediante los siguientes comandos
Normalmente ocurre que una excelente gráfica visualizada en la pantalla a colores no necesariamente resulta
en una buena gráfica impresa en papel en blanco y negro o tonos de gris. Por esta razón es recomendable
editar los colores de la gráfica de la figura 2.4 para obtener una versión para imprimirse en tonos de gris como
la figura 2.5. Para lograr la figura 2.5 se requiere modificar el color de las curvas modificando la propiedad de
color 'foreground' mediante el comando plot. El valor de esta propiedad de color se especifica mediante
un arreglo de tres componentes [R G B], donde la primera componente (R) es el valor de Rojo, la segunda (G)
es valor de Verde y la tercera (B) es el valor de azul. Los valores son fracciones de 0 a 1, por ejemplo
Ejemplo 2.5. El siguiente código es el usado para generar la figura 2.5 para lograr una buena visulización en
tonos de gris.
La versión en tonos de gris mostrada en la figura 2.5, se ha exportado a un archivo mediante la opción [export
to] al tipo encapsulated postScript (EPS) del menú [File] de la figura. mientras que la grafica a color de la figura
2.4 fue copiada mediante la opción [copy to clipboard], la cual genera un gráfica de tipo mapa de bits o
bitmap.
Copiado tipo bitmap. Hace una captura de la pantalla con sus atributos de color y resolución.
Copiado tipo encapsulated PostScript (EPS). Copia la información de objetos que aparecen en la gráfica, su
resolución dependerá del medio final en que se visualice o imprima la figura. Permite la post-edición
independiente de cada objeto que aparece en la gráfica.
El resultado se muestra en la parte izquierda de la figura 2.6. En este caso se sabe que el polinomio tiene tres
raíces, las cuales no se aprecian en esta figura, evidentemente se eligió mal el rango de valores de x. Se corrige
este rango eligiendo ahora 0.5 ≤ x ≤ 3.5 y − 2 ≤ y ≤ 2 obteniéndose la figura 2.6 de la derecha, en la cual se
aprecian claramente las raíces esperadas.
600 2
500 1.5
1
400
0.5
300
0
200
-0.5
100 -1
0 -1.5
-100 -2
0 2 4 6 8 10 0.5 1 1.5 2 2.5 3 3.5
Figura 2.6 Gráfica del polinomio [1 2 3] y mejoramiento del rango horizontal para mostrar las raíces.
Gráficas Paramétricas
El comando plot permite asignar valores a cada eje por separado, esto permite realizar el gráfico convencional
de f(x) contra x, pero también se puede graficar f1(x) contra f2(x) convirtiéndose entonces x en un parámetro
cuyo valor se puede asignar en el rango requerido.
Ejemplo 2.7. Obtener la figura de Lissajous correspondiente a la gráfica paramétrica de las funciones
sinusoidales y1 ( x) = sin(3x) , y2 ( x) = cos(5 x)
x=0:0.01:2*%pi;
y1=sin(3*x);
y2=cos(5*x);
scf(1); //Genera nueva figura numerada como figura 1
plot(x,y1,x,y2,'--r'); // Grafica de y1, y2 contra x
legend('y_1=sin(3x)','y_2=sin(5x)');
xgrid(1); //Activa la rejilla color negro
//
scf(2); //Genera otra figura numerada como figura 2
plot(y1,y2); // Dibuja figura de Lissajous
xgrid(1); //Activa la rejilla color negro
y2
0
-0.5 -0.5
-1 -1
0 1 2 3 4 5 6 7 -1 -0.5 0 0.5 1
x y1
Figura 2.7 Gráficas de y1, y2 contra x . Figura 2.8 Gráfica de y2 contra y1
plot2d3. Gráfica de "tallos" es decir, dibuja líneas verticales desde el eje horizontal hasta los puntos de
la gráfica.
plot2d2. Gráfica escalonada, es decir, traza líneas horizontales a la altura de cada punto de la gráfica y
une cada una con la siguiente mediante trazos verticales.
La gráfica obtenida se muestra en la figura 2.8 en el lado izquierdo. La cual no parece ser la grafica de una
tangente trigonométrica pues se espera una gráfica discontinua, además se espera que sea periódica cada π
radianes, ya que tan( x) = tan( x ± π ) .
Solución 2: Usando un comando plot y marcadores punteados en lugar de líneas, Pero además restringiendo
el rango vertical de -10 a 10:
clf;
plot(x,y,'o');
a=get("current_axes"); //Obtiene manejador de propiedades de los ejes
a.data_bounds=[0,2*%pi,-10,10]; //ajusta rangos: eje x de -1 a 1,eje y de 0 a 1
xgrid(1); //Activa la rejilla color negro
En el lado derecho de la figura 2.8 se muestra el resultado. Obsérvese que ahora si se notan las
discontinuidades y la periodicidad esperada cada pi radianes.
Laboratorio de Electrónica “Ing. Luis García Reyes”. UMSNH-FIE 8
Elaboró: José Juan Rincón Pasaye
Práctica No. 2.- Introducción a Scilab II
100 10
80
60 5
40
0
20
0
-5
-20
-40 -10
0 1 2 3 4 5 6 0 1 2 3 4 5 6
Figura 2.8 Gráfica de tan(x) con una mala elección de escala vertical y tipo de línea y su mejora.
Solución 3: Usando un comando plot2d2 o plot2d3 y la misma restricción del rango vertical de -10 a 10:
scf(1);
plot2d3(x,y,2); //Gráfica de "tallos"
a=get("current_axes"); //Obtiene manejador de propiedades de los ejes
a.data_bounds=[0,2*%pi,-10,10]; //ajusta rangos: eje x de -1 a 1,eje y de 0 a 1
a.children.children.thickness=2; //grosor de la línea =2
xgrid(1); //Activa la rejilla color negro
scf(2);
plot2d2(x,y,2); //Gráfica escalonada.
a=get("current_axes"); //Obtiene manejador de propiedades de los ejes
a.data_bounds=[0,2*%pi,-10,10]; //ajusta rangos: eje x de -1 a 1,eje y de 0 a 1
a.children.children.thickness=2; //grosor de la línea =2
xgrid(1); //Activa la rejilla color negro
En la parte izquierda de la figura 2.9 se muestra la gráfica obtenida con el comando plot2d3 . En la parte
derecha de esa misma figura 2.9 se muestra el resultado utilizando el comando plot2d2.
10 10
5 5
0 0
-5 -5
-10 -10
0 1 2 3 4 5 6 0 1 2 3 4 5 6
Figura 2.9 Graficas de tan(x) obtenidas mediante stem y stairs.
Arreglos de Subgráficas.
En ocasiones es conveniente representar en una misma ventana varias gráficas para ilustrar diferentes
aspectos de un mismo tema o comportamientos distintos de un mismo sistema, etc. En Scilab una ventana de
figura se puede subdividir en un arreglo de m renglones y n columnas de gráficas y cualquier subdivisión puede
hacerse activa con el comando subplot (m,n,k), el cual establece como activa el área k-ésima. El número
de área (k) se enumera de izquierda a derecha comenzando por el renglón superior y continuando con los
renglones de arriba hacia abajo.
Ejemplo 2.9. Con los siguientes comandos se genera el arreglo de gráficas mostrado en la figura 2.10
sin(x) cos(x)
1 1
0.5 0.5
0 0
-0.5 -0.5
-1 -1
0 2 4 6 0 2 4 6
0.5 0.5
0 0
-0.5 -0.5
-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
Consideraciones adicionales:
El comando plot crea una gráfica de vectores o columnas de matrices. La forma de la orden es plot(x1,
y1, S1, x2, y2, S2, .....) donde (xn, yn) son arreglos de coordenadas de puntos a graficar y Sn
son cadenas opcionales que especifican color, marcas, grosor y/o estilos de línea. Algunas de estas cadenas se
muestran en la siguiente tabla y se pueden combinar, por ejemplo la cadena '-or' especifica una línea roja
con marcas circulares.
Gráficas en 3D.
En Scilab existen varias maneras de realizar gráficas en tres dimensiones. Sin embargo, en este manual
solamente se describirán dos tipos básicos de gráficas en tres dimensiones: Líneas curvas en tres dimensiones y
superficies en tres dimensiones.
Ejemplo 2.10.
t=0:0.001:1; // Valores del parámetro t
x=sqrt(1-t.^2).*sin(24*%pi*t); // Coordenadas x(t)
y=sqrt(1-t.^2).*cos(24*%pi*t); // Coordenadas y(t)
z=t; // Coordenadas z(t)
param3d(x,y,z); // Grafica línea que une las coordenadas.
a=get("current_axes"); //Obtiene manejador de propiedades de los ejes
a.children.thickness=2; //grosor de la línea =2
a.children.foreground=2; //color de linea = azul
xgrid(1);
0.8
0.6
0.4
0.2
0
1
1
0 0.5
0
-0.5
-1 -1
Figura 2.11. Ejemplo de línea tridimensional
Superficies en 3D.
Las superficies se pueden trazar mediante los comandos meshgrid, surf y mesh. Para generar la grafica de
una superficie tridimensional primeramente se procede como sigue:
Ejemplo 2.11. Con el siguiente código se genera la gráfica tridimensional de la figura 2.12. correspondiente a la
función de dos variables
2
+ y2 )
z = e −0.4( x cos ( x 2 + y 2 )
Obsérvese que la gráfica tiene la forma de una red o malla tridimensional, de ahí el nombre del comando
(mesh). Una mejora visual se puede obtener mediante el comando surf, el cual colorea la cuadrícula dando un
aspecto más sólido a la superficie. También se puede agregar la información de las líneas de nivel, las cuales
representan los cortes a diferentes alturas constantes de las superficies generadas. Esto último se hace
mediante contour.
Ejemplo 2.12. Uso de los comandos surf y contour. En este ejemplo se generan cinco versiones (ver figura
2.13) de la gráfica correspondiente a la función de dos variables
2
+ y2 )
z = e −0.3( x cos( x 2 + y 2 )
2
+ y2 )
Figura 2.13. Diferentes aspectos de la gráfica de la función z = e −0.3( x cos( x 2 + y 2 )
Laboratorio de Electrónica “Ing. Luis García Reyes”. UMSNH-FIE 14
Elaboró: José Juan Rincón Pasaye
Práctica No. 2.- Introducción a Scilab II
Desarrollo de la Práctica.
Durante el desarrollo de esta práctica se presentan los comandos para el manejo de polinomios y para generar
gráficas en 2D y 3D. En cada explicación se dan ejemplos del funcionamiento del ambiente de Scilab, y se
proponen algunos ejercicios.
Reportar:
1. Investigar ¿Que son las líneas de nivel? Explicar en una a dos páginas.
2. Investigar las opciones para el mapeo de colores de una figura: colormap.
3. Obtener la superficie en 3D correspondiente a la función de dos variables z = e −0.4 x sin( x )cos ( x 2 + y 2 ) ,
en el rango −2.5 ≤ x ≤ 2.5 , −2.5 ≤ y ≤ 2.5 , usando el mapeo de color hsvcolormap y mostrando las
líneas de nivel a 15 niveles sobre la gráfica 3D.
4. Graficar las líneas de nivel en 2D a 15 niveles, correspondientes a la figura anterior.
x2 + 1
5. Calcular a mano la división de polinomios para la expresión y escribir los comandos de
( x + 1)( x + 2)
Scilab para verificar el cálculo.
6. Escribe el código para graficar una semiesfera de radio 1 y anexa la gráfica obtenida. Sugerencia: usa
valores lógicos para multiplicar por cero los valores complejos que no se pueden graficar.