Académique Documents
Professionnel Documents
Culture Documents
Por
Distribuido por
i nfoClearinghouse.com
http://www.engineering.usu.edu/cee/faculty/gurro/Software_Calculators/Scil
ab_Docs/ScilabBookFunctions.zip
en:
http://www.engineering.usu.edu/cee/faculty/gurro/Scilab.html
Funciones enSCILAB 5
Variables globales y locales6
Comandos de funciones especiales6
Depuración7
Ejemplo de una función - Cálculo de la norma Frobenius de una matriz8
Entrada/salida enSCILAB 9
Guardar y cargar variables9
Salida no formateada a la pantalla9
Salida sin formato a un archivo9
Trabajar con archivos.10
Escribir en archivos.10
Lectura desde el teclado11
Lectura de archivos12
Exercises 19
Para y mientras que los bucles se pueden terminar con la interrupción de comando, por
ejemplo, intente lo siguiente:
Todas estas construcciones pueden programarse en ficheros siguiendo una estructura similar a
la de los programas FORTRAN o Visual Basic, y luego ejecutarse desde SCILAB. Estos archivos se
denominan scripts. Por ejemplo, escriba el siguiente script SCILAB en un archivo llamado
program1.txt:
exec('program1.txt') <enter>
Tenga en cuenta que puesto que x es un vector de fila (en realidad una matriz con n = 1 fila y
m = 7 columnas), la función tamaño le proporciona un array de dos valores en la
sentencia[n,m] = tamaño(x). Luego, m se usa en el bucle para el bucle y en el cálculo de
xbar.
Como alternativa al uso de un vector de fila (o columna) está el uso de listas. Una lista es una
colección de objetos de datos no necesariamente del mismo tipo. En el siguiente ejemplo nos
limitamos a usar listas de números. Para definir una lista utilizamos el comando list, por
ejemplo, try:
En este caso, el tamaño de la lista, a diferencia del de un vector o matriz, se proporciona como
un único número. A continuación se muestra una versión modificada del script en el programa
1.txt. Escriba este archivo en program2.txt y guárdelo en el subdirectorio bin del directorio
SCILAB:
deff('[z]=Euler(r,theta)','z=r*exp(%i*theta)') <enter>
Euler(1.0,-%pi/2) <enter>enter
deff('[r,theta]=cartpol(x,y)',['r=sqrt(x^2+y^2)'; 'theta=atan(y,x)'])
<enter>[radio,ángulo] = cartpol(3., 4.) <enter>>enter
Estas funciones se podían haber definido con la opción Definir función de usuario... del menú
Funciones de SCILAB. Por ejemplo, seleccione esta opción e introduzca lo siguiente (su
respuesta se muestra en cursiva):
deff('[x,y]=polcart(r,theta)',['x=r*cos(theta)';'y=r*sin(theta)]).
El último comando le dará sólo el resultado para y ya que la llamada de función no fue
asignada a una matriz como en el primer caso.
Función[y1,....,yn] = nombre(x1,...,xm)
función[x,y,z] = sphecart(r,theta,rho)
Conversión de coordenadas esféricas a cartesianas x
= r*cos(rho)*cos(theta)
y = r*cos(rho)*sin(theta)
z = r*sin(rho)
getf('sphercart.txt')
<enter>[x1,y1,z1]=sphercart(10.0, %pi/3, %pi/6)
<enter>
despejado
getf('sphercart.txt') <enter>
theta = %pi/3 <enter>
rho = %pi/6 <enter>
x,y,z] = sphercart(10.0,theta)<enter>
Dado que rho se define en el entorno de llamada, aunque falte ese valor en la secuencia de
llamada a la función sphercart, toma el valor de rho en el entorno de llamada.
Tenga en cuenta que no es posible llamar una función si uno de los parámetros de la secuencia
de llamada no está definido. Intente lo siguiente:
despejado
getf('sphercart.txt') <enter>
theta = %pi/3 <enter>
x,y,z]=sphercart(10.0,%pi/3,rho) <enter>
Debido a que rho no está definido en este caso, la función no puede ser evaluada.
Para obtener información adicional, utilice la función de ayuda de SCILAB con estas funciones.
El siguiente ejemplo ilustra el uso de algunos de estos comandos de funciones especiales.
Introduzca la función en un fichero llamado func1.txt, y guárdelo en el subdirectorio bin de
SCILAB:
clear <enter>
getf('func1.txt') <enter>
z = func1(0,1) <enter>
z = func1(2,1) <enter>
Depuración
La forma más sencilla de depurar una función SCILAB es usar un comando de pausa en la
función. Cuando se encuentra este comando, la función se detiene y aparece el símbolo -1->.
Esto indica un "nivel" de cálculo diferente que puede utilizarse para recuperar valores de
variables incluyendo variables globales del entorno de llamada, experimentar con operaciones,
producir un gráfico si es necesario, etc. Usando una segunda pausa producirá un nuevo nivel
caracterizado por el indicador -2-
y así sucesivamente. La función reanuda la ejecución escribiendo el comando return o resume,
en cuyo momento se borran las variables utilizadas en los mensajes de nivel superior. La
ejecución de la función se puede interrumpir con el comando abortar.
También puede atrapar errores durante la ejecución de la función utilizando los comandos
errclear y errcatch. Compruebe estos comandos con la ayuda de SCILAB. Con un mayor nivel de
experiencia en depuración de SCILAB el usuario puede probar la función debug(i) donde i = 0,
1, 2, 3, 4, denota un nivel de depuración. Compruebe la función de depuración utilizando la
ayuda.
La norma Frobenius de una matriz A =[aij] con n filas y m columnas se define como la raíz
cuadrada de la suma de los cuadrados de cada uno de los elementos de la matriz, es decir,
n m
|| A ||F aij.
i1 j1
función[v]=AbsM(A)
Esta función calcula la norma Frobenius de una matriz
Obtener primero el tamaño de la
matriz[n m] = tamaño(A);
Luego inicializar suma y agregar los términos
a(i,j)^2 suma = 0;
para i = 1:n
para j = 1:m
suma = suma + A(i,j)^2;
meta
fin;
toma raíz cuadrada y muestra el
resultado v = sqrt(suma);
Fin de la función
Dentro de SCILAB intente los siguientes comandos para cargar y ejecutar la función para un caso
particular:
clear <enter>
getf('AbsM.txt')
<enter> R =[1. 3. 4. 2.
<enter>
3. 2. 5. -7. <enter>
1. 3. 4. 5. ..........................................................;
AbsM(R) <introducir>
Las funciones se definen a lo largo del libro en relación con diferentes materias matemáticas,
es decir, vectores, matrices, integrales, ecuaciones diferenciales, etc. En los siguientes
apartados de este capítulo se tratan los temas de entrada/salida y manipulación de cadenas en
SCILAB.
clear <enter>
load('DataAb.dat') <enter>
A <enter>
b <enter>
Observe que, en este caso, la cadena 'x valor =' se imprime junto con la cadena 'x = ',
que es un valor por defecto del comando print. Por lo tanto, no es una buena idea
incluir un string de identificación cuando se utiliza la función de impresión para
imprimir en la pantalla.
print('data1.txt',A,r)<enter>
Descargar en 10 2001 Gilberto E. Urroz
InfoClearinghouse.com
print ('data2.txt',x,y)<enter>
: cadena de formato,
formateado" : para un archivo formateado (por
defecto) "sin formatear" : registro binario.
Una vez abierto un archivo, se puede utilizar para la entrada (función de lectura) o la
salida (función de escritura). A continuación se muestran algunos ejemplos de apertura,
entrada y salida de archivos.
Escritura en archivos.
Los siguientes programas utilizan los valores de x, y, A, y r definidos anteriormente. En
estos ejemplos abrimos y escribimos en archivos, y los cerramos. Note que este
comando está orientado hacia la impresión de matrices -- una a la vez -- por lo tanto,
como se muestra en el Ejemplo 2, es mejor que junte sus datos en una matriz antes de
imprimirla. Observe también que la parte de formato, que se incluye entre comillas, es
básicamente un formato FORTRAN.
Ejemplo 2.
x1 = 0:0.5:10 <enter>
x2 = x1^2 <enter>
B =[x1',x2'] <enter>
m = fichero('open','data4.txt','new')<enter>
write(m,B,'(2(f10.6,2x))') <enter>
fichero('close',m)<enter>)
A = rand(2,3); B = rand(2,3); C = A + B
<enter> u = file('open','data5.txt','new)
<enter> write(u,'this is matrix A','(a)')
<enter> write(u,A,'(3(f10.6,2x)') <enter>
write(u,'this is matrix B','(a)') <enter>
write(u,B,'(3(f10.6,2x)') <enter>
write(u,'this is matrix C = A + B','(a)') <enter>
write(u,C,'(3(f10.6,2x)') <enter>
file('close',u) <enter>
es decir, a una variable se le debe asignar un valor (podría ser una matriz de tamaño
n,m) durante la operación de lectura. La descripción del archivo puede ser una unidad
o un número asignado a un archivo o al teclado. El formato no es necesario. Además,
para leer un solo valor use m = 1, n= 1, como se muestra a continuación.
Por ejemplo, escriba la siguiente función en un archivo llamado inout.txt:
función inout()
este script ilustra usando leer y escribir
(%io(2),'Enter a real variable x:','(a)'); x =
read (%io(1),1,1);
write(%io(2),'Enter a real variable y:','(a)');
y = read (%io(1),1,1);
z = x+y;
write(%io(2),'la suma de x e y es:','(a)')
escribir(%io(2),z,'(10x,e13.7)')
Fin de la función
Note que la función inout no tiene argumentos. Sin embargo, tanto en la definición
de la función como en la llamada de función tiene que tener un par de paréntesis.
Lectura de archivos
Utilice el mismo comando de lectura que se utiliza al leer desde el teclado, pero
utilizando una unidad de archivo abierta para leer. Por ejemplo, suponga que tiene un
archivo llamado signal.txt, que contiene los siguientes valores:
Si conoce el número de filas (n=6, en este caso). Para leer la matriz de valores, utilice:
u=archivo('open','signal.txt','old') <enter>
A=leer(u,6,3); <introducir>
A<entrar>
file('rewind',u) <enter>
B = read(u,-1,3);
<enter> B <enter>
file('close',u) <enter>
El resultado de
s2 = 'multiplicación 's2
=
multiplicador
s3 = 'se da a
continuación.'s3 =
se da a continuación.
Salida = s1 + s2 +
s3sOut =
Funciones de cadena
La longitud de función determina, por ejemplo, el número de caracteres de un string
determinado:
-->length(sOut)
ans =
46.
La parte de función permite la extracción de caracteres de una cadena dada. Por ejemplo,
para extraer el primer carácter de un uso de cadena:
-->part('abcd',1)
ans =
-->part('abcd',[1,2])
ans =
ab
part('abcd',[1,3])
ac
Para extraer una serie de caracteres, las posiciones de los caracteres en la cadena se
indican como una secuencia de valores en el vector que representa el segundo argumento a
la parte de función:
-->part(sOut,[4:1:15])
ans =
resultar de
La función strindex (índice de cadenas), con una llamada típica del formulario
strindex(cadena1,cadena2) determina la posición de la primera aparición de la subcadena2
dentro de la cadena1. Por ejemplo,
-->strindex(sOut,'mult')
ans =
17.
Una vez que se ha determinado la posición de una subcadena, puede utilizar la parte de
función para extraer esa subcadena u otra subcadena empezando en esa posición. Por
ejemplo, esta llamada de función extrae los caracteres 17 a 24 de la cadena sOut:
-->part(sOut,[17:24])
ans =
multiplicadores
La función strsubst (sustitución de cadena), con una llamada típica del formulario
strsubst(cadena1,cadena2,cadena3)
reemplaza la subcadena cadena2 con la subcadena cadena3 dentro de la cadena cadena1. Por
ejemplo, la siguiente llamada a la función strsubst sustituye la subcadena 'multiplicación'
por 'división' dentro de la cadena sOut:
-->strsubst(sOut,'multiplication','division')
ans =
La suma es 7
El siguiente comando produce una matriz o vector de cadenas. Las cadenas en el vector
representan los números del 1 al 5.
-->sNum = string(1:5)
sNum =
!1 2 3 4 5 !
Un intento de sumar los dos primeros elementos del vector sNum produce en cambio su
concatenación, verificando que los elementos son efectivamente cadenas, y no números:
-->sNum(1)+sNum(2)
ans =
12
strcat(sNum,' - ans
') =
1 - 2 - 3 - 4 - 5
-->nNum = evstr(sNum)
nNum =
! 1. 2. 3. 4. 5. !
El signo más (+) aplicado a los dos primeros elementos de nNum añadiría, en lugar
de concatenar, esos elementos:
nNum(1) + nNum(2)ans
=
3.
-->evstr('2+2')
ans =
4.
evstr('sin(%pi/6) + 1/3')ans
=
.8333333
El siguiente ejemplo utiliza la función evstr para evaluar los valores numéricos definidos en
los elementos de un vector. Este ejemplo en particular utiliza los valores de un par de
variables, s y m, que deben definirse antes de intentar la evaluación de las cadenas.
s = 2, m = 3
s =
2.
m =
3.
! 2. 1.4142136 5. !
execstr('a=1')
Aunque la sentencia a=1 se ejecuta mediante el uso de execstr, no se produce ninguna salida.
Para comprobar que la sentencia fue efectivamente ejecutada, solicite a SCILAB que muestre el
valor de a:
un -->a
a =
1.
Puede usar execstr para evaluar una serie de comandos colocando los comandos en una matriz o
vector:
execstr(['a=1','b=2','a+b'])
Una vez más, no se muestra ninguna salida, por lo que el resultado del último elemento en el
vector se pierde, pero la variable b (del segundo elemento en el vector) fue efectivamente
almacenada:
Descargar en 18 2001 Gilberto E. Urroz
InfoClearinghouse.com
b
b =
2.
Traducción:
wikitle.com
! 2. 3. 1.4142136 5. !
x -->x
x =
! 2. 4. 8. 16. !
d =[0.5:0.25:1.5];
para j = 1:m, 'distancia no. ' + cadena(j) + ' es ' + cadena(d(j)) "+", fin
distancia no. 1
es.5.ans =
distancia no. 2
es.75.ans =
distancia no. 3 es
1.ans =
distancia no. 4 es
1.25.ans =
para j=1:m, disp('distance no. '+ string(j) + ' is ' + string(d(j)) +"."),
fin
trayecto no. 3 es 1.
La función disp se puede utilizar para visualizar cualquier resultado, no sólo cadenas. El
siguiente ejemplo muestra la función disp utilizada con la cadena de texto así como la salida
numérica:
a = 2; A =[2,3;-1,4]; B = a*A;
Matriz B es:
! 4. 6. !
! - 2. 8. !
La variable ans
La variable ans (respuesta) contiene la salida de corriente de SCILAB. Se puede hacer
referencia a la última salida SCILAB utilizando el nombre de variable ans. Por ejemplo, los
siguientes comandos utilizan el contenido de ans para operar en la última salida SCILAB:
3+2
ans=
5.
-->exp(ans)
ans =
148.41316
-->exp(5)
ans =
148.41316
n! n(n-1)(n-2)...321
[2]. Escribir una función SCILAB para calcular la desviación estándar de los datos contenidos
en un vector x =[x1 x2 x2... x3].
n
1
2
x k
x
n k
1 1 ,
dondeex es el valor medio de los datos,
1n
n k1
s xk .
[3]. Escribir una función SCILAB para calcular la función definida por
h() ln(2) exp( ), 2
0,en otros lugares
[4]. Trazar la función h() en el intervalo -1<<10.
[5]. Guarde los datos usados en el ejercicio[4] en un archivo de texto, luego, recupere los
datos en los vectores x e y y y calcule la media y la desviación estándar de x e y usando la
función desarrollada enel ejercicio[2].
[6]. Escribir una función SCILAB que encuentre la mediana de una muestra de datos. La
mediana se define como el valor situado exactamente en el centro de la muestra de datos una
vez que se ha clasificado en orden creciente. El algoritmo para encontrar dicho valor viene
dado por:
xm = x(n+1)/2, si n es uniforme
xm = (xn/2+x(n+2)/2), si n es impar
donde n es el tamaño de la muestra. Para ordenar la muestra de datos puede utilizar la función
de clasificación SCILAB
(use -->help sort para encontrar más información
expansión binomial
Escribir una función SCILAB que produzca una tabla de coeficientes binomiales para n = 1, 2,
...., 5. Usar la función desarrollada en el ejercicio[1] para calcular factoriales de números
enteros.
[8]. Escribir un programa SCILAB para definir una función dada por
x 2 sin(x),0 x 1
[9]. Escriba una función SCILAB que solicite al usuario los valores del ancho del fondo (b) y
profundidad del agua (y) para un canal abierto de sección rectangular (ver figura abajo) e
imprima el área (A = bh), el perímetro mojado (P = b+2h) y el radio hidráulico (R = A/P)
debidamente etiquetados.
Pruebe la función para valores de b = 3,5 e y = 1,2.
[10]. Escribir una función SCILAB que solicite al usuario los valores de la posición inicial (x0,y0)
de un proyectil, la velocidad inicial dada como magnitud v0, y un ángulo 0, y la aceleración de
la gravedad g (ver figura abajo). La función también solicita al usuario un tiempo inicial t0,
un incremento de tiempo t y un tiempo final tf. La función produce una tabla de valores de las
componentes de velocidad vx = v0 cos(0), vy = v0 cos(0), la magnitud de la velocidad,
v = (v 2+v 2)1/2, la posición del proyectil, x = x + v cos( )t, y = y + v sin( )t - gt2/2, y
x y o 0 0 o 0 0
la distancia del proyectil desde el punto de lanzamiento, r0 = ((x-x0)2+(y-y0)2)1/2La función
también produce gráficas de x - vs. - t, y - vs. - t, r0 - vs. - t, y y - vs. -x en diferentes
ventanas gráficas. Nota: para generar una nueva ventana gráfica utilice el comando SCILAB -
-
xset('window',j) donde j es el número de la ventana.]
Arora, J.S., 1985, "Introduction to Optimum Design," Class notes, The University of Iowa, Iowa City, Iowa.
Instituto Asiático de Tecnología, 1969, "Hydraulic Laboratory Manual", AIT - Bangkok, Tailandia.
Berge, P., Y. Pomeau, y C. Vidal, 1984,"Order within caos - Towards a deterministic approach to turbulence" (Orden
dentro del caos - Hacia un enfoque determinista de la turbulencia), John Wiley & Sons, Nueva York.
Bras, R.L. e I. Rodriguez-Iturbe, 1985,"Random Functions and Hydrology," Addison-Wesley Publishing Company,
Reading, Massachussetts.
Brogan, W.L., 1974,"Modern Control Theory", serie QPI, Quantum Publisher Incorporated, Nueva York.
Browne, M., 1999, "Schaum's Outline of Theory and Problems of Physics for Engineering and Science",
esquemas de Schaum, McGraw-Hill, Nueva York.
Farlow, Stanley J., 1982, "Partial Differential Equations for Scientists and Engineers", Dover Publications Inc. en
Nueva York.
Friedman, B., 1956 (reeditado en 1990), "Principles and Techniques of Applied Mathematics", Dover Publications Inc.
en Nueva York.
Gómez, C. (editor), 1999, "Engineering and Scientific Computing with Scilab", Birkhäuser, Boston.
Gullberg, J., 1997, "Mathematics - From the Birth of Numbers," W. W. Norton & Company, New York.
Harman, T.L., J. Dabney y N. Richert, 2000, "Advanced Engineering Mathematics with MATLAB® - Second edition",
Brooks/Cole - Thompson Learning, Australia.
Harris, J.W., y H. Stocker, 1998, "Handbook of Mathematics and Computational Science", Springer, Nueva York.
Hsu, H.P., 1984, "Applied Fourier Analysis," Harcourt Brace Jovanovich College Outline Series, Harcourt Brace
Jovanovich, Publishers, San Diego.
Journel, A.G., 1989, "Fundamentals of Geostatistics in Five Lessons" (Fundamentos de la geoestadística en cinco
lecciones), curso corto presentado en el 28º Congreso Geológico Internacional, Washington, D.C., Unión Geofísica
Americana, Washington, D.C.
Julien, P.Y., 1998,"Erosión y Sedimentación", Cambridge University Press, Cambridge CB2 2RU, Reino Unido.
Keener, J.P., 1988, "Principles of Applied Mathematics - Transformation and Approximation," Addison-Wesley
Publishing Company, Redwood City, California.
Koch, G.S., Jr. y R. F. Link, 1971, "Statistical Analysis of Geological Data - Volumes I and II," Dover Publications,
Inc. en Nueva York.
Korn, G.A. y T.M. Korn, 1968, "Mathematical Handbook for Scientists and Engineers", Dover Publications, Inc. en
Nueva York.
Kottegoda, N. T., y R. Rosso, 1997, "Probability, Statistics, and Reliability for Civil and Environmental Engineers"
(Probabilidad, estadísticas y fiabilidad para ingenieros civiles y ambientales), The Mc-Graw Hill Companies, Inc. en
Lindfield, G. y J. Penny, 2000, "Numerical Methods Using Matlab®" (Métodos numéricos que utilizan Matlab®), Prentice
Hall, Upper Saddle River, Nueva Jersey.
Magrab, E.B., S. Azarm, B. Balachandran, J. Duncan, K. Herold y G. Walsh, 2000, "An Engineer's Guide to
MATLAB®", Prentice Hall, Upper Saddle River, N.J., EE.UU.
McCuen, R.H., 1989,"Hydrologic Analysis and Design - second edition," Prentice Hall, Upper Saddle River, New Jersey.
Middleton, G.V., 2000, "Data Analysis in the Earth Sciences Using Matlab®," Prentice Hall, Upper Saddle River, New
Jersey.
Montgomery, D.C., G.C. Runger, y N.F. Hubele, 1998, "Engineering Statistics," John Wiley & Sons, Inc.
Newland, D.E., 1993, "An Introduction to Random Vibrations, Spectral & Wavelet Analysis - Third Edition", Longman
Scientific and Technical, Nueva York.
Nicols, G., 1995, "Introduction to Nonlinear Science", Cambridge University Press, Cambridge CB2 2RU, Reino Unido.
Parker, T.S. y L.O. Chua, "Practical Numerical Algorithms for Chaotic Systems", 1989, Springer-Verlag, Nueva York.
Peitgen, H-O. y D. Saupe (editores), 1988, "The Science of Fractal Images", Springer-Verlag, Nueva York.
Peitgen, H-O., H. Jürgens y D. Saupe, 1992, "Chaos and Fractals - New Frontiers of Science" (Caos y fractales -
Nuevas fronteras de la ciencia), Springer-Verlag, Nueva York.
Press, W.H., B.P. Flannery, S.A. Teukolsky, y W.T. Vetterling, 1989, "Numerical Recipes - The Art of Scientific
Computing (FORTRAN version)", Cambridge University Press, Cambridge CB2 2RU, U.K.
Raghunath, H.M., 1985, "Hydrology - Principles, Analysis and Design", Wiley Eastern Limited, Nueva Delhi, India.
Recktenwald, G., 2000, "Numerical Methods with Matlab - Implementation and Application" (Métodos numéricos
con Matlab - Implementación y aplicación), Prentice Hall, Upper Saddle River, N.J., EE.UU.
Rothenberg, R.I., 1991, "Probabilidad y estadísticas", Harcourt Brace Jovanovich College Outline Series, Harcourt
Brace Jovanovich, Publishers, San Diego, CA.
Sagan, H., 1961,"Boundary and Eigenvalue Problems in Mathematical Physics", Dover Publications, Inc. en Nueva York.
Spanos, A., 1999,"Probability Theory and Statistical Inference - Econometric Modeling with Observational Data"
(Teoría de la Probabilidad e Inferencia Estadística - Modelado Econométrico con Datos de Observación),
Cambridge University Press, Cambridge CB2 2RU, Reino Unido.
Spiegel, M. R., 1971 (segunda impresión, 1999), "Schaum's Outline of Theory and Problems of Advanced Mathematics
for Engineers and Scientists", Schaum's Outline Series, McGraw-Hill, Nueva York.
Tanis, E.A., 1987, "Statistics II - Estimation and Tests of Hypotheses," Harcourt Brace Jovanovich College Outline
Series, Harcourt Brace Jovanovich, Publishers, Fort Worth, TX.
Tinker, M. y R. Lambourne, 2000, "Further Mathematics for the Physical Sciences", John Wiley & Sons, LTD,
Chichester, Reino Unido.
Tolstov, G.P., 1962, "Fourier Series," (Traducido del ruso por R. A. Silverman), Dover Publications, Nueva York.
Tveito, A. y R. Winther, 1998, "Introduction to Partial Differential Equations - A Computational Approach", Texts in
Applied Mathematics 29, Springer, Nueva York.
Urroz, G., 2000, "Science and Engineering Mathematics with the HP 49 G - Volumes I & II", www.greatunpublished.com,
Charleston, S.C.
Urroz, G., 2001, "Applied Engineering Mathematics with Maple", www.greatunpublished.com, Charleston, S.C.