INSTITUTO TECNOLGICO SUPERIOR DE GUASAVE
Guasave, Sinaloa. A 18 de Febrero de 2013.
Para ello, construimos primero una hoja de clculo sencilla. Como se ve abajo, el primer paso consiste en colocar nmeros y letras o palabras en las celdas de la hoja de clculo.
Antes de escribir un programa de macro para calcular el valor numrico, podemos facilitar el trabajo dando nombres a los valores de los parmetros. Para esto, seleccione las celdas A3:B5 Despus seleccione, del men, Formulas Create from Selection
Left column
OK
Para verificar que todo haya funcionado correctamente, seleccione la celda B3 y verifique que aparezca la etiqueta m en la casilla del nombre (casilla que se encuentra en el lado izquierdo de la hoja, justo debajo de las barras del men). Muvase hasta la celda C8 e introduzca la solucin analtica, =9.8*m/cd*(1-exp(-cd/m*A8))
Al introducir esta frmula debe aparecer el valor 0 en la celda C8. Despus copie la frmula a la celda C9 para obtener 16.405 m/s. Hecho esto, podra, por ejemplo, cambiar los valores de los parmetros y observar cmo se modifica la solucin analtica.
Ahora podemos usar algunas de las estructuras dadas para escribir una funcin de macro que calcule la velocidad. Para abrir VBA seleccione View Macros
View Create
Ahora mostraremos cmo se usan las macros de VBA para extender los recursos estndar. En la figura se da una lista que contiene, para cada una de las estructuras de control el seudocdigo junto con el cdigo VBA de Excel. Observe que, aunque los detalles difieren, la estructura del seudocdigo y la del cdigo VBA son idnticas.
Una vez dentro del Visual Basic Editor (VBE), seleccione Insert Module y se abrir una nueva ventana para cdigo. La siguiente funcin en VBA se puede obtener directamente del seudocdigo de la figura. Escriba la funcin dentro de la nueva ventana.
Option Explicit Function Euler(dt, ti, tf, yi, m, cd) Dim h As Single, t As Single, y As Single, dydt As Single t = ti y = yi h = dt Do If t + dt > tf Then h = tf t End If dydt = dy(t, y, m, cd) y = y + dydt * h t=t+h If t >= tf Then Exit Do Function dy(t, v, m, cd) Loop Const g As Single = 9.8 Euler = y End Function dy = g (cd / m) * v
End Function
MATLAB
El uso normal de MATLAB est estrechamente relacionado con la programacin. Supongamos, por ejemplo, que queremos determinar la solucin analtica al problema del paracaidista, lo cual haramos con los siguientes comandos de MATLAB
>> >> >> >> >> g=9.8; m=68.1; c=12.5; tf=2; v=g*m/c*(1-exp(-c/m*tf))
obtenindose como resultado v =16.4050 La secuencia de comandos es como la secuencia de instrucciones en un lenguaje de programacin tpico.
Pero, qu ocurre si usted se quiere desviar de la estructura secuencial? Aunque hay algunos caminos bien definidos para establecer recursos no secuenciales en el modo estndar de comandos, para introducir decisiones y loops, lo mejor es crear un documento de MATLAB al que se le llama archivo-m (m-file). Para hacer esto haga clic en: File New M file
y se abrir una ventana nueva con el encabezado MATLAB Editor/Debugger.
En esta ventana usted puede escribir y editar programas en MATLAB. Escriba ah el cdigo siguiente:
g=9.8; m=68.1; cd=12.5; tf=2; v=g*m/cd*(1-exp(-cd/m*tf))
Obsrvese que los comandos se escriben exactamente en la misma forma en que se hara en el extremo frontal de MATLAB. Guarde el programa con el mismo nombre: analitpara. MATLAB agregar en forma automtica la extensin .m para denotar que se trata de un archivo M: analitpara.m.
Para correr el programa, se debe regresar al modo de comando. La forma ms directa de efectuar esto consiste en hacer clic en el botn MATLAB Command Window que se encuentra en la barra de tareas (que por lo general est en la parte inferior de la pantalla). Ahora, el programa se puede correr al hacer clic en el archivo M, analitpara, que debe parecerse a lo siguiente: >> analitpara Si usted ha hecho todo en forma correcta, MATLAB debe responder con la respuesta correcta: v = 16.4050
Ahora, un problema con lo anterior es que est preparado para calcular slo un caso.
El lector lo puede hacer ms flexible si hace que el usuario introduzca algunas de las variables.
Por ejemplo, suponga que desea evaluar el efecto de la masa sobre la velocidad a los 2 s. Para hacer esto, el archivo M podra reescribirse como sigue:
g=9.8; m=input(masa (kg):); cd=12.5; tf=2; v=g*m/cd*(1-exp(-cd/m*tf))
Guarde esto con el nombre de analitpara2.m. Si escribi analitpara2 mientras se encontraba en el modo de comando, la lnea mostrar lo que sigue: masa (kg): Entonces, el usuario introduce un valor como 100, y el resultado aparecer como: v=17.3420
Ahora, debe quedar bastante claro cmo se puede programar una solucin numrica por medio de un archivo M. A fin de hacerlo, primero debemos entender la manera en que MATLAB maneja las estructuras lgica y de lazo (ciclos o loops). En la figura se enlista el seudocdigo junto con el cdigo de MATLAB para todas las estructuras de control, con base en la seccin anterior. Aunque las estructuras del seudocdigo y el cdigo MATLAB son muy similares, existen algunas diferencias pequeas que deben destacarse.
En especial, observe cmo hemos expresado la estructura DOEXIT. En lugar del DO usamos el WHILE(1). Como MATLAB interpreta al nmero 1 como correspondiente a verdadero, esta instruccin se repetir indefinidamente de la misma manera que el DO.
El loop termina con un comando de interrupcin (break), el cual transfiere el control a la instruccin que se encuentra a continuacin, de la instruccin end que termina el ciclo.
Tambin hay que observar que los parmetros del lazo controlado por contador estn ordenados de modo diferente. Para el seudocdigo, los parmetros especificados como start, finish, step. del lazo estn
Para MATLAB, los start:step:finish.
parmetros
estn
ordenados
como
Ahora el siguiente archivo-m de MATLAB se puede desarrollar directamente, a partir del seudocdigo dado en la figura. Escriba lo siguiente en el Editor/Debugger de MATLAB:
g=9.8; m=input(masa (kg):); cd=12.5; ti=0; tf=2; vi=0; dt=0.1; t = ti; v = vi; h = dt; while (1) if t + dt > tf h = tf t; end dvdt = g (cd / m) * v; v = v + dvdt * h; t = t + h; if t >= tf, break, end end disp(velocity (m/s):) disp(v)
Guarde este archivo como numpara.m, vuelva al modo de comandos y crralo dando numpara. Obtendr la siguiente salida:
masa (kg): 100 velocity (m/s): 17.4381
Por ltimo vamos a convertir este archivo-m en una funcin. Esto se puede hacer en el siguiente archivom basado en el seudocdigo de la figura:
function euler = f(dt,ti,tf,yi,m,cd) t = ti; y = yi; h = dt; while (1) if t + dt > tf h = tf t; end dydt = dy(t, y, m, cd); y = y + dydt * h; t = t + h; if t >= tf, break, end end yy = y;
Guarde este archivo como euler.m y despus cree otro archivo-m para calcular la derivada,
function dydt = dy(t, v, m, cd) g = 9.8; dydt = g (cd / m) * v;
Guarde este archivo como dy.m y regrese al modo de comandos. Para llamar la funcin y ver el resultado, teclee los siguientes comandos
>> >> >> >> >> >> >> m=68.1; cd=12.5; ti=0; tf=2.; vi=0; dt=0.1; euler(dt,ti,tf,vi,m,cd)
Una vez dado el ltimo comando, se desplegar el resultado ans = 16.5309 La combinacin del ambiente de MATLAB con el lenguaje de programacin para los archivos-m nos abre un mundo de posibilidades para la solucin de problemas en ingeniera.