+ All Categories
Home > Documents > VB excel

VB excel

Date post: 19-Aug-2015
Category:
Upload: miguel-mimarca
View: 231 times
Download: 11 times
Share this document with a friend
Description:
tutorial
Popular Tags:
57
1 Programaci¶on Visual Basic (VBA) para Excel y An¶alisis Num¶erico Programaci¶on Visual Basic (VBA) para Excel 1.1 Introducci¶on Microsof Excel°c es un software para el manejo de hojas electr¶onicas agrupadas en libros para c¶alculos de casi cualquier ¶³ndole. Entre muchas otras aplicaciones, es utilizado en el tratamiento estad¶³stico de datos, as¶³ como para la presentaci¶on gr¶a¯ca de los mismos. La hoja electr¶onica Excel es ampliamente conocida, en forma gen- eralizada, por profesionales y estudiantes en proceso de formaci¶on, pero hay una gran cantidad de usuarios que no conocen a profundidad su gran potencial y adaptabilidad a los diferentes campos del conocimiento. Para cient¶³¯cos e ingenieros, el Excel constituye una herramienta computacional muy poderosa. Tambi¶en tiene gran utilidad para ser utilizado en la ense~nanza de las ciencias y la Ingenier¶³a, particularmente, en la ense~nanza de los m¶etodos num¶ericos. Pese a que existen en el mercado programas computacionales muy so¯sticados, tales como MATLAB, MATHEMATICA, etc., no est¶an tan disponibles como Excel, que usualmente forma parte del paquete b¶asico de software instalado en las computadoras que funcionan bajo el sistemaWindows°c deMicrosoft. A continuaci¶on se brinda al lector una breve introducci¶on a algunas actividades de programaci¶on con macros escritos en VBA (una adaptaci¶on de Visual Basic para O±ce de Microsoft), de¯nidos desde una hoja electr¶onica de Excel. Salvo peque~nas diferencias para versiones en ingl¶es, el material puede ser desarrollado en cualquier versi¶on. 1.2 Evaluaci¶on de funciones 1.2.1 Funciones de¯nidas por el usuario A manera de ejemplo, vamos a evaluar la funci¶on f(x) = 2x3 + ln(x) ¡ cos(x) ex + sen(x) 1. Como al evaluar f(x) se debe recurrir a varias funciones b¶asicas que se invocan desde Excel, se puede tener acceso a su sintaxis, pulsando el ¶³cono fx y seleccionar `Matem¶aticas y Trigonom¶etricas'.
Transcript

1Programacion Visual Basic (VBA) para Excel y Analisis NumericoProgramacion Visual Basic (VBA)para Excel1.1 IntroduccionMicroso Excelc es un sot!are para el mane"o de #o"as electronicas agrupadas enlibros para calculos de casicual$uier %ndole. Entre muc#as otras aplicaciones& es utili'ado en el tratamiento estad%stico de datos& as% comopara la presentacion gra(ca de los mismos. )a #o"a electronica Excel es ampliamente conocida& en orma gen*erali'ada& por proesionales y estudiantes en proceso de ormacion& pero #ay una gran cantidad de usuarios $ueno conocen a proundidad su gran potencial y adapta+ilidad a los dierentes camposdel conocimiento.Para cient%(cos e ingenieros& el Excel constituye una #erramienta computacional muy poderosa. ,am+ien tienegran utilidad para ser utili'ado en la ense-nan'a de las ciencias y la Ingenier%a& particularmente& en la ense-nan'ade los metodos numericos. Pese a $ue existen en el mercado programas computacionales muy so(sticados& talescomo MA,)AB& MA,.EMA,I/A& etc.& no estan tan disponi+les como Excel& $ue usualmente orma parte delpa$uete +asico de sot!are instalado en las computadoras $ue uncionan +a"o el sistema0indo!sc deMicrosot.A continuacion se +rinda al lector una +re1e introduccion a algunas acti1idades de programacion con macrosescritos en VBA (una adaptacion de Visual Basic para 23ce de Microsot)& de(nidosdesde una #o"a electronicade Excel. 4al1o pe$ue-nas dierencias para 1ersiones en ingles& el material puede ser desarrollado en cual$uier1ersion.1.5 E1aluacion de unciones1.5.1 6unciones de(nidas por el usuarioA manera de e"emplo& 1amos a e1aluar la uncionf(x) 7 5x8 9 ln(x) cos(x)ex 9 sen(x)1. /omo al e1aluar f(x) se de+e recurrir a 1arias unciones +asicas $ue se in1ocan desde Excel& se puedetener acceso a su sintaxis& pulsando el %cono fx y seleccionar :Matematicas y ,rigonometricas;.5. Para escri+ir una ormula& seleccionamos una celda para escri+ir el 1alor a ser e1aluado< por e"emplo&podemos digitar el 1alor 1:1 en la celda B8.8VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =6igure 1.1> 6unciones prede(nidas en Excel.8. A#ora en la celda /8 digitamos& de acuerdo a la sintaxis de la 1ersion de Excel en espa-nol1& la ormula>75?B8@89)N(B8)*/24(B8)AEBP(B8)94EN2(B8)Cna 1e' $ue #a sido digitada& simplemente se pulsa la tecla :Entrar; o :Enter;.6igure 1.5> Al e1aluar ormulas& a menudo se re$uiere e1aluar 1arias unciones prede(nidas.1.5.5 Errores comunes/onorme 1amos digitando nuestras primeras ormulas& nos 1an apareciendo algunos errores $ue usualmente sonde+idos a un mane"o inadecuado de la sintaxis o a la incompati+ilidad con la con(guracion de la computadora.A continuacion se descri+en algunas situaciones $ue pueden aparecer.1. El 1alor de error DEN2MBFEG aparece cuando Excel no reconoce texto en una ormula. He+er re1isar lasintaxis de dic#a ormula o& si es una macro& 1eri(car $ue este en un modulo de esta #o"a.5. El 1alor de error D3VA)2FI da cuando se utili'a un tipo de argumento (u operando) incorrecto. Este errorse da por e"emplo& cuando e1aluamos una uncion numerica en una celda $ue contiene algo $ue no sea unnumero (Por deecto& el contenido de una celda 1ac%a es cero).8. El 1alor de error D3NCMI se aparece cuando #ay un pro+lema con algun numero en una ormula o uncion.Por e"emplo& si e1aluamos una uncion logar%tmica en cero o en un numero negati1o.1)a 1ersion $ue estamos usando esta en espa-nol. Por e"emplo& en la 1ersion en ingles de Excel& se usa 4IN(x) en lugar de4EN2(x).VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. J=. El 1alor de error D3HIVAKI se produce cuando se di1ide una ormula por K (cero).J. El 1alor de error D3FE6I se da cuando una reerencia a una celda no es 1alida.L. Hependiendo de la orma en $ue este con(gurado el sistema 0indo!s& de+e usarse punto o coma paraseparar la parte decimal de los numeros a e1aluar. Para personali'arlo& se de+e entrar al panel de controly en la :/on(guracion regional; se selecciona :Numeros;. En la primera ce"illa& :4%m+olo Hecimal; seselecciona el punto o la coma& segun sea el caso. 6inalmente& se presiona el +oton :Aplicar; y luego:Aceptar;.M. Cna situacion $ue a 1eces es conundida con un error se da cuando el sistema tra+a"a con poca precision yse presentan 1alores numericos no esperados. Por e"emplo& si el ormato de una celda se #a de(nido parados posiciones& entonces la operacion 91.NNN91 eectuado en dic#a celda dara como resultado el 1alor 5&$ue no es otra cosa $ue el resultado de tal suma redondeado a dos decimales. El 1alor correcto se o+tieneaumentado la precision con el %cono correspondiente>,am+ien se puede cam+iar la precision en el menu :6ormato*/eldas*Numero*Posiciones decimales;.Estos cam+ios son solo de apariencia& pues& independientemente del numero de d%gitos $ue sean desplega*dos& Excel manipula los numeros con una precision de #asta 1J d%gitos. 4i un numero contiene mas de 1Jd%gitos signi(cati1os& Excel con1ertira los d%gitos adicionales en ceros (K).1.5.8 E1aluando una uncion en 1arios tipos de parametrosMuc#as ormulas a e1aluar tienen argumentos de distinto tipo& pues algunos argumentos 1ar%an (a 1eces conun incremento determinado)& mientras $ue otros permanecen constantes. Por lo general estos argumentos sontomados de celdas espec%(cas& por lo $ue es importante sa+er mane"ar distintos escenarios para la e1aluacionde una uncion o ormula.E1aluacion con argumentos 1aria+les/ontinuando con el e"emplo $ue iniciamos en la seccion 5.1& a partir de la celda B=podemos continuar digitando1alores& siempre en la columna B y con el cuidado de $ue estos numeros no se salgan del dominio de la uncionf(x) 7 5x8 9 ln(x) cos(x)ex 9 sen(x)& $ue en este caso es el con"unto de los numeros reales positi1os. Cna 1e'#ec#o esto& se e1alua la uncion f(x) en la celda /8& como se #i'o pre1iamente. )uego& seleccionamos estamisma celda /8 y se u+ica el "ouse en la es$uina inerior derec#a& arrastrandolo #asta la celda deseada. 2traposi+ilidad es #acer un do+le clic en la es$uina inerior derec#a de la celda a copiar y esto reali'a la copiaautomaticamente.E1aluacion con argumentos 1aria+les yAo constantesEs comun tener $ue e1aluar unciones o ormulas $ue dependen de 1arios parametros& algunos de los cuales semantienen ("os mientras $ue otros son 1aria+les.E"emplo 1VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. L6igure 1.8> /opia de una ormula en un grupo de celdas.El siguiente e"emplo descri+e una uncion con dos parametros y una 1aria+le.)a uncion #(t) 7 $1 9 Ae%t & con A 7 $ #K#K& descri+e el tama-no de una po+lacion en el momento t.A$u%>. % es una constante de proporcionalidad $ue se determina experimentalmente& dependiendo de la po+lacionparticular $ue esta siendo modelada&. #K es la po+lacion inicial y. $ es una constante llamada capaci&a& &e cotecio o capaci&a& "axi"a 'ue el "e&io es capa! &e sosteer.4i $ueremos e1aluar #(t) para distintos 1alores del tiempo t en d%as& seguimos la siguiente secuencia de pasos>1. Para empe'ar& es importante escri+ir enca+e'ados en cada una de las columnas (o (las) donde 1amosa escri+ir los datos $ue seran los argumentos de la uncion. En este caso& comen'ando en la celda B8&escri+imos las eti$uetasPK O P t P(t).5. A continuacion escri+imos los 1alores de los parametros& comen'ando en la celda B=1KK 1KKK K.KQ K.8. A#ora escri+imos la ormula de la uncion #(t) en la celda R=>7/S=A(19((/S=*BS=)ABS=)?EBP(*HS=?E=))/omo puede o+ser1arse& el unico argumento 1aria+le es t y nos interesa mantenera los otros argumentosconstantes. Para mantener un 1alor ($ue se lea en una celda) constante& se le agrega el s%m+olo S antesdel numero de (la& como por e"emplo /S=.En nuestro e"emplo& los argumentos constantes son los $ue estan en las celdas B=&/= y H=& mientras $ueel 1alor de t en la celda E=& es 1aria+le.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. M6igure 1.=> E1aluacion con parametros constantes y un parametro con un incremento 1aria+le.=. 6inalmente& escri+imos 1arios 1alores para t en la columna E& seleccionamos la celda 6= y arrastramospara e1aluar #(t) en el resto de 1alores de t.Nota> #(t) es la solucion de la llamada ecuacio lo()stica &t7 %#T1 #$./onstruyendo rangos con un incremento ("oA menudo necesitamos e1aluar una uncion en una secuencia de 1alores igualmente espaciados& por lo $ue acontinuacion se explica como #acerlo& modi(cando el e"emplo pre1io de crecimiento de una po+lacion.1. Podemos seleccionar la columna / para poner los 1alores ("os #K& $& % y el incremento *. En este caso&por e"emplo& * 7 J ser1ia como incremento entre un tiempo y el siguiente& iniciando con t 7 K.5. En la celda E= escri+imos el tiempo inicial t 7 K y en la celda EJ se escri+e el nue1o tiempo con elincremento *>79E=9/SLHe+emos usar /SL para $ue el incremento se mantenga inalterado al copiar esta operacion en otra (lacelda situada en una (la dierente.8. A#ora seleccionamos esta celda EJ y la arrastramos #acia a+a"o para o+tener los nue1os tiempos con elrespecti1o incremento.6igure 1.J> E1aluacion con un parametro de incremento ("oNota> Esto tam+ien se puede #acer escri+iendo& en celdas consecuti1as& un 1alor yluego el 1alor mas el incre*mento y luego seleccionando am+as celdas y arrastrando. 4in em+argo& en algunos algoritmos es mas comodoVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. Qtener una celda donde leer el incremento.1.8 Rra(cas/ontinuando con el e"emplo anterior en el $ue se #a e1aluado la po+lacion #(t) en un con"unto de 1alores deltiempo t& recordemos $ue en las columnas E y 6 se #an escrito& respecti1amente& los 1alores de t y #(t). Paragra(car #(t) con respecto a t& pordemos seguir los siguientes pasos>1. 4eleccionamos el rango en el cual se encuentran los 1alores de t y #(t). Este rango puede incluir las celdas$ue contienen los rotulos de las columnas.5. Presionamos el icono & $ue acti1a el asistente para gra(cos..ay 1arias opciones $ue podemos elegir para el gra(co y en nuestro caso podemos elegir el tipo Hispersion.6igure 1.L> 4eleccion del tipo de gra(co.8. Presionamos el +oton 4iguiente y luego 6inali'ar . Antes de (nali'ar se pueden escoger distintas op*ciones para personali'ar el gra(co. A continuacion se muestra la salida del gra(co.6igure 1.M> /ur1a o+tenida para el modelo log%stico de crecimiento de una po+lacion.)a cur1a o+tenida se llama cur+a lo()stica o si("oi&e& por la orma de ,S- $ue tiene.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. N1.= Programacion de macros1.=.1 IntroduccionEl lengua"e Visual Basic para Aplicaciones (VBA)& en el contexto de Excel& constituyeuna #erramienta deprogramacion $ue nos permite usar codigo Visual Basic adaptado para interactuar con las multiples acetas deExcel y personali'ar las aplicaciones $ue #agamos en esta #o"a electronica.)as unidades de codigo VBA se llaman macros. )as macros pueden ser proce&i"ietos de dos tipos>* 6unciones (6unction)* 4u+rutinas (4u+) ).)as unciones pueden aceptar argumentos& como constantes& 1aria+les o expresiones. Estan restringidas a en*tregar un 1alor en una celda de la #o"a. )as unciones pueden llamar a otras unciones y #asta su+rutinas (enel caso de $ue no aecten la entrega de un 1alor en una sola celda)Cna su+rutina reali'a acciones espec%(cas pero no de1uel1en ningun 1alor. Puedeaceptar argumentos& comoconstantes& 1aria+les o expresiones y puede llamar unciones./on las su+rutinas podemos entregar 1alores en distintas celdas de la #o"a. Es ideal para leer parametros enalgunas celdas y escri+ir en otras para completar un cuadro de inormacion a partir de los datos le%dos.Editar y e"ecutar macros.)as unciones y las su+rutinas se pueden implementar en el editor de Visual Basic (Alt*611).Para usar una uncion en una #o"a de Excel se de+e& en el editor de VB& insertar unmodulo y editar la uncionen este modulo. Esta accion de descri+e mas adelante. He la misma manera se pueden editar su+rutinas en unmodulo.Cna uncion se in1oca en una #o"a& como se in1oca una uncion de Excel o una ormula. Cna su+rutina se puedein1ocar por e"emplo desde la 1entana de e"ecucion de macros (Alt*6Q) o desde un +oton $ue #ace una llamadaa la su+rutina (como respuesta al e1ento de #acer clic so+re el& por e"emplo).El codigo $ue e"ecuta un +oton puede llamar a su+rutinas y a las unciones de la #o"a. El codigo del +otonno esta en un modulo. En la #o"a de edicion donde se encuentra el codigo del +oton& se pueden implementarunciones para uso de este codigo pero $ue seran desconocidas para la #o"a (mensa"e de error DEN2MBFEG).Nota> un error recuente es editar una uncion en un modulo $ue corresponde a una #o"a y llamarlo desde otra#o"a. En este caso se despliega el error (mensa"e de error DEN2MBFEG).1.=.5 6uncionesCna uncion tiene la siguiente sintaxis>6unction Nom+re6un(ar(., ar(/,...,ar()Heclaracion de Varia+les y constantes0strucccio .0strucccio /...VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1K0strucccio %Nom+re6un 7 Valor &e retoro ;comentarioEnd 6unctionCna uncion puede tener o no tener argumentos& pero es con1eniente $ue retorne un 1alor. 2+ser1e $ue se de+eusar el nom+re de la uncion para especi(car la salida>Nom+re6un 7 Valor &e retoroNota 1> Al interior de las unciones& se pueden #acer comentarios utili'ando (antes de estos) la comilla (;).Nota 5> Para el uso de nom+res de 1aria+les o de cual$uier otra pala+ra reser1ada de VBA& no se discriminaentre el uso de letras mayusculas y minusculas.E"emplo 1> implementar una uncion.Vamos a implementar como una macro la uncion con la $ue se tra+a"o pre1iamente>f(x) 7 5x8 9 ln(x) cos(x)ex 9 sen(x)Para su de(nicion y utili'acion& se siguen los pasos>1. Ingresamos al menu y en la opcion .erramientas seleccionamos Macros. )uegose elige Editor deVisual Basic>6igure 1.Q> Primeros pasos para la de(nicion de una macro.,am+ien puede usar Alt * 6115. Nue1amente& en el menu de la 1entana $ue se a+re& se elige Insertar& para luego seleccionar Modulo>8. A#ora en la pantalla de edicion del modulo& escri+imos el siguiente codigo>6unction (x) 7 5 ? x @ 8 9 )og(x) * /os(x) A Exp(x) 9 4in(x)End 6unction=. Cna 1e' $ue #a sido editado el codigo del macro& se sal1a y salimos del am+iente de programacion enVisual Basic para 1ol1er a la #o"a electronica de donde partimos. Esto se #ace en el menu Arc#i1o&seleccionando /errar y Vol1er a Excel.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 116igure 1.N> 4e inserta un modulo en el $ue se escri+ira el codigo de las macros.6igure 1.1K> Escritura del codigo de una macro.J. Para e1aluar la uncion f(x) en algunos 1alores $ue se localicen& por e"emplo& desde la (la 8 #asta la (la Lde la columna B& nos situamos en una celda en la $ue nos interese de"ar el resultado de dic#a e1aluaciony se digita 9(B8). )uego se arrastra #asta /L para copiar la ormula& $uedando>6igure 1.11> E1aluacion de una uncion de(nida por el usuario.Nota> Para conocer con detalle la sintaxis de las unciones matematicas estandar $ue se pueden e1aluar enVisual Basic& puede usarse la Ayuda del Editor de Visual Basic. Esta sintaxis es un poco dierente ala $ue mane"a Excel para las mismas unciones. /omo ya 1imos& para implementar la uncionf(x) 7 5x8 9 ln(x) cos(x)ex 9 sen(x)1 en Excel la sintaxis es> 5?B8@89)N(B8)*/24(B8)AEBP(B8)94EN2(B8)VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 151 en VBA la sintaxis es 5 ? x @ 8 9 )og(x) * /os(x) A Exp(x) 9 4in(x)2+ser1e& por e"emplo& $ue la uncion logaritmo natural ln(x)& en Excel se escri+e )N mientras $ue en VBAse escri+e )og.E"emplo 5> lectura de parametros en celdasCna 1e' mas 1amos a tra+a"ar con el modelo de crecimiento po+lacional descrito anteriormente. )a uncion#(t) 7 $1 9 Ae%t 2conA 7 $ #K#K:A#ora e1aluaremos #(t) para distintos 1alores del tiempo t en d%as& pero esta 1e' #aremos dic#a e1aluacionmediante una macro para de(nir #(t) .)os parametros los 1amos a leer desde unas celdas u+icadas en la columna /. Para #acer reerencia a una celda&se usa el codigo/ells(Ula&columna)pero escri+iendo :columna; en ormato numerico. Por e"emplo& la celda /J se in1oca como/ells(J&8))o primero $ue #acemos es escri+ir& en el editor de VBA& la ormula de #(t)& luego la in1ocamos en la celda 68(de nuestra #o"a de e"emplo) y arrastramos. Para esto& se siguen los siguientes pasos>1. En primer lugar& a+rimos una #o"a Excel& $ue se llame por e"emplo Po+lacion.xls. )uego se escri+enlos 1alores de los parametros& tal y como puede o+ser1arse en la siguiente (gura>6igure 1.15> C+icacion inicial de los parametros.5. A#ora ingresamos al menu y en la opcion .erramientas seleccionamos Macros.)uego se elige Editor de Visual Basic.Nue1amente& en el menu de la 1entana $ue se a+re& se elige Insertar& para luego seleccionar Modulo yescri+ir el siguiente codigo>6unction P(t)PK 7 /ells(5& 8) ;PK estV;a en la celda /5)imPo+l 7 /ells(=& 8) ;O estV;a en la celda /=P 7 /ells(J& 8) ;P estV;a en la celda /JA 7 ()imPo+l * PK) A PKP 7 )imPo+l A (1 9 A ? Exp(*P ? t))End 6unctionVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 186igure 1.18> /aptura de algunos parametros constantes de las celdas de la #o"a.He esta orma& la 1entana de edicion de Visual Basic& $uedar%a as%>8. Cna 1e' $ue #a sido editado el codigo de la macro& se guarda y salimos del am+iente de programacion enVisual Basic para 1ol1er a la #o"a electronica de donde partimos. Este retorno se #ace siguiendo el menuArc#i1o y seleccionando /errar y Vol1er a Excel.=. Para e1aluar la uncion #(t) en los 1alores de t $ue estan en la (la $ue inicia en 65& nos situamos en lacelda 68 y se digita 9P(65). )uego se arrastra #asta W5 para copiar la ormula& $uedando>6igure 1.1=> Fesultado (nal al e1aluar la macro del modelo po+lacional.1.J Elementos de programacion en VBACn programa computacional escrito mediante cual$uier lengua"e de programacion puede 1erse a grandes rasgoscomo un Xu"o de datos& algunos "ugando el papel de datos de entrada& otros son datos $ue cumplen algunauncion temporal dentro del programa y otros son datos de salida. A lo largo del programa es muy recuente$ue sea necesaria la entrada en accion de otros programas o procesos. A mayor comple"idad del pro+lema $ueresuel1e el programa& mayor es la necesidad de programar por aparte algunos segmentos de instrucciones $uese especiali'an en una tarea o con"unto de tareas..ay tres tipos de estructuras +asicas $ue son muy utili'adas en la programacion de un algoritmo& a sa+er& laestructura secuencial& la estructura condicional y la repetiti1a.A continuacion se explica& con e"emplos programados como macros de Excel& estasestructuras. ,am+ien seincluyen los programas en seudocodigo y diagramas de Xu"o para explicar de un modo mas gra(co la logica delprograma. El uso de estos ultimos es cada 1e' menor& pues el seudocodigo por logeneral es su(cientementeclaro y se escri+e en lengua"e muy cercano al lengua"e natural.1.J.1 6lu"o secuencialEl Xu"o secuencial consiste en seguir una secuencia de pasos $ue siguen un orden predeterminado.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1=Por e"emplo& un programa $ue a partir de un numero N de d%as& calcula la cantidad de segundos $ue #ay enesta cantidad de d%as. Este programa se puede 1er como una secuencia de 1arios pasos>1 Inicio> Ingresa el numero N de d%as1 Paso 1> . 7 5=?N& para determinar la cantidad de #oras1 Paso 5> M 7 LK?.& para determinar la cantidad de minutos.1 Paso 8> 4 7 LK?M& para determinar la cantidad de segundos.1 Paso => Fetorne 4.1 6in.)a macro correspondiente a esta secuencia de calculos puede escri+irse como sigue>6unction /alcule4egundos(Hias)/ant.oras 7 5= ? Hias/antMinutos 7 LK ? /ant.oras/alcule4egundos 7 LK ? /antMinutosEnd 6unction6igure 1.1J> 6lu"o secuencial1.J.5 6lu"o condicional (I * Else)Cn Xu"o condicional se presenta en un programa o procedimiento $ue de+e escoger una accon o proceso a e"e*cutar& dependiendo de condiciones $ue puedan cumplirse.El caso mas sencillo ocurre cuando el programa 1eri(ca si una condicion se cumple y en caso de ser 1erdaderae"ecuta un proceso& en tanto $ue si es alsa e"ecuta otro proceso.En VBA tenemos la instruccionVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1JI...,#en...ElseE"ecuta condicionalmente un grupo de instrucciones& dependiendo del 1alor de una expresion.4intaxisI co&icio ,#enistruccioesElse istruccioes3elsePuede utili'ar la siguiente sintaxis en ormato de +lo$ue>I co&icio ,#enistruccioesElseI co&icio ,#enistruccioes3elseif...Else istruccioes3elseEnd INota> En la ayuda del editor de Visual Basic& tenemos acceso a la reerencia del lengua"e.E"emplo 5En este e"emplo 1eremos como usar la instruccion I...,#en...Else2+tener un programa $ue calcule aproximaciones dep5& sa+iendo $ue la sucesion fx(/N con1erge ap5&de(nida en orma recurrente mediante la relacion>QY>x91 7 15 (x 9 5x)xK 7 1El programa de+era estimar el error a+soluto de las aproximaciones y sera capa' de escri+ir un mensa"e de exitoo de racaso& dependiendo de si el error a+soluto es o no menor $ue una tolerancia dada.Para los resultados $ue aparecen en la gra(ca anterior pueden programarse las siguiente macros para ser e1al*uadas en cada columna>6unction AproxHeFai'(x)AproxHeFai' 7 (1 A 5) ? (x 9 5 A x)End 6unction6unction /alculoElError(Aproximacion& ValorExacto)/alculoElError 7 A+s(Aproximacion * ValorExacto)End 6unctionVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1L6igure 1.1L> Fesultado de la aproximacion dep5.6unction 1eriUca,ol(Error& ,ol)I (Error Y ,ol) ,#en1eriUca,ol 7 ZEBI,2ZElse1eriUca,ol 7 Z6FA/A42ZEnd IEnd 6unctionEl diagrama siguiente ilustra la orma en $ue esta ultima uncion de 1eri(cacion actua con +ase en el 1alor desus dos parametros de entrada>6igure 1.1M> Hiagrama de Xu"o condicional para 1eri(car si se alcan'o la tolerancia.1.J.8 6lu"o repetiti1o (6or*Next& 0#ile*0end& Ho 0#ile*)oop)El Xu"o repetiti1o se presenta en un algoritmo cuando se re$uiere la e"ecucion de un proceso o parte de unproceso sucesi1amente& #asta $ue ocurra una condicion $ue permita terminar.Este tipo de Xu"os repetiti1os se presentan en tres ormas $ue o+edecen a maneras dierentes de ra'onarlos pero$ue en el ondo #acen lo mismo>1 Ctili'ar un contador $ue empiece en un numero y termine en otro& e"ecutando el proceso cada 1e' $ue elcontador tome un 1alor distinto.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1M1 Mientras una condicion sea 1erdadera& e"ecutar un proceso y regresar a la condicion.1 E"ecutar un proceso& #asta $ue una condicion de"e de cumplirse.En VBA tenemos las siguientes instrucciones para reali'ar procesos iterati1os>1. 6or ... NextFepite un grupo de instrucciones un numero especi(cado de 1eces.4intaxis (las instrucciones entre :[ \; son instrucciones adicionales)6or cota&or 4 iicio ,o 5 [4tep icre"eto\istruccioes[Exit 6or\istruccioesNext cota&or5. 0#ile...0endE"ecuta una serie de instrucciones mientras una condicion dada sea ,rue.4intaxis0#ile co&icioitruccioes0endNota> No #ay un Exit 0#ile. En una su+rutina& si uera necesario& se podr%a usar Exit 4u+8. Cna instruccion muy parecida a 0#ile pero mas e(ciente es Ho4intaxisHo !#ile co&icioistruccioes[Exit Ho\)oopE"emplo 8Para ilustrar estas ormas de reali'ar un Xu"o repetiti1o& 1amos a aproximar la suma de una serie alternada conun error estimado menor $ue una cantidad tol dada./onsideremos la serie alternadaVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1Q.B%71(1)% 1%5 7 1 91=1N911L : : :)a suma parcial 6*esima 1iene dada porS6 7B6%71(1)% 1%5 7 1 91=1N911L : : : 9 (1)6 165es decirS1 7 1 7 1S5 7 1 9 14= 7 K:MJS8 7 1 9 14= 14N 7 K:QL1111:::S8 7 1 9 14= 14N 9 141L 7 K:MNQL11:::...He acuerdo con la teor%a de series alternadas& la serie.B%71(1)% 1%5 es con1ergente. 4i su suma es S& al aproxi*marla con la suma parcial S6& el error de la aproximacion es menor $ue1(6 9 1)5 & es decir7S S67 81(6 9 1)5Primer pro+lemaHada una tolerancia ,2)& calcular cada una de las sumas parciales #asta $ue el error de aproximacion sea menor$ue ,2)4olucion6igure 1.1Q> 4umas parciales y estimacion del errorVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 1NImplementamos dos macros& una para el calculo de las sumas parciales y otra para#acer la 1eri(cacion del errorestimado. En este caso& 1amos a suponer $ue ,2) esta en la celda B886unction sumaParcial(#astaN) Him Acum& signo As Integer Acum 7 Ksigno 7 *16or P 7 1 ,o #astaNAcum 7 Acum 9 signo ? 1 A P @ 5signo 7 *signoNext PsumaParcial 7 Acum End 6unction;********************************************************************6unction 1eriUca,ol(elN& tol)I (1 A (elN 9 1) @ 5 ] tol) ,#en1eriUca,ol 7 ZError estimado ] Z 9 4tr(tol) ;tol es un numeroElse ;no una 4tring1eriUca,ol 7 Z2O& error estimado YZ 9 4tr(tol) ;por esto de+emos usar ;4tr;End IEnd 6unctionEn la primera llamada de las macros se uso sumaParcial(/88) y 1eriUca,ol(/886 6 7Sr19:L^(parte entera))os pasos a seguir para programar la suma a partir de la tolerancia dada& son los siguientes>1 Inicio> Ingresa la tolerancia con $ue se #ara la aproximacion.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5K1 Paso 1> /alcular 6 7Sr19:L^1 Paso 5> Acum 7 K (4e inicili'a el acumulador para la suma).1 Paso 8> Para P 7 1 . . . N>Acum 7 Acum 9 (1)% 1%51 Paso => Fetorne Acum.1 6in.6igure 1.1N> Hiagrama de Xu"o correspondiente a la primera solucion.2+ser1e $ue en cada sumando& se incluye el actor (1)%& $ue en la practica& mas $ue una potencia& lo $ueindica es el cam+io de signo en los terminos sucesi1os. Para e1itarle al programa calculos innecesarios&podemos iniciali'ar una 1aria+le si(o en 1 y en cada paso de la instruccion repetiti1a se cam+ia al signocontrario. )a macro correspondiente a este programa puede escri+irse como sigue>6unction 4umaParcial(,ol)Acum 7 K signo 7 *1N 7 Int(1 A 4$r(,ol))6or P 7 1 ,o NAcum 7 Acum 9 signo ? 1 A P @ 5signo 7 *signoNext P4umaParcial 7 AcumEnd 6unction)a siguiente (gura muestra la e1aluacion de esta macro para algunos 1alores de latolerancia.5. 4egunda solucion>En esta solucion no es necesario calcular el 1alor de 6& sino $ue se suman los terminos mientras no se#aya alcan'ado la tolerancia. El programa en seudocodigo se puede escri+ir como sigue>1 Inicio> Ingresa la tolerancia con $ue se #ara la aproximacion.1 Paso 1> Iniciar con 6 7 1.1 Paso 5> Acum 7 *1 (4e inicili'a el acumulador para la suma con el primer termino).1 Paso 8> Mientras1(6 9 1)5 < 9ol >VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 516igure 1.5K> Fesultados calculados mediante la primera solucion.. 6 7 6 9 1. Acum 7 Acum 9 (1)6 1651 Paso => Fetorne Acum.1 6in.6igure 1.51> Hiagrama de Xu"o correspondiente a la segunda solucion.El codigo es6unction 4umaParcial5(,ol)N 7 1 Acum 7 *1 signo 7 10#ile (1 A (N 9 1) @ 5 ] ,ol)N 7 N 9 1Acum 7 Acum 9 signo ? 1 A N @ 5signo 7 *signo0end4umaParcial5 7 AcumEnd 6unctionVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 551.J.= Mane"o de rangosCna rango en Excel corresponde a una seleccion de celdas. Cna seleccio de las celdas de una (la o una columnase mane"a en Excel como una matri' de orden 1 =o de orden= 1 (un 1ector). )aseleccio de un +lo$uede celdas se mane"a como una matri'= ". 4i una celda esta en +lanco& se lee uncero.E"emplo =Promedio simple. /onsideremos una ta+la con J notas& todas con igual peso.6igure 1.55> Promedio simple.Para calcular el promedio simple& en cada (la& 1amos a #acer una macro $ue reci+e un rango& cuenta las notas&suma y di1ide entre el numero de notas.6unction Promedio4imple(F As Fange) As Hou+le ;F es la 1aria+le$ue reci+e el rangoHim n As IntegerHim sump As Hou+lesump 7 Kn 7 F.Entire/olumn./ount ;cantidad de notas en el rango6or Eac# x In F ;suma de las notassump 7 sump 9 xNext x4ume 7 sump A n ;promedio simpleEnd 6unctionEn primera celda de la columna Promedio& llamamos a la macro con> PF2MEHI2(/J5>RJ5) pues en este caso elrango es /J5>RJ5.E"emplo JEl Promedio eliminando las dos notas mas +a"as. En este caso& a un con"unto de notas les calculamos elpromedio simple pero eliminando las dos notas mas +a"as. El programa Promedio_suma lasnotas de una(la (rango)& locali'a la posicion (en el 1ector F) de las dos notas mas +a"as y luego le resta a la suma estas dosnotas para luego di1idir entre 5. En este caso& el rango F es una matri' 1=& o sea& se puede 1er como un1ector decomponentes.6unction Promedio_(F As Fange) As Hou+leHim n& i& Imin1& Imin5 As IntegerVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 586igure 1.58> Promedio de notas& eliminando las dos mas +a"as.Him suma As Hou+lesuma 7 Kn 7 F.Entire/olumn./ount ;numero de elementos de la seleccion6or i 7 1 ,o nsuma 7 suma 9 F(1& i) ;F es una matri' 1xn (o sea& un 1ector)Next i ;En F no se #ace reerencia a la celdaImin1 7 1 ;P24I/I2N de la 1ra nota m%nima en F6or i 7 1 ,o nI F(1& i) Y F(1& Imin1) ,#enImin1 7 iEnd INext iImin5 7 1 ;P24I/I2N de la segunda nota m%nima en FI Imin1 7 1 ,#enImin5 7 5End I;comparar con todos excepto Imini16or i 7 1 ,o nI (F(1& i) Y F(1& Imin5)) And (i Y] Imin1) ,#enImin5 7 iEnd INext iPromedio_ 7 (suma * F(1& Imin1) * F(1& Imin5)) A (n * 5)End 6unctionNota> ,am+ien podr%amos resol1er este pro+lema usando 4election.4ort pero la programacion es un pocomas comple"a.1.J.J 4u+rutinas. Edicion y e"ecucion de una su+rutina)a su+rutinas o procedimientos es otro de los tipos +asicos de programas en VisualBasic. Cna descripcion de lasintaxis de una su+rutina $ue no es completa& pero s% su(ciente para los alcances de este material es la siguiente5>5Aparte de la posi+ilidad de declarar la su+rutina como #ri+ate o #ublic& tam+ien se puede declarar como Frie&& pero estotiene $ue 1er mas con la pro(ra"acio orieta&a a ob7etos& $ue no se a+orda en el presente materialVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5=4intaxis>4u+ Nom+re*de*4u+rutina(lista3ar(u"etos)istruccioesEnd 4u+o tam+ien[Pri1ate 7 Pu+lic\ [4tatic\ 4u+ Nom+re*de*4u+rutina(lista3ar(u"etos)istruccioesEnd 4u+)ass partes entre corc#etes indican $ue son opcionales. Ademas>Pu+lic. Es opcional. Indica $ue la su+rutina puede ser llamada por todas las demas su+rutinas sinimportar donde se encuentre.Pri1ate. Es opcional. Indica $ue la su+rutina puede ser llamada solamente por otras su+rutinas $ue seencuentren en el mismo modulo.4tatic. Es opcional. Indica $ue las 1aria+les locales de la su+rutina se mantienen constantes de unallamada a otra. El am+ito de accion de esta declaracion no incluye a 1aria+les declaradas uera de lasu+rutina.Nom+re*He*4u+rutina. Es re$uerido. Indica el nom+re de la su+rutina.lista*argumentos. Es opcional e indica las 1aria+les $ue conorman los argumentos con $ue una su+*rutina es llamada. Para separar una 1aria+le de otra se escri+e una coma.instrucciones. Es opcional y conorma el con"unto de instrucciones $ue son e"ecutadas a lo largo de lasu+rutina.E"emplo LEle1ar al cuadrado los 1alores de una seleccion (e"ecutar desde la 1entana de e"ecucion de macros).Podemos implementar una su+rutina en una #o"a& $ue recorra una seleccio #ec#acon el mouse y $ue 1ayaele1ando al cuadrado el 1alor de cada celda.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5J6igure 1.5=> Ele1ar al cuadrado los elementos de la seleccion4u+ ele1Al/uadado()6or Eac# cell In 4election./ells ;para cada celda de la seleccioncell.Value 7 cell.Value @ 5 ;recalcula el 1alor de la celdaNext cellEnd 4u+Nota> )a macro se aplica a los datos $ue estan actualmente seleccionados1 Para editar la su+rutina& 1amos al editor VB (Alt*611) y #acemos do+le*clic so+re (.o"a1)6igure 1.5J> Edicion de la su+rutina en .o"a 1Escri+imos el codigo& compilamos (en menu Hepuracion)& guardamos y nos de1ol1emos a la #o"a.1 Para e"ecutar la macro seleccionamos la ta+la con el mouse y le1antamos la 1entana de e"ecucion de macros(Alt*6Q)y damos clic en ;E"ecutar;Nota> Esta su+rutina tam+ien se puede editar en un modulo. Para e"ecutarla se procede de la misma orma.1.J.L E"ecucion de una su+rutina mediante un +oton2tra posi+ilidad +astante practica para e"ecutar un programa o su+rutina como lospresentados en la seccionprecedente es mediante un +oton de comando.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5L6igure 1.5L> E"ecutar macroE"emplo MEle1ar al cuadrado los 1alores de una seleccion.1. Primero digitarmos la ta+la de 1alores. )uego insertamos un +oton. Para esto seleccionamos un +oton delcuadro de controles (si la +arra no esta disponi+le& puede #a+ilitarla con Ver * Barra de #erramientas* /uadro de /ontroles).6igure 1.5M> Insertar un +oton5. )uego *ace"os clic e el lu(ar &e la *o7a &o&e 'uere"os el boto. Cna 1e' $ue tenemos el +oton& pode*mos agregar algunas propiedades como eti$ueta& color de ondo& etc.& en el menu de contexto. Este menuse a+re con clic derec#o 9 propiedades. )uego cerramos el menu8. Para editar el codigo $ue de+era e"ecutar el +oton& le damos un par de clics al+oton ($ue toda1%a esta enmodo dise-no). En este caso& si es la primera 1e'& nos aparece el codigoPri1ate 4u+ /ommandButton1`/licP() End 4u+A$u% tenemos dos opcionesa.) Implementar la su+rutina por separado y luego llamarla desde la su+rutina del +otonVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5M6igure 1.5Q> Menu de contexto para un +oton6igure 1.5N> ,a+la y +oton4u+ ele1Al/uadado()6or Eac# cell In 4election./ells ;para cada celda de la seleccioncell.Value 7 cell.Value @ 5 ;recalcula el 1alor de la celdaNext cellEnd 4u+;***********************************************************************Pri1ate 4u+ /ommandButton1`/licP()ele1Al/uadado ;sin parentesisEnd 4u+;***********************************************************************+.) Incluir en la su+rutina del +oton lo $ue 1amos a $uerer $ue se e"ecute cuando se #aga clic so+re elPri1ate 4u+ /ommandButton1`/licP()6or Eac# cell In 4election./ells ;para cada celda de la seleccioncell.Value 7 cell.Value @ 5 ;recalcula el 1alor de la celdaNext cellEnd 4u+=. Cna 1e' $ue escogemos alguna de las dos opciones anteriores& compilamos (en menu Hepurar)& guardamosy nos de1ol1emos a la #o"a.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5QJ. Para #a+ilitar el +oton de+emos des#a+iltar el %cono de dise-no .L. A#ora solo resta seleccioar la ta+la y #acer clic so+re el +oton.2+ser1e $ue al dar un clic so+re el +oton& el programa opera so+re lo $ue te(a"os seleccioa&o pre1ia*mente6igure 1.8K> /orrer una su+rutina desde un +oton con la ta+la seleccionadaVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 5NNota> Puede ser importante conocer la primera o la ultima celda de una seleccion. Para esto podemos usar lapropiedad Address4et F 7 4electionadr 7 F(1& 1).Address ;primera celda de la seleccion& por e"emplo SAS1num 7 Fig#t(adr& 1) ;primera posicion a la derec#a de adr (1 en este caso)1.J.M Matrices dinamicas/uando #acemos una seleccio con el mouse& es con1eniente entrar los 1alores seleccionados en una matri'dinamica& es decir& una matri' $ue se a"uste a la cantidad de datos seleccionada y $ue& e1entualmente& se puedarecortar o #acer mas grande.Cna matri' dinamica mtr1 de entradas enteras se declara as%>Him mtr1() As Integer ; Heclara una matri' dinamica.)as instrucciones siguientes cam+ian el tama-no de la matri' mtr1 y la iniciali'a. 2+ser1e el uso de Fedim paracam+iar el tama-no de la matri' dinamica.Him mtr1() As Integer ; Heclara una matri' dinamica.Him r() as Hou+leFedim mtr1(1K) ; /am+ia el tama-no a 1K elementos& 1x1K.Fedim r(n&m) ; /am+ia tama-no a n x m6or i 7 1 ,o 1K ; Bucle 1K 1eces.mtr1(i) 7 i ; Iniciali'a la matri'.Next iCsando Preser1e se puede cam+iar el tama-no de la matri' mtr1 pero sin +orrar loselementos anteriores.Fedim Preser1e mtr1(1J) ; /am+ia el tama-no a 1J elementos.E"emplo Q/entro de gra1edad de un con"unto de puntos en F5/onsideremos un con"unto7 f(xi2 >i) 4 i 7 12 52 ? ? ? 2 2 xi2 >i / F(. 4upongamos $ue a cada punto (xi2 >i)se le asigna un peso pi tal $ueBi71pi 7 1. El centro de gra1edad @ dese de(ne as%@ 7Bi71pi (xi2 >i)VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8KPor e"emplo& si tenemos dos puntos A2B / F5 con igual peso (este de+era ser 145 para cada punto)& entoncesel centro de gra1edad es el punto medio del segmento $ue une A con B@ 7 A 9 B5)a su+rutina $ue calcula el centro de gra1edad de un con"unto de puntosA F5 actua so+re un rango detres columnas en el $ue se #an escrito las coordenadas (x2 >) de dic#os puntos& as%como sus pesos. Podemoscorrer el programa una 1e' $ue se #a seleccioa&o el rango completo en el $ue se u+ican los puntos y sus pesosaciendo clic so+re un +oton V/entro Rra1edadZ. El gra(co es un tra+a"o adicional./omo el programa necesita $ue el usuario #aya seleccionado al menos dos (las y exactamente tres columnas&incluimos un ragmento de codigo adicional para controlar la seleccion.4et F 7 4election n 7 F.Fo!s./ount ; Numero de Ulas m 7F./olumns./ount ; Numero de columnasI n ] 1 And m 7 8 ,#en;todo esta +ien& el programa continuaElseMsgBox (ZHe+e seleccionar los datosZ)Exit 4u+ ; salimos de la su+rutinaEnd I2+ser1emos $ue si no se cumple el re$uisito& se en1%a un mensa"e y la su+rutina se de"a de e"ecutar. Puedecausar curiosidad $ue $ue antes del Else no #aya codigo. A 1eces se usa esta construccion por comodidad. 4ino #ay codigo el programa continua.Veamos el codigo completo en la su+rutina del +otonPri1ate 4u+ /ommandButton5`/licP()Him F As FangeHim n&m& i As IntegerHim x() As Hou+le ; matri' dinamicaHim y() As Hou+le ; se a"ustara a la seleccion de datosHim p() As Hou+leHim 4umapesos& Rx& Ry As Hou+le;En el rango F guardamos el rango seleccionado>4et F 7 4electionn 7 F.Fo!s./ount ; Numero de Ulasm 7 F./olumns./ount ; Numero de columnas; c#e$uear $ue se #ayan seleccionado los datos de la ta+laI n ] 1 And m 7 8 ,#en;nada pasa& todo +ienElseMsgBox (ZHe+e seleccionar los datosZ)VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 81Exit 4u+ ; salimos de la su+rutinaEnd IFeHim x(n) ; 1ector x tiene a#ora n camposFeHim y(n)FeHim p(n)4umapesos 7 K ;iniciali'a para acumularRx 7 KRy 7 K;iniciali'a las matrices con los datosI n ] 1 ,#en ;si #ay datos seleccionados& n ] 16or i 7 1 ,o nx(i) 7 F(i& 1) ;entra los datos de columna de los x;sy(i) 7 F(i& 5)p(i) 7 F(i& 8);calcula centro de gra1edad4umapesos 7 4umapesos 9 p(i)Rx 7 Rx 9 x(i) ? p(i)Ry 7 Ry 9 y(i) ? p(i)Next iI A+s(4umapesos * 1) Y K.KK1 ,#en ;la suma los pesos de+e ser 1Rx 7 Rx A 4umapesosRy 7 Ry A 4umapesos;escri+e R en la celda H1=/ells(1=& =) 7 ZR 7 (Z 9 4tr(Rx) 9 Z&Z 9 4tr(Ry) 9 Z)Z/ells(1=& J) 7 ZZ ;limpia E1= de mensa"es pre1iosElse;mensa"e de error/ells(1=& J) 7 ZError& los pesos suman Z 9 4tr(4umapesos)/ells(1=& =) 7 ZZ ;limpia H1= de 1alores pre1iosEnd IElse/ells(1=& =) 7 ZZ;1entana de ad1ertencia> seleccione datosIMsgBox (ZHe+e seleccionar los datosZ)Exit 4u+ ; a+orta la su+rutina si no #ay datosEnd IEnd 4u+Nota> Por cuestiones de redondeo& la instruccion I 4umapesos 7 1 se cam+io por I A+s(4umapesos * 1)Y K.KK1 .Cn e"emplo de corrida se 1e en la (gura $ue sigueE"ercicios 11. Csando la notacion del ultimo e"emplo& se de(ne la iercia total decomoVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 856igure 1.81> /orrer una su+rutina desde un +oton0() 7Bi71pi 77 (xi2 >i) @7 75donde 77(a2 b)77 7pa5 9 b5 es la norma usual.Implemente una su+rutina $ue calcula la Inercia ,otal dey apl%$uela a la ta+la del e"emplo Q.5. 4i tenemos9 1 puntos f(xK2 >K) 2 (x12 >1) 2 (x52 >5) 2 ? ? ? (x2 >) (& se de(neLi(x) 7(x xK)(x x1) ? ? ? (x xi1)(x xi91) ? ? ? (x x)(xi xK)(xi x1) ? ? ? (xi xi1)(xi xi91) ? ? ? (xi x)2 sea& en Li(x) se elimina el actor (x xi) en el numerador y el actor (xi xi) en el denominadorImplemente una #o"a& como se 1e en la (gura& en la $ue el usuario #ace una seleccion de la ta+la y al#acer clic en el +oton& se calcula L5(5:JL)6igure 1.85> L5(5:JL)VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 88Parte del codigo ser%a...4et F 7 4electionn 7 F.Fo!s./ount ; Numero de UlasFeHim x(n) ; 1ector x tiene a#ora n camposFeHim y(n)1alorB 7 /ells(5& 8) ; 1alorB esta en celda /5I n ] 1 ,#en ;si #ay datos seleccionados& n ] 16or i 7 1 ,o nx(i) 7 F(i& 1) ;entra los datos de columna de los xi;s y los yi;s& inicia en 1y(i) 7 F(i& 5) ;a$u%& iniciamos desde x1& es decir el xK de la teor%a& es x1Next i)5n7 1 ;inicia calculo de )5n(1aria+le x)6or " 7 1 ,o n ;calculamos )5n(1alorB)I " Y] 5 ,#en)5n 7 )5n ? (1alorB * x(")) A (x(P) * x(")) ;)5n e1aluado en 1alorBEnd INext "/ells(5& =) 7 )5nElseMsgBox (ZHe+e seleccionar los datosZ)Exit 4u+ ; a+orta la su+rutina si no #ay datos seleccionadosEnd I...8. 4i tenemos 91 puntos f(xK2 >K) 2 (x12 >1) 2 (x52 >5) 2 ? ? ? (x2 >) (& un polinomio $ue pasa por todos estospuntos se llama #olio"io 0terpolate. Cn polinomio interpolante muy conocido es el Polinomio de)agrange#(x) 7Bi7Ka77K27B7i(x x7)(xi x1)>io sea#(x) 7Bi7K(x xK)(x x1) ? ? ? (x xi1)(x xi91) ? ? ? (x x)(xi xK)(xi x1) ? ? ? (xi xi1)(xi xi91) ? ? ? (xi x)>i2 sea& para cada 1alor de i se elimina el actor (x xi) en el numerador y el actor (xi xi) en eldenominadorEste polinomio cumple #(xi) 7 >i i 7 12 52 :::.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8=Por e"emplo& para el caso de tres puntos (xK2 >K)& (x12 >1) y (x52 >5)& el Polinomio de )agrange es#(x) 7(x x1)(x x5)(xK x1)(xK x5)>K 9(x xK)(x x5)(x1 xK)(x1 x5)>1 9(x xK)(x x1)(x5 xK)(x5 x1)>5(a) Implemente una su+rutina $ue& a partir de una seleccio de puntos (xi2 >i) (en dos columnas) enuna #o"a de Excel& e+alua el polinomio interpolante en una 1alor dado de antemano en una celda& osea& calcula #(a) para un 1alor a dado.(+) Apli$ue la implementacion anterior a una ta+la como la $ue se presenta en la (gura6igure 1.88> Polinomio de )agrangeParte del codigo ser%a...suma 7 K ;iniciali'a para acumularI n ] 1 ,#en ;si #ay datos seleccionados& n ] 16or i 7 1 ,o nx(i) 7 F(i& 1) ;entra los datos de columna de los xi;s y los yi;s& inicia en 1y(i) 7 F(i& 5) ;a$u%& iniciamos desde x1& es decir el xK de la teor%a& es x1Next i6or P 7 1 ,o n)Pn 7 1 ;inicia calculo de )Pn6or " 7 1 ,o n ;calculamos )Pn(1alorB)I " Y] P ,#en)Pn 7 )Pn ? (1alorB * x(")) A (x(P) * x(")) ;)Pn e1aluado en 1alorBEnd INext "suma 7 suma 9 )Pn ? y(P)Next P/ells(J& =) 7 sumaElse;1entana de ad1ertencia> seleccione datosIMsgBox (ZHe+e seleccionar los datosZ)Exit 4u+ ; a+orta la su+rutina si no #ay datos seleccionadosEnd I...VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8J1.J.Q Inclusion de procedimientos de +orradoEn ocasiones es necesario +orrar alguna inormacion $ue #a sido escrita en una #o"a electronica& por lo $ue esimportante conocer una orma de incorporar en la aplicacion un procedimiento de +orrado.E"emplo NPresentamos a continuacion un programa $ue& a partir de un numero 6 construyeel triangulo de Pascal de Nni1eles. ,am+ien se incluye un programa $ue unciona como +orrador o destructor del triangulo.En cada ni1el del triangulo #ay un uno en los extremos y& a partir del tercer ni1el& cada numero& sal1o losextremos& es la suma de los dos de arri+a. /oncretamente& el triangulo de Pascal es un arreglo triangular denumeros de la orma>6igure 1.8=> ,riangulo de Pascal.Por simplicidad& presentamos un programa $ue lee el numero de ni1eles del triangulo de Pascal en la celda E1y lo despliega de la orma>11 11 5 11 8 8 11 = L = 11 J 1K 1K J 1...El procedimiento para +orrar el triangulo tam+ien lee el numero de ni1eles del triangulo de la celda E1.,anto la construccion del triangulo como su destruccion pueden ser acti1ados mediante +otones. )as instruc*ciones $ue reali'an estos procedimientos tam+ien pueden ser incluidas directamente en el codigo de los +otones&tal y como se detalla a continuacion.El codigo para la construccion del triangulo $uedar%a as%>Pri1ate 4u+ E"ecucionHePascal`/licP()VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8L; )ectura de la cantidad de ni1eles>N 7 /ells(1&J); )lenar unos>6or i 7 1 ,o N/ells(i&1)7 1/ells(i&i)7 1Next i; )lenar el resto>I N ] 5 ,#en6or i78 ,o N6or "75 ,o i*1/ells(i&")7 /ells(i*1&") 9 /ells(i*1&"*1)Next "Next iEnd IEnd 4u+El procedimiento para +orrar el triangulo tam+ien lee el numero de ni1eles y #ace el mismo recorrido de celdas$ue #i'o el constructor y en cada celda escri+e un 1alor nulo.Pri1ate 4u+ Borrador`/licP()N 7 /ells(1& J).Value6or i 7 1 ,o N6or " 7 1 ,o i/ells(i& ").Value 7 NullNext "Next iEnd 4u+6igure 1.8J> ,riangulo de Pascal construido con 1K ni1eles.E"ercicios 51. ,riangulo de Pascal. .aga un programa $ue& al acti1arlo desde un +oton de comando& lea un un numero6 de la celda A1 y construya el triangulo de Pascal en la orma>11 11 5 11 8 8 11 = L = 11 J 1K 1K J 1 ...VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8MAdemas& incluya un +oton $ue acti1e un destructor especiali'ado para este triangulo.5. Aritmetica entera. En VBA #ay dos tipos de di1ision> aA+ es la di1ision corriente (en punto Xotante)y aV+ $ue es la di1ision entera. Por e"emplo& 8A5 7 1.J mientras $ue 8V5 7 1..ay muc#os algoritmos en los $ue se usa exclusi1amente di1ison entera. Veamos un e"emplo.4i 6 es un entero positi1o& 1amos a calcular el entero mas grande $ue es menor o igual ap6 & esdecir bp6c (: b c ; es la parte entera). El algoritmo& $ue opera en aritmetica entera& es el siguientea.) Inicio> sK 7 65+.) si91 7si 9 6si5 2 i 7 K2 12 52 :::c.) iterar #asta $ue si91 C sid.) el ultimo si es bp6cPor e"emplo si 6 7 1K &p6 D 82 1L55MMLL y el ultimo si ser%a 8Implemente el algoritmo.8. /alculo de la ra%' cuadrada. Para calcularpx con x / F9 & se pueden usar 1arios algoritmos de*pendiendo de la precision y rapide' $ue se +usca. )a calculadoras usualmente tienen implementadas muy+uenas su+rutinas para calcular exponenciales y logaritmos por lo $ue para calcularpx usan la identidadpx 7 e15ln(x)En nuestro caso& por simplicidad& 1amos a usar un metodo iterati1o> el metodo deNe!ton. Ba"o ciertas#ipotesis& si xK es una +uena aproximacion a una solucion r de la ecuacion #(x) 7 K entonces el es$uemaiterati1oxi91 7 xi #(xi)#E(xi)con1erge a r con error 8 7xi xi917 .Para #allarpF con F < K & 1amos a resol1er la ecuacion1x51F7 K con el metodo de Ne!ton. Estonos dara una aproximacion apF .Nota> /omo F es una constante& el es$uema iterati1o se podr%a simpli(car un pocomas en el codigoNota> ,am+ien se pudo #a+er usado la ecuacion x5 F 7 K pero el proceso de aproximacion es un pocomas lento.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8QNota> Para una aproximacion inicial FK se podr%a usar bpFc usando la solucion del pro+lema anterior.En la practica se usa una aproximacion inicial +asada en la representacion +inaria del numero.=. Numeros primos. 2+tenga un programa para #allar el numero primo mas cercano a un numero 6&siendo N un numero entero positi1o mayor $ue uno.8Por e"emplo& los numeros primos menores $ue JK son>5& 8& J& M& 1N& 58& 5N& 81& 8M& =1& =8.4i 6 7 JK & el programa de+er%a retornar el numero =8.Cn procedimiento clasico para #allar todos los numeros primos menores $ue un entero positi1o 6& es lallamada criba &e Eratostees. )o $ue se #ace es colocar en una lista todos los numeros del 5 al 6 e ireliminando de esta lista todos los multiplos de 5 (=& L& Q& ...)& todos los multiplos de 8 (L& N& 15& ...)& y as%sucesi1amente& #asta eliminar todos los multiplos de los primos $ue #an ido $uedando en la lista menoreso iguales $uep6. Para decidir si un numero es multiplo de otro& usamos la uncion mod. Esta uncionde1uel1e el resto de una di1ision (entera). As%& si un numero es multiplo de otro& la di1ision es exacta& osea& el resto es cero. En codigo ser%a as%I m mod n 7 K ,#en ;si m es multiplo de n .... End I1.L E1aluando expresiones matematicas escritas en lengua"e matematicocomunCn e1aluador de expresiones matematicas o un VparserZ& es un programa $ue determina la estructura gramat*ical de una rase en un lengua"e. Este es el primer paso para determinar el signi(cado de una rase tal comoZx@59yZ& $ue para un lengua"e de programacion signi(ca traducirla en lengua"e dema$uina.En [N\ encontrara un VparserZ para e1aluar expresiones matematica en Visual Basic. 4in em+argo unciona +iencon Excel. Ademas nos da la posi+ilidad de agregar unciones propias mas comple"as ademas de la $ue el parsertrae implementadas tales como BesselW(x&n)& .ypReom(x&a&+&c) o 0AVE`FINR(). Por e"emplo& la uncion atro'os. Este parser ue desarrollado por )eonardo Volpi [N\.1.L.1 Csando clsMat#Parser. 4intaxisPrimero descargamos clsMat#Parser.'ip. En la carpeta clsMat#Parser& ademas de ladocumentacion en pd&1ienen dos arc#i1os> clsMat#Parser.cls y mMat#4pec6un.+as. El primero es el parser y el segundo es una+i+lioteca con unciones especiales ya implementadas.Para implementar un e"emplo de uso del parser& implementamos una #o"a excel como la $ue se 1e en la (gura8Cn numero natural p < 12 es pri"o si sus unicos di1isores positi1os son 1 y p. En caso contrario& es unnumero co"puesto.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. 8N6igure 1.8L> Csando clsMat#Parser.1. En el editor de VBA& seleccionamos la V.o"a1Z y #acemos clic en el +oton derec#o del mouse. A#% elegimosImportar Arc#i1o.... )uego 1amos a la carpeta clsMat#Parser y seleccionamos clsMat#Parser.cls5. He la misma manera& importamos el arc#i1o mMat#4pec6un.+as./omentario. /on esto ya podemos crear un o+"eto 6un con Him 6un As Ne! clsMat#Parser1 en elcodigo del +oton. )as e1aluaciones se lle1an a ca+o con 6un.E1al1(x1al)8. En el editor VBA de+era $uedar algo parecido a6igure 1.8M> Editor VBA con los modulos.En este caso el modulo de clase $uedo con el nom+re clsMat#Parser. As% $ue el o+"eto 6un se construyecon Him 6un As Ne! clsMat#Parser=. 6inalmente el codigo del +oton esPri1ate 4u+ /ommandButton1`/licP()Him x1al As Hou+leHim 6ormula As 4tringHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; crear o+"eto 6unVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =K6ormula 7 /ells(L& 5)x1al 7 /ells(J& =)2O 7 6un.4toreExpression(6ormula) ; leer ;6ormula; y anali'ar sintaxisI Not 2O ,#en Ro,o Error`.andler ; si #ay un error 1a al mane"ador de errores/ells(L& 8) 7 Z(Z 9 str(1alx) 9 Z)7 Z/ells(L& =) 7 6un.E1al1(x1al) ;e1aluar en la ormula actualI Err ,#en Ro,o Error`.andler ;si #ay error...Error`.andler> /ells(1&1)7 6un.ErrorHescription ;Mensa"e de errorEnd 4u+1. )as 1aria+les de+en empe'ar con una letra& por e"emplo t& xi& time. Para e1itar la am+igbuedad& xy seinterpreta como una 1aria+le. El producto re$uiere ?& es decir x?y es el producto de x e > . 4e permitemultiplicacion impl%cita solo para x2 >2 y ! & o sea& por e"emplo 5x se interpreta como 5?x5. )os argumentos de una uncion& si #ay 1arios& se separan con una coma& por e"emplo max(x&y)& root(x&y).8. )as expresiones logicas retornan 1 o K . /omo e"emplo de estas expresiones tenemos (xY71)& (5YxY5).Cna expresion como V x ; K o x < 8 Z se introduce como (xYK)9(x]8)=. )a expresionf(x) 7QY>x5 9 x si x ; Klog(x) 9px si x < 5se introduce como (xYK)?(x@59x) 9 (x]5)?(log(x)9s$r(x))J. (Mane"o de signos) )as siguientes expresiones so e'ui+aletesx@*n x@(*n)x?*sin(a) x?(*sin(a))*J?*5 *J?(*5)*x@5 (*x)@5& o sea& *8@5 7 (*8)@5 7 NL. /onstantes> D es piD y e es eD. Por e"emplo(a) cos(x 9 D) 9 ex se introduce como cos(x9piD)9eD@x(+) ex5 se de+e introducir como 1AeD@(x@5) o como eD@(*1?x@5) pues eD@(*x@5) 7 ex5VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =1M. /onstantes %sicas./onstante de PlancP #D L.L5LKMJJe*8= W s/onstante de Bolt'mann OD 1.8QKLJQe*58 WAO/arga elemental $D 1.LK51MM88e*1N /Numero de A1ogadro AD L.K5518LMe58 particlesAmolVelocidad de la lu' cD 5.NNMN5=JQeQ mAsPermea+ilidad del 1acio ( m ) muD 15.JLL8MKL1=e*M ,5m8AWPermiti1idad del 1acio ( e ) epsD Q.QJ=1QMQ1Me*15 /5AWmMasa del Electron meD N.1KN8QNMe*81 PgMasa del Proton mpD 1.LM5L581e*5M PgMasa del Neutron mnD n 1.LM=N5QLe*5M Pg/onstante Ras FD Q.81=J1 m5PgAs5P mol/onstante gra1itacional RD L.LM5e*11 m8APg s5Aceleracion de la gra1edad gD N.QKLLJ mAs5)as constantes %sicas de+en ir seguidas por sus unidades de medida> Z1 sZ & Z5KK mZ & Z5J PgZ &Z1JK M.'Z& ZK.1J u6Z& Z8LKK Po#mZ. 4e utili'an de manera analoga a las constantematematicas. Pore"emplo epsD ? 4AdD& s$r(m?#?gD)& sK91?t9K.J?gD?t@5Q. 4%m+olos y 6unciones9 adiccion* resta? multiplicacionA di1ision 8JA= 7 Q.MJ^ porcenta"e 8J^ 7 8.JV di1ision entera 8JV= 7 Q@ ele1ar a potencia [email protected] 7 M.55=LM=KJJQ=5KQ (G)c c 1alor a+soluto c*Jc7J I actorial JI715Ka+s(x) 1alor a+soluto a+s(*J)7 Jatn(x) atan(x) x en radianescos(x) x en radianessin(x)exp(x) exponencial exp(1) 7 5.M1Q5Q1Q5Q=JNKJ o sea e@1Ux(x) parte entera Ux(*8.Q) 7 8int(x) parte entera int(*8.Q) 7 *=dec(x) parte decimal dec(*8.Q) 7 *K.Qln(x)& logaritmo natural x]Klog(x) logaritmo naturallogN(x&n) logaritmo +ase N logN(1L&5) 7 =rnd(x) random retorna un 1alor aleatorio entre x y Ksgn(x) signo retorna 1 si x ]K & K si x7K& *1 si xYKs$r(x) ra%' cuadrada s$r(5) 71.=1=518JL58M81& tam+ien 5@(1A5)c+r(x) ra%' cu+icaroot(x&n) ra%' n*esima x@(1An)mod(a&+) mod(5N&L) 7 J& mod(*5N &L) 7 *Jcom+(n&P) com+inaciones com+(L&8) 7 5K & com+(L&L) 7 1perm(n&P) permutaciones perm(Q&=) 7 1LQKVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =5,am+ien& entre otras&min(a&+)&max(a&+)& sec#(x)& cot#(x)& acsc#(x)& asec#(x)& acot#(x)& round(x&d)&mcd(a&+)& mcm(a&+&gcd(a&+)&lcm(a&+)& csc(x)& sec(x)& cot(x)& acsc(x)& asec(x)&acot(x)& csc#(x)&tan(x)& acos(x)& asin(x)& cos#(x)& sin#(x)& tan#(x)& acos#(x)&asin#(x)& atan#(x)& and(a&+)&or(a&+)&not(a)&xor(a&+)& Psi(x)& HNorm()& /Norm()&HPoisson()&/Poisson()&HBinom()&/Binom()& 4i(x) (4ineIntegral)& /i(x)&6resnel4(x)&etc.N. Metodos4toreExpression() Almacena y re1isa la sintaxisE1al(x) E1alua la expresion ($ue posi+lemente tenga 1arias 1aria+les)E1al1(x) E1alua una expresion de una 1aria+leE1al() se usa cuando 1amos a e1aluar expresiones con 1arios parametros yAo 1aria+les. E1al1() es para un*ciones de una sola 1aria+le.Vamos a 1er algunos e"emplos en los $ue se aplican estos metodos.1.L.5 E"emplo> un gra(cador 5HPodemos implementar de manera muy sencilla un gra(cador de unciones > 7 f(x) .Para esto& leemos la ecuacion de la uncion > 7 f(x) en una celda y el inter1alo degra(cacion [a2 b\ . Para#acer el gra(co necesitamos una ta+la de 1alores (xi2 >i) . )o $ue #acemos es partirel inter1alo [a2 b\ en 91puntos xi2 i 7 K2 12 :::2 < y e1aluamos la uncion en cada uno de estos xi . 4i los puntos son e$uidistantes& ladistancia de separacion es * 7 (b a)4 y este casoxE 4 a bxi 4 a H iI*x.4 a H .I *x 4*... ...6igure 1.8Q> Partir el inter1alo enpuntos.xK 7 a 9 K ? *x1 7 a 9 1 ? *x5 7 a 9 5 ? *...VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =8xi 7 a 9 i ? *x 7 a 9? *Entonces la ta+la de puntos es el con"unto f(a 9 i ? *2 f (a 9 i ? *)) 2 i 7 K2 12 :::2 (4upongamos $ue el gra(cador 1a a $uedar en una #o"a como la $ue se 1e en la (gura6igure 1.8N> Rra(cador 5H.Entonces la ta+la de puntos la #acemos con el codigon 7 /ells(L& J)a 7 /ells(L& 8)+ 7 /ells(L& =)# 7 (+ * a) A n6ormula 7 /ells(5& 8)2O 7 6un.4toreExpression(6ormula) ;lectura de la ormulaI Not 2O ,#en Ro,o Error`.andler6or i 7 K ,o n/ells(L 9 i& 1) 7 a 9 i ? # ;xi;s/ells(L 9 i& 5) 7 6un.E1al1(a 9 i ? #) ;yi;sNext i)uego de+emos seleccionar la ta+la de 1alores y #acer un gra(co (c#art). 4i #ay ungra(co pre1io lo podemos+orrar ($ue no es necesario si uno $uiere comparar gra(cos por e"emplo). Estas dos cosas se #ace con el codigoVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. ==;*********************** eliminar graUcos anteriores****************4et c#arts,emp 7 Acti1e4#eet./#art2+"ectsI c#arts,emp./ount ] K ,#enc#arts,emp(c#arts,emp./ount).HeleteEnd I;************************ graUco ***********************************datos 7 Fange(/ells(L& 1)& /ells(L 9 n& 5)).Address ;rango a graUcar4et gra 7 /#arts.Add ;graUco0it# gra ;caracter%sticas.Name 7 ZRraUcoZ./#art,ype 7 xlBa4catter4moot#NoMarPers ;tipo de graUco Ba(Hispersion).4et4ourceHata 4ource>74#eets(Z.o"a1Z).Fange(datos)& PlotBy>7xl/olumns.)ocation 0#ere>7xl)ocationAs2+"ect& Name>7Z.o"a1ZEnd 0it#El codigo completo del codigo del +oton $ue le1anta el gra(co esPri1ate 4u+ /ommandButton5`/licP()Him n As IntegerHim # As Hou+leHim 6ormula As 4tringHim gra As /#artHim c#arts,emp As /#art2+"ects ;contador de c#arts (graUcos) para eliminar el anteriorHim 2O As BooleanHim 6un As Ne! clsMat#Parsern 7 /ells(L& J)a 7 /ells(L& 8)+ 7 /ells(L& =)# 7 (+ * a) A n6ormula 7 /ells(5& 8)2O 7 6un.4toreExpression(6ormula) ;lectura de la ormulaI Not 2O ,#en Ro,o Error`.andler6or i 7 K ,o n/ells(L 9 i& 1) 7 a 9 i ? #/ells(L 9 i& 5) 7 6un.E1al1(a 9 i ? #)Next i;*********************** eliminar graUcos anteriores*************4et c#arts,emp 7 Acti1e4#eet./#art2+"ectsI c#arts,emp./ount ] K ,#enc#arts,emp(c#arts,emp./ount).HeleteEnd I;*****************************************************************datos 7 Fange(/ells(L& 1)& /ells(L 9 n& 5)).Address ;rango a graUcarVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =J4et gra 7 /#arts.Add ;graUco y sus carater%sticas0it# gra.Name 7 ZRraUcoZ./#art,ype 7 xlBa4catter4moot#NoMarPers.4et4ourceHata 4ource>74#eets(Z.o"a1Z).Fange(datos)& PlotBy>7xl/olumns.)ocation 0#ere>7xl)ocationAs2+"ect& Name>7Z.o"a1ZEnd 0it#;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1& 1) 7 6un.ErrorHescription ;imprimir mensa"e error;***************************************************************End 4u+2+ser1e $ue se pueden gra(car unciones a tro'os. Por e"emplo& para gra(carf(x) 7QY>x5 si x /\ .2 K[x si x /\K2 5\= x si x /\52.[digitamos la uncion como(x) 7(xYK)?(x@5)9(KYxY75)?x9(x]5)?(=*x)6igure 1.=K> 6uncion a tro'os.E"ercicios 8Implemente un gra(cador para cur1as de(nidas por una ecuacion parametrica.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =LNota. Algunas cur1as& como los c%rculos& las elipses& etc.& se de(nen por medio de ecuaciones parametricas(x(t)2 >(t))2 t / [a2 b\:Por e"emplo1 )as ecuaciones parametricas de un c%rculo de radio r y centro en (*2 %) son(* 9 r cos(t)2 % 9 rsen(t))2 t / [K2 5D\:1 )as ecuaciones parametricas de un cicloide son (a < K)x 7 a(J senJ)2 > 7 a(1 cos J)2 J / F:1 Cna cur1a con ecuacion en polares r 7 f(J)2 J / [a2 b\< tiene ecuacion parametrica(f(J) ? cos(J)2 f(J) ? sen(J))2 t / [a2 b\:1.L.8 E"emplo> un gra(cador de super(cies 8HPodemos implementar de manera muy sencilla un gra(cador de super(cies de ecuacion ! 7 f(x2 >) .Para esto solo #ay $ue o+ser1ar $ue en 1e' de una ta+la de puntos ( xi2 >i2 !i(xi2 >i)) en tres columnas& Excelnecesita una ta+la de la ormaxK x1 ? ? ? xnyK (xK&yK) (x1&yK) ? ? ? (xn&yK)y1 (xK&y1) (x1&y1)...yn (xK&yn) (x1&yn) ? ? ? (xn&yn))os inter1alos de gra(cacion son x / [x"i2 x"ax\ y > / [>"i2 >"ax\ . /ada inter1alo lo partimos en puntos ($ue puede puede ser modi(cado por el usuario).VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =M>ixifKxi,>iLabp ' MNKxi,>iL6igure 1.=1> Particion.4i #x 7 (xmax*xmin)An y si d#y 7 (ymax*ymin)An& entoncesxi 7 xmin 9 i?#x& i 7 K&1&...&ny" 7 ymin 9 "?#y& " 7 K&1&...&nPara $ue la ta+la $uede en el ormato adecuado& de+emos usar dos 6or6or i 7 K ,o nxi 7 xmin 9 i ? #x/ells(M& 5 9 i) 7 xi ;Ula de las xi6or " 7 K ,o nyi 7 ymin 9 " ? #y/ells(Q 9 "& 1) 7 yi ;columna de la yi2O 7 6un.4toreExpression(xy) ;ormula actual es ;(x&y);I Not 2O ,#en Ro,o Error`.andler6un.Varia+le(ZxZ) 7 xi ; asignacion para e1aluar6un.Varia+le(ZyZ) 7 yi/ells(Q 9 "& 5 9 i) 7 6un.E1al() ;retorna (xi&yi)Next "Next iCna 1e' $ue se genera la ta+la de datos& la seleccionamos y la ocultamos (por$ue es muy grande y llena dedecimales). )uego generamos el gra(co 8H.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =Q6igure 1.=5> Rra(cador 8H.El codigo completo esPri1ate 4u+ /ommandButton5`/licP()Him xmin& xmax& ymin& ymax& #x& #y& xi& yi As Hou+leHim n As IntegerHim xy As 4tring ;uncion (x&y)Him gra As /#artHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%xy 7 /ells(5& 5)xmin 7 /ells(J& 8)xmax 7 /ells(J& =)ymin 7 /ells(J& J)ymax 7 /ells(J& L)n 7 /ells(8& 5) ; numero de puntos n x n#x 7 (xmax * xmin) A n#y 7 (ymax * ymin) A nI #x ] K And #y ] K And n ] K ,#en6or i 7 K ,o nxi 7 xmin 9 i ? #x/ells(M& 5 9 i) 7 xi6or " 7 K ,o nyi 7 ymin 9 " ? #y/ells(Q 9 "& 1) 7 yi2O 7 6un.4toreExpression(xy) ;ormula actual es ;(x&y);I Not 2O ,#en Ro,o Error`.andlerVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. =N6un.Varia+le(ZxZ) 7 xi6un.Varia+le(ZyZ) 7 yi/ells(Q 9 "& 5 9 i) 7 6un.E1al() ;retorna (xa&ya)Next "Next iEnd I;*********************** eliminar graUcos anteriores*************4et c#arts,emp 7 Acti1e4#eet./#art2+"ectsI c#arts,emp./ount ] K ,#enc#arts,emp(c#arts,emp./ount).HeleteEnd I;*****************************************************************datos 7 Fange(/ells(M& 1)& /ells(M 9 n& n 9 5)).Address ;rango a graUcarFange(datos).4elect4election.Num+er6ormat 7 Z7Z.o"a1Z;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1& 1) 7 6un.ErrorHescription ;en1iar un mensa"e de error;***************************************************************End 4u+Nota> para rotar la (gura& seleccione el area del gra(co y #aga clic con el +oton derec#o del mouse& seleccioneen el menu la opcion Vista en 8H...1.L.= E"emplo> series numericas y series de potenciasE"emplo 1KImplementaremos una uncion $ue calcula la suma parcial S6 7B6%7%Kf(%) . )uego la aplicaremos a la serie.B%715%%I.Para esto 1amos a de(nir una uncion4umaParcial(ormula& Oini& N)7B6%7$iif(%) .Esta uncion re1isa la sintaxis de la ormula y calcula la suma parcial.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. JK6igure 1.=8> 4uma parcial.6unction 4umaParcial(laormula& Oini& N)Him suma As Hou+leHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%2O 7 6un.4toreExpression(laormula) ; ormula actual es ZlaormulaZI Not 2O ,#en Ro,o Error`.andlersuma 7 K6or i 7 Oini ,o Nsuma 7 suma 9 6un.E1al1(i) ;e1alua en ZlaormulaZNext i;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1&1)7 6un.ErrorHescription;***************************************************************4umaParcial 7 sumaEnd 6unctionA#ora& podemos aplicar esta uncion con un +otonPri1ate 4u+ /ommandButton1`/licP()Him ormula1 As 4tringHim N& PP As Integerormula1 7 /ells(Q& J)N 7 /ells(M& =)PP 7 /ells(1K& =)/ells(Q& M) 7 4umaParcial(ormula1& PP& N)End 4u+E"emplo 11Hada una serie numerica.B%7%Kf(%) & 1amos a desplegar las primeras 6 sumas parciales S6 7B6%7%Kf(%) & de lacelda A= en adelante.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. J16igure 1.==> 4umas parciales.Csando la uncion 4umaParcial(ormula& Oini& N)& solo de+emos calcular cada suma parcial por separado.6or i 7 1 to N/ells(89i&1)7 4umaParcial(ormula&Oini&i)Next iEl codigo del +oton esPri1ate 4u+ /ommandButton1`/licP()Him xK As Hou+leHim ormula1 As 4tringHim N As Integerormula1 7 /ells(8& 5)N 7 /ells(8& =)6or i 7 1 ,o N ;sumas parciales 41& 45& ... 4N/ells(8 9 i& 1) 7 Z4Z 9 str(i) 9 Z 7 Z/ells(8 9 i& 5) 7 sp(ormula1& 1& i)Next iEnd 4u+A#ora 1amos a cam+iar a series de potenciasE"emplo 15Csando E1al(). Hada una serie de potencias.B%7%Kf(x2 %) & implementaremos una su+rutina $ue calcula lasuma parcial S6 7B6%7%Kf(xK2 %) . )uego la aplicaremos a la serie.B%71x%%I& con x 7 5 .Vamos a implementar una nue1a uncion 4umaParcial(laormula& Oini& N& xx).A$u% la situacion es dierente& f(x2 %) tiene dos 1aria+les& por tanto no podemos usar E1al1() por$ue estemetodo es para unciones de una sola 1aria+le.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. J56igure 1.=J> 4uma parcial para una serie de potencias.E1al() e1alua la expresion actual almacenada y retorna su 1alor. Para e1aluar& se de+e especi(car el 1alor decada 1aria+le con 6un.Varia+le(). En nuestro caso de+emos #acer la especi(cacion 6un.Varia+le(ZxZ)7xxy 6un.Varia+le(ZPZ)7i& antes de llamar a E1al(). Veamos el codigo de la uncion 4umaParcial(laormula&Oini& N& xx)6unction 4umaParcial(laormula& Oini& N& xx)Him suma As Hou+leHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%2O 7 6un.4toreExpression(laormula) ; ormula actual es ZlaormulaZI Not 2O ,#en Ro,o Error`.andlersuma 7 K6un.Varia+le(ZxZ) 7 xx6or i 7 Oini ,o N6un.Varia+le(ZPZ) 7 isuma 7 suma 9 6un.E1al() ;e1alua en ZlaormulaZ actualNext i;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1&1)7 6un.ErrorHescription;***************************************************************4umaParcial 7 sumaEnd 6unctionA#ora& el codigo del +oton ser%aPri1ate 4u+ /ommandButton1`/licP()Him ormula1 As 4tringHim N& PP As IntegerHim xK As Hou+leormula1 7 /ells(Q& J)N 7 /ells(M& =)PP 7 /ells(1K& =)xK 7 /ells(M& Q)/ells(Q& M) 7 4umaParcial(ormula1& PP& N& xK)End 4u+VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. J8E"ercicios =1. Implemente un uncion para series alternadas $ue ademas de dar la suma parcial pedida& indi$ue la es*timacion del error. Fecuerde $ue si.B%71f(%) es alternada entonces si el error cometido al aproximar laserie con la suma parcial S6 7B6%71f(%) es O6 & entonces 7O67 8 a691 ./#apter 5Elementos de Analisis Numerico5.1 4olucion de ecuaciones de una 1aria+le5.1.1 Metodo de Ne!ton*Fap#son)a intencion no es #acer un desarrollo teorico de este metodo& sino centrarse enuna implementacion con codigosencillo& ideal para experimentos. En general& no #ay control de excepciones (como di1isiones por cero& o1erXo!&etc).6igure 5.1> Metodo de Ne!ton.Vamos a usar clsMat#Parser por ser un e1aluador rapido y e(ciente.4i xK es una aproximacion su(cientemente cercana a una solucion r de f(x) 7 K & con fE(r) B7 K & entonces lasucesion xi91 7 xi f(xi)fE(xi)aproxima r con error menor $ue 7xi91 xi7Para implementar este metodo& leemos la uncion ((x) 7 x f(x)fE(x)& entonces el algoritmo ser%a muy sencilloi71xi 7 xK!#ile i Y7 Nxim1 7 g(xi) ;xim1 es x`di91eJ=VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. JJi cxim1 * xicY ,ol t#en;pararExit 4u+end ii7i91xi 7 xim1!endEn este caso& de+emos leer y almacenar la uncion ( . Entonces& en el codigo& ((xi) 76un.E1al1(xi)En este e"emplo 1amos a usarHo !#ile co&icioistruccioes)oop4i e"ecutamos el codigo desde un +oton entonces el codigo ser%a algo comoPri1ate 4u+ /ommandButton1`/licP()Him xK& tol& xi& xim1& errorEst As Hou+leHim N As IntegerHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%xK 7 /ells(M& 8)N 7 /ells(M& 5)tol 7 /ells(M& 1)g 7 /ells(8& 5)/ells(L& L) 7 Z Z ;limpia mensa"es anteriores2O 7 6un.4toreExpression(g) ;ormula actual es gI Not 2O ,#en Ro,o Error`.andlerxi 7 xKi 7 1Ho 0#ile i Y7 Nxim1 7 6un.E1al1(xi) ;ormula actual es g& esta es la $ue esta e1aluandoerrorEst 7 A+s(xim1 * xi)/ells(L 9 i& =) 7 xim1/ells(L 9 i& J) 7 errorEstI errorEst Y tol ,#en/ells(L 9 i 9 1& =) 7 Z2PZExit 4u+End Ii 7 i 9 1xi 7 xim1)oop/ells(L& L) 7 Z No se tu1o exitoZ ;si se termino el Ho sin exito;***************************************************************I Err ,#en Ro,o Error`.andlerVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. JLError`.andler> /ells(1&1)76un.ErrorHescription;***************************************************************End 4u+5.5 Integracion5.5.1 Metodo de Fom+erg para integracionEn el metodo de integracion de Fom+erg se usa la regla compuesta del trapecio para o+tener aproximacionespreliminares y luego el proceso de extrapolacion de Fic#ardson para me"orar las aproximaciones.Para aproximar la integralf baf(x) &x se calcula un arregloO11O51 O55O81 O85 O88...O1 O5 : : : Oyf baf(x) &x D O . El criterio de parada es 7O O1 17 ; 9ol (a 1eces tam+ien se usa ladesigualdadanterior y la desigualdad 7O1 1 O5 57 ; 9ol para e1itar algunos casos no desea+les).4i *% 7 b a5%1a.) O121 7 *15[f(a) 9 f(b)\+.) O%21 7 155=O%121 9 *%15%5 Bi71f( a 9 *%(5i 1) )8J2 % 7 52 82 :::2 c.) O%27 7 O%271 9 O%271 O71271=71 1 2 % 7 52 82 :::2 < 7 7 52 82 :::%Este algoritmo es muy e(ciente para unciones su(cientemente sua1es y sin singularidades en [a2 b\ . En general&para integrales impropias se usan otros algoritmos. Por e"emplo& Fom+erg no es adecuado para calcular laintegral g(!) 7F.K t!1et&tEn 1e' de implementar el metodo de Fom+erg de manera directa& 1amos a implementar el siguiente algoritmo1. * 7 b a5. O121 7 *15[f(a) 9 f(b)\VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. JM8. para i 7 12 52 :::2#acer(a) O521 7 155=O121 9 *5i1 Bi71f( a 9 *(% K:J) )8J(+) para 7 7 52 :::2 iO527 7 O5271 9 O5271 O1271=71 1(c) 4alida> O527 2 7 7 12 52 :::2 i(d) * 7 *45(e) para 7 7 12 52 :::2 i tome O127 7 O527 .=. PararEn el codigo de un +oton& de(nimos una matri' F(n&n) con la cual 1amos a implementar el algoritmo.6igure 5.5> Integracion Fom+erg.Pri1ate 4u+ /ommandButton1`/licP()Him F() As Hou+leHim a& +& #& suma As Hou+leHim n As IntegerHim ormula As 4tringHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%ormula 7 /ells(1& 5)a 7 /ells(5& 8)+ 7 /ells(5& =)n 7 /ells(5& J)FeHim F(n& n)# 7 + * a2O 7 6un.4toreExpression(ormula) ;ormula actual es ;ormula;I Not 2O ,#en Ro,o Error`.andler;*******************************************************************6or i 7 1 ,o 5K ;limpiar6or " 7 1 ,o 5KVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. JQ/ells(5 9 i& ") 7 NullNext "Next i;*******************************************************************F(1& 1) 7 # A 5 ? (6un.E1al1(a) 9 6un.E1al1(+));paso8 de algoritmo de Fom+erg6or i 7 1 ,o n;paso =suma 7 K6or P 7 1 ,o 5 @ (i * 1)suma 7 suma 9 6un.E1al1(a 9 # ? (P * K.J)) ;e1alua en la ormula actualNext PF(5& 1) 7 K.J ? (F(1& 1) 9 # ? suma);pasoJ6or " 7 5 ,o iF(5& ") 7 F(5& " * 1) 9 (F(5& " * 1) * F(1& " * 1)) A (= @ (" * 1) * 1)Next ";paso L salida F(5&")6or " 7 1 ,o i/ells(8 9 i * 1& ") 7 F(5& ") ;columnas 5&8&...nNext ";paso M# 7 # A 5;paso Q6or " 7 1 ,o iF(1& ") 7 F(5& ")Next "Next i;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1&1)76un.ErrorHescription;***************************************************************End 4u+Nota> 2+ser1e la uncion $ue se integra en la (gura anterior. Fecordemos $ue en este e1aluador& *x@5 7 (*x)@5.Entonces& para aproximarf baex5&x de+emos introducir la uncion como 1AeD@(x@5) o eD@(*1?x@5).5.5.5 )a uncion Ramma)a uncion Ramma se de(ne por>g(!) 7f .Kt!1et&t/uando el argumento ! es entero la uncion Ramma se reduce al actorial (! 1)I . No o+stante cuando ! noes entero la integral impropia $ue se genera de+e ser calculada en orma numerica.Para este calculo #emos recurrido a la aproximacion siguiente [1K\.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. JNPara ciertos 1alores enteros 6 y & y para ciertos coe(cientes c1 2 c5 2 : : : 2 c6 la uncion Ramma esta dada porg(! 9 1) 7T! 9 915!9K:J e(!9915)=p5DhcK 9 c1! 9 19 c5! 9 59 : : : 9 c6! 9 69 1iPara implementar el programa se toman los 1alores de 6 7 L y 7 J y en ese caso el error en la aproximaciones menor $ue 5 = 1K1K en el semiplano Oe ! < K)os 1alores de los primeros L ci ;s soncK 7 1c1 7 8L.1Q1KN188c5 7 *QL.JKJ85K88c8 7 5=.J1=KNQ55c= 7*1.5N1M8NJ1LcJ 7 K.15KQJQKK8cL 7 *K.J8NKQ5As%f .Kt!et&t D ('9J.J)@('9 K.J?eD@(*1?('9J.J)))?s$r(5?piD)?(cK9c1A('91)9...9cLA('9L))con error menor o igual a 5 = 1K1K en el semiplano Oe ! < KEste es un algoritmo muy e(ciente& de #ec#o re$uiere muy pocos calculos y tiene una alta precision.5.5.8 /uadratura gaussiana e integral do+le gaussiana./uadratura gaussiana.)a cuadratura gaussiana selecciona x12 x52 :::2 x en [a2 b\ y unos coe(cientes c12 c52 :::2 c de tal manera $ue seredu'ca Ven lo posi+leZ el error esperado en la aproximacionf baf(x)&x DBi71ci f(xi) (P))a reduccion Ven lo posi+leZ del error esperado en la aproximacion se entiende enel sentido de $ue& por lomenos&f 11#(x) &x 7Bi71ci #(xi)2 con #(x) un polinomios de grado ; 5 . En este caso& los 1alores ade*cuados para x12 :::2 x son las ra%ces del polinomio de )egendre de gradoy los numeros ci estan de(nidos porf 11a7717B7ix x7xi x7&xVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. LK)os polinomios de )egendre se de(nen de manera recursi1a#K(x) 7 1#1(x) 7 x#5(x) 7 15 (8x5 1)#8(x) 7 15 (Jx8 8x)......#91(x) 75 9 1 9 1 x #(x)

9 1 #1(x)2 para7 52 82 : : :Estos 1alores xi y ci reducen Ven lo posi+leZ& del error esperado en la aproximacionf 11f(x) &x DBi71ci f(xi)A#ora en 1e' de xi y ci ponemos xi y ci para indicar $ue son los 1alores $ue corresponden al polinomiode )egendre de grado.Para aproximarf baf(x) &x se re$uiere de un cam+io de 1aria+le x 7 15 [ (b a)t 9 a 9 b \ con el cualf baf(x) &x 7f 11fT15(b a)t 9 a 9 bb a5 &tA#ora si ((t) 7 ba5 fg 15 (b a)t 9 a 9 bjentoncesf 11((t) &t DBi71ci ((xi)As%& para aproximarf 1Kex5&x de+emos aplicar la ormula de aproximacion af 11K:J eK:5J (1 9 t)5&t6igure 5.8> /uadratura gausssina.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. L1)as ra%ces xi de los polinomios de )egrende de grado menor o igual a7 J y los ci se pueden 1er en la ta+la$ue sigueRrado de #(x) ci xi5 c51 7 1 x51 7 K:JMM8JK5LN5c55 7 1 x55 7 K:JMM8JK5LN58 c81 7 K:JJJJJJJJJL x81 7 K:MM=JNLLLN5c85 7 K:QQQQQQQQQN x85 7 K:KKKKKKKKKKc88 7 K:JJJJJJJJJL x88 7 K:MM=JNLLLN5= c=1 7 K:8=MQJ=Q=J1 x=1 7 K:QL118L811Lc=5 7 K:LJ51=J1J=N x=5 7 K:88NNQ1K=8Lc=8 7 K:LJ51=J1J=N x=8 7 K:88NNQ1K=8Lc== 7 K:8=MQJ=Q=J1 x== 7 K:QL118L811LJ cJ1 7 K:58LN5LQQJK xJ1 7 K:NKL1MNQ=JNcJ5 7 K:=MQL5QLMKJ xJ5 7 K:J8Q=LN81K1cJ8 7 K:JLQQQQQQQN xJ8 7 K:KKKKKKKKKKcJ= 7 K:=MQL5QLMKJ xJ= 7 K:J8Q=LN81K1cJJ 7 K:58LN5LQQJK xJJ 7 K:NKL1MNQ=JNPara #acer la implementacion de(nimos dos unciones xi(i&") y ci(i&") donde i es el grado del polinomio de)egendre y " es el 1alor 7 .6unction xi(i& ")Him xis(J& J) As Hou+lexis(5& 1) 7 K.JMM8JK5LN5xis(5& 5) 7 *K.JMM8JK5LN5xis(8& 1) 7 K.MM=JNLLLN5xis(8& 5) 7 Kxis(8& 8) 7 *K.MM=JNLLLN5xis(=& 1) 7 K.QL118L811Lxis(=& 5) 7 K.88NNQ1K=8Lxis(=& 8) 7 *K.88NNQ1K=8Lxis(=& =) 7 *K.QL118L811Lxis(J& 1) 7 K.NKL1MNQ=JNxis(J& 5) 7 K.J8Q=LN81K1xis(J& 8) 7 Kxis(J& =) 7 *K.J8Q=LN81K1xis(J& J) 7 *K.NKL1MNQ=JNxi 7 xis(i& ")End 6unction6unction ci(i& ")Him cis(J& J) As Hou+lecis(5& 1) 7 1cis(5& 1) 7 1cis(8& 1) 7 K.JJJJJJJJJLcis(8& 5) 7 K.QQQQQQQQQNVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. L5cis(8& 8) 7 K.JJJJJJJJJLcis(=& 1) 7 K.8=MQJ=Q=J1cis(=& 5) 7 K.LJ51=J1J=Ncis(=& 8) 7 K.LJ51=J1J=Ncis(=& =) 7 K.8=MQJ=Q=J1cis(J& 1) 7 K.58LN5LQQJcis(J& 5) 7 K.=MQL5QLMKJcis(J& 8) 7 K.JLQQQQQQQNcis(J& =) 7 K.=MQL5QLMKJcis(J& J) 7 K.58LN5LQQJci 7 cis(i& ")End 6unctionAdemas de+emos incluir un mensa"e en el caso de $ue se seleccione un grado menor $ue 5 mayor $ue J.El codigo del +oton esPri1ate 4u+ /ommandButton1`/licP()Him suma As Hou+leHim n As IntegerHim g As 4tringHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%g 7 /ells(5& 5)n 7 /ells(8& J)/ells(J& L) 7 ZZ ;limpiar calculos anterioresI n Y 5 2r n ] J ,#enMsgBox (Z4olo tenemos datos para n entre 5 y JZ)Exit 4u+End I2O 7 6un.4toreExpression(g) ;ormula actual es ;ormula;I Not 2O ,#en Ro,o Error`.andlersuma 7 K6or i 7 1 ,o nsuma 7 suma 9 ci(n& i) ? 6un.E1al1(xi(n& i))Next i/ells(J& L) 7 suma;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1&1)76un.ErrorHescription ;Mensa"e de error;***************************************************************End 4u+VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. L8Integral do+le gaussiana.6igure 5.=> Integral do+le gaussiana.4i $ueremos aplicar la cuadratura gaussiana af baf &(x)c(x)f(x2 >) &> &x se de+e #acer& primero $ue todo& un cam*+io de 1aria+le para cam+iar [c(x)2 &(x)\ a [12 1\ . Esto se #ace de manera parecida al procedimiento numerico.f baf &(x)c(x)f(x2 >) &> &x Df baK:J(&(x) c(x))B771c7f [x2 K:J ? (&(x) c(x) x7 9 &(x) 9 c(x)) &x\y luego de+emos 1ol1er #acer esto para [a2 b\ ./ada Integral puede ser aproximada usando las ra%ces de un polinomio de )egendre de grado distinto.El algoritmo es el siguiente1. Entrada> a2 b y los enteros "2correspondientes al grado del polinomio de )egendre $ue se usa en cadaintegral. He+en ser enteros adecuados de acuerdo a los 1alores ci7 2 xi7 disponi+les.5. ,ome*1 7 (b a)45 7 %1x7 9 %5Q 7 f(x2 >)JN 7 JN 9 c7Q(c) ,ome J 7 J 9 c"i%1JNJ. ,ome J 7 *1JL. 4alida> la aproximacion de la integral es JEn la implementacion de+emos e1aluar unciones de una 1aria+le& c(x) y &(x) &y una uncion de dos 1aria+les&Q 7 f(x2 >) . Para #acer esto& almacenamos la expresion actual y procedemos a e1aluar ya sea con E1al1() paraunciones de una 1aria+le o E1al() para 1arias 1aria+les. En el codigo aparecen las siguientes l%neas para este (n2O 7 6un.4toreExpression(dx) ;ormula actual es ;d(x);d1 7 6un.E1al1(xa) ;d(xa)...2O 7 6un.4toreExpression(cx) ;ormula actual es ;c(x);c1 7 6un.E1al1(xa) ;c(xa)...2O 7 6un.4toreExpression(xy) ;ormula actual es ;(x&y);6un.Varia+le(ZxZ) 7 xa6un.Varia+le(ZyZ) 7 ya_ 7 6un.E1al() ;retorna (xa&ya)...El codigo completo del +oton es (altan las unciones xi() y yi()Pri1ate 4u+ /ommandButton1`/licP()Him a& +& #1& #5& Wt& WB& xa& d1& c1& P1& P5& ya& _ As Hou+leHim n& m As IntegerHim xy& cx& dx As 4tring ;uncionesHim 2O As BooleanHim 6un As Ne! clsMat#Parser ; as% se llama el modulo de clase a$u%xy 7 /ells(5& 5)cx 7 /ells(8& J)dx 7 /ells(8& L)a 7 /ells(8& 8)+ 7 /ells(8& =)n 7 /ells(8& M)m 7 /ells(8& Q)/ells(M& N) 7 ZZ ;limpiar calculos anterioresI n Y 5 2r n ] J 2r m Y 5 2r m ] J ,#enMsgBox (Z4olo tenemos datos para n y m entre 5 y JZ)Exit 4u+End I;paso 1#1 7 (+ * a) A 5VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. LJ#5 7 (+ 9 a) A 5Wt 7 K;paso56or i 7 1 ,o m;paso 8WB 7 Kxa 7 #1 ? xi(m& i) 9 #52O 7 6un.4toreExpression(dx) ;ormula actual es ;d(x);I Not 2O ,#en Ro,o Error`.andlerd1 7 6un.E1al1(xa) ;d(xa)2O 7 6un.4toreExpression(cx) ;ormula actual es ;c(x);I Not 2O ,#en Ro,o Error`.andlerc1 7 6un.E1al1(xa) ;c(xa)P1 7 (d1 * c1) A 5P5 7 (d1 9 c1) A 56or W 7 1 ,o nya 7 P1 ? xi(n& W) 9 P52O 7 6un.4toreExpression(xy) ;ormula actual es ;(x&y);I Not 2O ,#en Ro,o Error`.andler6un.Varia+le(ZxZ) 7 xa6un.Varia+le(ZyZ) 7 ya_ 7 6un.E1al() ;retorna (xa&ya)WB 7 WB 9 ci(n& W) ? _Next WWt 7 Wt 9 ci(m& i) ? P1 ? WBNext iWt 7 #1 ? Wt/ells(M& N) 7 Wt ; aproxx de la integral;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> He+ug.Print 6un.ErrorHescription;***************************************************************End 4u+Nota> 2+ser1e $uef baf 1K5 > f(x) &> &x 7f baf(x) &x2 entonces esta implementacion se podr%a usar para lacuadratura gaussiana en una 1aria+le.Nota> 4e puede aplicar la misma idea y aproximar una integral do+le usando 4impson.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. LL5.8 Pro+lemas de 1alor inicial para ecuaciones dierenciales ordinar*ias5.8.1 Existencia y unicidad/onsideremos el pro+lema de 1alor inicial&>&x7 f(t2 >)2 a 8 t 8 b2 >(a) 7 >K (P)Cna solucion de este pro+lema de 1alor inicial es una uncion deri1a+le >(t) $ue cumple las condiciones de (P):He(nicion 1/onsideremos un con"unto R J F y una uncion f(t2 >) de(nida en R. 4i existe una constante L < K tal $ue7f(t2 >1) f(t2 >5)7 8 L7>1 >572 S (t2 >1)2 (t2 >5) / Rse dice $ue f(t2 >) cumple una condicion de )ipsc#it' en la 1aria+le > en R. A L se le llama constante de)ipsc#it' para f .Nota> Cna condicion su5ciete para $ue f(t2 >) cumpla una condicion de )ipsc#it' en R es $ue exista L < Ktal $ue((((TfT>(t2 >)((((8 L2 S (t2 >) / RHe(nicion 5Cn con"unto R J F se dice con1exo si S (t12 >1)2 (t52 >5) / R2 el segmento f (1 C)(t12 >1) 9 C(t52 >5)2 C /[K2 1\( esta contenido en R.Kt.,>.LKt/,>/L Kt.,>.LKt/,>/LUo+exo6o co+exo6igure 5.J> /on1exidadNota> 2+ser1e $ue& cuando C 7 K estamos en el punto inicial (t12 >1) y cuando C 7 1 estamos en el punto(nal (t52 >5) . C 7 145 corresponde al punto medio del segmento.VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. LM,eorema 14i R 7 f(t2 >) > a 8 t 8 b2. 8 > 8 .( y si f(t2 >) es continua en R y satisace una condicion de )ipsc#it'respecto a > en R& entonces el pro+lema (P) tiene una solucion unica >(t) para a 8 t 8 b:Nota> Cn pro+lema de 1alor inicial esta bie platea&o si pe$ue-nos cam+ios o pertur+aciones en el planteodel pro+lema (de+ido a errores de redondeo en el pro+lema inicial& por e"emplo)& ocasiona cam+ios pe$ue-nos enla solucion del pro+lema. 4i un pro+lema cumple las #ipotesis del teorema anterior& entonces esta +ien planteado.E"emplo 18/onsideremos el pro+lema de 1alor inicial >E 7 > t5 9 12 t / [K2 =\2 >(K) 7 K:J . A$u% f(t2 >) 7 > t5 9 1 . 4iR 7 f(t2 >) > K 8 t 8 =2. 8 > 8 .(& entonces como((((TfT>(t2 >)((((7 717 S (t2 >) / Rf cumple una condicion de )ipsc#it' en > (en este caso podemos tomar L 7 1 ). Ademas& como f(t2 >)es continua en R& el pro+lema de 1alor inicial tiene una solucion unica. He #ec#o la unica solucion es>(t) 7 (t 9 1)5 K:Jet5.8.5 Metodo de Euler4upongamos $ue tenemos un pro+lema& +ien planteado& de 1alor inicial&>&x7 f(t2 >)2 a 8 t 8 b2 >(a) 7 >K (P)4i #acemos una particion del inter1alo [a2 b\ ensu+inter1alos [tK2 t1\2 [t12 t5\2 :::[t12 t\ cada uno de longitud* 7 (b a)4 & es decir ti91 7 a 9 *ti2 entonces usando un polinomio de ,aylor alrededor de tK 7 a & pode*mos calcularaproximaciones Vi D >(ti) . Este procedimiento& conocido como metodo de Euler& es como sigueFecordemos $ue& usando un el polinomio de ,aylor de grado 1& podemos encontrar una aproximacion (lineal)de la uncion f en los alrededores de a . El teorema de ,aylor& ormulado de maneracon1eniente& es,eorema 54ea * < K y f una uncion tal $ue f y sus primeras % deri1adas son continuas en el inter1alo [a2 a 9 *\ y laderi1ada f%91 existe en \a2 a 9 *[ & entonces existe un numero W (:xi;)& en el inter1alo \a2 a 9 *[ tal $uef(a 9 *) 7 f(a) 9 fE(a)1I * 9 fEE(a)5I *5 9 ? ? ? 9 f(%)(a)%I *% 9 f(%91)(W)(% 9 1)I *%91VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. LQA#ora& si >(t) es la solucion de la ecuacion (P) y es dos 1eces deri1a+le en [a2 b\ entonces>(ti91) 7 >(ti 9 *) 7 >(ti) 9 * >E(ti) 9 >EE(Wi)5I *5con W en \ti2 ti91[Hespreciando el termino de error >EE(Wi)5I *5 y usando (P) o+tenemos>(ti91) 7 >(ti 9 *) D >(ti) 9 * >E(ti) 7 >(ti) 9 * f (ti2 >(ti))4i Vi es la aproximacion de >(ti) & es decir Vi 7 >(ti1) 9 * f (ti12 >(ti1)) 2 entonces la ecuacionQY>VK 7 >KVi91 7 Vi 9 * f(ti2Vi)2 i 7 K2 12 :::2 1se llama ecuacion de dierencia asociada al metodo de Euler.Estimacion del error,eorema 84i R 7 f(t2 >) > a 8 t 8 b2. 8 > 8 .( y si f(t2 >) es continua en R y satisace una condicion de )ipsc#it'respecto a > en R con constante L entonces si existe una constante M tal $ue7>EE(t)7 8 M2 S t / [a2 b\entonces para cada i 7 K2 12 52 :::2 27>(ti) Vi7 8*M5L%eL(tia) 1kNota> para calcular 7>EE(t)7 usamos regla de la cadena> >EE(t) 7 TfTt(t2 >) 9 TfT>(t2 >) ? >E(t) . Posi+lemente seadi%cil o+tener M dado $ue puede ser necesaria inormacion acerca de >(t) .E"emplo 1=/onsideremos el pro+lema de 1alor inicial >E 7 > t5 9 12 t / [K2 =\2 >(K) 7 K:J .4i a 7 K2 b 7 =27 1K entonces * 7 K:= y ti 7 a 9 * i 7 K:= iVBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. LNQY>VK 7 K:JVi91 7 Vi 9 * (Vi t5i9 1) 7 Vi 9 K:=gVi (K:= i)5 9 1j2 i 7 K2 12 :::2 1Nota> o+ser1e $ue& usando regla de la cadena& >EE(t) 7 TfTt9 TfT>? >E(t) 7 5t 9 >(t) t5 9 1 . As% $ue nopodemos usar el teorema anterior para estimar el error dado $ue no conocemos& enprincipio& >(t) .En la siguiente (gura se pueden apreciar las aproximaciones Vi para distintos 1alores de 4.E 4/E4.EE>KtL >KtL >KtL1 5 8 =*55=L1 5 8 =*55=L1 5 8 =*55=L6igure 5.L> Aproximacion con el metodo de EulerImplementacion con VBA/omo antes& usamos clsMat#Parser para leer f(t2 >) . )a implementacion para e"ecutar desde un +oton esy06igure 5.M> .o"a de ExcelPri1ate 4u+ /ommandButton1`/licP()Him a& +& yK& yi& ti& ti!i As Hou+leHim ty As 4tring ;(t&y)Him oP As BooleanHim 6un As Ne! clsMat#Parsera 7 /ells(=& 1)+ 7 /ells(=& 5)VBA para Excel M.Sc. Walter Mora F., M.Sc. Jose Luis Espio!a B. MKn 7 /ells(=& 8)yK 7 /ells(=& =) ;condicion inicialty 7 /ells(5& 5)oP 7 6un.4toreExpression(ty) ;ormula actual es ;(t&y);I Not oP ,#en Ro,o Error`.andler# 7 (+ * a) A nyi 7 yKti 7 K6or i 7 K ,o n6un.Varia+le(ZyZ) 7 yi6un.Varia+le(ZtZ) 7 titi!i 7 6un.E1al()/ells(= 9 i& L) 7 yiyi 7 yi 9 ti!i ? #/ells(= 9 i& J) 7 titi 7 a 9 (i 9 1) ? #Next i;***************************************************************I Err ,#en Ro,o Error`.andlerError`.andler> /ells(1& 1) 7 6un.ErrorHescription;***************************************************************End 4u+Implementacion con Mat*e"aticaCsamos un Array para de(nir la lista f![1\&![5\&...&![n\( de aproximacionesn 7 1K


Recommended