Transfiriendo Rangos desde Hoja en Excel a Arreglos en VBA

Un rango en Excel puede ser transformado en un arreglo (Array) y utilizar las ventajas que proporcionan este tipo de variables. Leer más “Transfiriendo Rangos desde Hoja en Excel a Arreglos en VBA”

Anuncios

Aplicación de seudo código de Lagrange

 

En el artículo anterior habíamos revisado el método Lagrange para interpolación. En este artículo presentaremos un procedimiento para realizar un programa para obtener el valor de f(x), correspondiente a un valor x, dado dos vectores de datos x y y=f(x). Leer más “Aplicación de seudo código de Lagrange”

Método de Lagrange para Interpolación

Procedimiento para Interpolación Utilizando Método de Lagrange

Este método está diseñado para realizar interpolación para intervalos desiguales entre puntos. Su formulación es como sigue.

clip_image002

x y=f(x)
x0 y0
x1 y1
x2 y2
x3 y3
….. ….
xn-1 yn-1
xn yn

Esto puede ser expresado como

clip_image003

Por ejemplo, para el índice 0

clip_image004

Para ver como se aplica el método de Lagrange utilizaremos un set de puntos con coordenadas (x, y) para realizar interpolaciones.

x y=f(x)
5 150
7 392
11 1452
13 2366
17 5202

Aproximación lineal, n=1

Ahora supongamos que deseamos utilizar una aproximación lineal n=1

clip_image006

Ahora queremos utilizar esta fórmula para encontrar el valor para x=9

El valor de 9 está entre los valores de x=7 y x=11. Entonces seleccionamos estos dos valores como x0 y x1 respectivamente así que.

x y=f(x)
xo= 7 yo=392
x1= 11 y1=1452

clip_image007

Aproximación Cuadrática, n=2

Ahora utilicemos tres puntos en lugar de 2 y hagamos una interpolación cuadrática.

clip_image009

Como 9 está entre 7 y 11, utilizaremos los puntos (7, 392), (11, 1452) y (13, 2366) como los puntos de interpolación.

Puntos x0=11, y0=392; x1=11, y1=1452 y x2=13, y2=2366 y aplicamos la fórmula para f2(x)

clip_image011

Se ha obtenido el valor para una aproximación cuartica f4(9)=810, la cual está más cerca de la aproximación cuadrática, n=2, que de la aproximación lineal, n=1.

Se observa que los estimados de la interpolación cuadrática y cuartica son menores que la interpolación lineal, lo cual puede observarse en la gráfica. Por lo general las interpolaciones de mayor grado proporcionan un mejor valor de interpolación.

clip_image012

El punto anaranjado representa el valor de la interpolación lineal, el punto gris muestra sobrepuestos la aproximación cuadrática y cuartica.

En un artículo próximo mostraremos un seudocódigo para efectuar interpolación utilizando el método de Lagrange.

Referencias Bibliográficas

Grewal, B. (1998). Higher Engineering Mathematics. Delhi: Khana Publishers.

Kaw, A., & Keteltas, M. (2003). Lagrangian Method, Text Book Notes.

Estructuras Cíclicas, Repetitivas, Parte V

Estructura While – Wend

Esta es una estructura cíclica, que repite las declaraciones contenidas entre los comandos While y Wend. Es una estructura que funcionalmente es parecida a la estructura Do while – Loop.

la sintaxis de esta estructura es

While Condición

Bloque de Declaraciones

Wend

En la siguiente figura se muestra una comparación de las estructuras Do condición – Loop y While condición – Wend. Leer más “Estructuras Cíclicas, Repetitivas, Parte V”

Estructuras Cíclicas, Repetitivas, Parte IV

For Each – Next

Cuando se desea repetir una acción en cada uno de los elementos de una colección de objetos, o en cada uno de los elementos de un array, VBA tiene una estructura especifica para este fin, For Each – Next.

La sintaxis de esta estructura es:

For Each variable In Colección

Bloque de Declaraciones

Next [variable] Leer más “Estructuras Cíclicas, Repetitivas, Parte IV”

Estructuras Cíclicas, Repetitivas, Parte III

Ciclos Do

Otra forma de ejecutar acciones repetitivas es utilizar un ciclo Do. Los ciclos Do en lugar de repetir acciones entre dos valores dados, hace repeticiones en base a la evaluación de una condición.

Existen dos tipos de Estructuras Do: Leer más “Estructuras Cíclicas, Repetitivas, Parte III”

Estructuras Cíclicas, Repetitivas, Parte II

Tipos de Estructuras Cíclicas en VBA

En VBA existen dos tipos de estructuras cíclicas que permiten repetir un bloque de instrucciones contenido dentro de ellas.

  1. Cuando se conoce el numero de repeticiones a realizar se utiliza una estructura For –Next.
  2. Cuando el bloque a repetir se ejecuta hasta que una condición se cumple. En este caso se utilizan ciclos Do.

Existe una estructura cíclica que se aplica para los integrantes de una colección o para arreglos (Arrays). Esta estructura es For Each – Next, la cual trataremos en un próximo articulo.

 

For –Next

En la parte I de esta serie ya habíamos introducido esta estructura cíclica, sin embargo vamos a revisitar esta estructura para repasar y ampliar su uso.

La sintaxis de esta estructura es:

For Variable=valor inicial To valor final [step valor incremental]

Bloque de Declaraciones a repetir

Next [Variable]

Lo que se muestra en corchetes es opcional, el valor del step es por defecto 1, así que si se omite, el valor incremental en cada ciclo será 1. El nombre de la variable luego del comando Next puede omitirse, sin embargo por claridad se recomienda colocarlo.

Ejemplo

Esta simple secuencia de instrucciones efectúa la suma de los primeros n números naturales.

Public Sub sumafor()

Sum = 0
n = InputBox(“numero a sumar”, “ingresar n”, 100)

’ Inicio del ciclo For – Next

For i = 1 To n
Sum = Sum + i
Next i

’ Fin del ciclo For -Next

MsgBox “la suma es ” & Sum

End Sub

También podemos utilizar ciclos For-Next para escribir datos en una fila o columna de una hoja.

ciclico-5

En el procedimiento mostrado, seleccionamos la celda A3 como punto de inicio y utilizamos la propiedad Offset para mover en cada ciclo una celda adicional hacia abajo en la misma columna. Esto escribe el texto “Hola” en la columna A, desde la fila 4 hasta la 13.

ciclico-6

 

Así como la utilizamos para escribir, también podemos utilizarla para recorrer una fila o columna y leer datos.

ciclico-7

En el procedimiento LeerListas() vamos a leer los datos de la columna A y B y escribir en la columna C el resultado de A x B. primero seleccionamos la celda A5 como punto inicial y a partir de allí vamos a ir recorriendo fila por fila, mediante la propiedad Offset (row, column) y en cada fila asignar el valor de la celda en la columna A a la variable A y el valor de la celda en la columna B a la variable B. Calculamos la variable C = A * B y la escribimos en la celda que esta en la columna C.

ciclico-8

 

También se pueden leer o escribir matrices de datos utilizando ciclos For – Next anidados.

En el siguiente ejemplo se crea un procedimiento para crear una matriz de 6 filas y 6 columnas y colocar el valor 500 en cada celda.

ciclico-9

En el procedimiento la variable i se utiliza para moverse fila por fila y la variable j para moverse columna por columna. Así el primer ciclo For – Next cambiaria la variable i, y en el primer paso nos ubicaría en la fila 1 de la matriz, (1, j), luego el segundo ciclo For – Next se  movería a lo largo de la primera fila columna por columna hasta alcanzar la columna 6, al salir del ciclo For – Next interno (variable j), entonces el comando Next i movería a la segunda fila y continuaría el ciclo.

ciclico-10

Otro uso que le podemos dar a un ciclo For – Next es el de poblar un arreglo (Array).

Para poblar un arreglo unidimensional (fila o columna de datos), se utiliza un ciclo For – Next en conjunción con una declaración de asignación donde el índice del arreglo es igual a la variable definida en el For – Next.

ciclico-11

creamos un arreglo llamado Cinco(), y la variable i que toma valores de 0 a 4, crea cada elemento del arreglo y le asigna el valor de la variable i, asi que cuando i=0, el elemento del arreglo Cinco(0) es igual a 0. Luego escribimos en la celda (5+i,1), que corresponde a la celda A5, el valor del elemento Cinco(0). Este ciclo se repite para i=1, i=2, i=3 e i=4.

ciclico-12

Igualmente podemos poblar un arreglo bidimensional (matriz) utilizando un ciclo For – Next anidado.

ciclico-13

El ciclo For – Next externo con la variable i avanza fila a fila y el ciclo For – Next interno con la variable j avanza columna a columna.

ciclico-14

 

En el próximo articulo continuaremos con las estructuras cíclicas construidas con Do.