Interpolacion Polinomial

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 26

REPÚBLICA DE PANAMÁ

UNIVERSIDAD TECNOLÓGICA DE PANAMÁ

SEDE AZUERO

INGENIERÍA CÍVIL
INGENIERÍA MARÍTIMA PORTUARIA

SOLUCIONES NUMÉRICAS PARA INGENIEROS

Tema: Interpolación Polinomial


Segunda ronda

INTEGRANTES

 Lineth Canto 6-726-967


 José Frías 6-725-2303
 Yaribeth Quiroz 6-726-1098
 Oliver Samaniego 6-725-676
 Ritza Díaz 8-975-935

Facilitadora:
Mariluz Centella

Grupo:
71C121
INTRODUCCIÓN

Dentro de este informe presentaremos la interpolación polinómica que no es más que la técnica
utilizada en matemáticas y análisis numérico para aproximar una función desconocida a partir de un
conjunto de puntos conocidos. Básicamente, lo que hacemos es encontrar un polinomio que pase
exactamente por todos los puntos dados. Esto nos permite estimar valores desconocidos entre los
puntos conocidos de manera precisa.

El método más comúnmente utilizado para la interpolación polinómica es el polinomio de


Lagrange. Este método utiliza una fórmula que se basa en los valores de los puntos conocidos y sus
respectivas coordenadas. A partir de estos datos, se construye un polinomio que se ajusta
perfectamente a los puntos dados.

La interpolación polinómica tiene muchas aplicaciones prácticas, como la estimación de datos


faltantes en conjuntos de datos, la aproximación de funciones complicadas y la creación de curvas
suaves a partir de puntos discretos. Es una herramienta poderosa y versátil en el campo del análisis
numérico.
CONTENIDO

 Definición del método


La interpolación polinómica es una técnica de interpolación de un conjunto de datos o de
una función por un polinomio. Dado un número de puntos obtenidos por muestreo o a partir
de un experimento, se pretende encontrar un polinomio que pase por todos los puntos. Las
fórmulas para utilizar en este método son las fórmulas del método de Lagrange y el método
de newton por diferencias divididas.

 Método de Lagrange
El método de Lagrange es otro método comúnmente utilizado en la interpolación
polinómica. Este método se basa en la idea de utilizar polinomios de grado bajo para
aproximar una función.
En el método de Lagrange, se construyen polinomios de grado 1 para cada punto conocido
y luego se combinan mediante una suma ponderada. Estos polinomios se llaman polinomios
base de Lagrange y se utilizan para estimar valores desconocidos entre los puntos
conocidos.
El método de Lagrange es bastante sencillo de implementar y entender, pero puede volverse
computacionalmente costoso cuando se trabaja con muchos puntos conocidos.

la fórmula para aproximar una función f(x) utilizando polinomios base de Lagrange es:

Sea f la función a interpolar, sean x 0 , x 1 , … , x m las abscisas conocidas de f y sean


f 0 , f 1 ,… , f m los valores que toma la función en esas abscisas, el polinomio interpolador de
grado de Lagrange es un polinomio de la forma

donde l❑❑ l j ( x) son los llamados polinomios de Lagrange, que se calculan de este modo:

Nótese que, en estas condiciones, los coeficientes l j (x ) están bien definidos y son siempre
distintos de cero.

 Método de newton
El método de Newton es otro método popular utilizado en la interpolación polinómica. Este
método se basa en la idea de usar polinomios de grado creciente para aproximar una
función.

En el método de Newton, se utiliza una fórmula llamada diferencias divididas para construir
un polinomio que se ajuste a los puntos dados. Estas diferencias divididas se calculan
utilizando las diferencias entre los valores de la función en los puntos conocidos.
Una vez que se han calculado las diferencias divididas, se puede construir el polinomio de
Newton utilizando una serie de sumas y multiplicaciones. Este polinomio se utiliza para
estimar valores desconocidos entre los puntos conocidos.

El método de Newton es especialmente útil cuando se agregan nuevos puntos a la


interpolación, ya que se puede actualizar fácilmente el polinomio sin tener que recalcular
todo desde cero.
Forma general de los polinomios de interpolación de newton:

f n ( x )=b0 +b 1 ( x−x 0 ) +…+ bn ( x−x 0 ) ( x−x 1 ) … ( x−x n−1)

Los puntos asociados con datos se utilizan para evaluar los coeficientes b0, b1, ..., bn. Para
un polinomio de n-ésimo grado se requieren n + 1 puntos asociados con datos: [x0, f(x0)],
[x1, f(x1)], ..., [xn, f(xn)]. Usamos estos puntos asociados con datos y las siguientes
ecuaciones para evaluar los coeficientes:
b 0=f (x 0)
b 1=f [x 1 , x 0 ]
b 2=f [x 2 , x 1 , x 0 ]

b n=f [x n , x n−1 , … , x1 , x 0]
donde las evaluaciones de la función colocadas entre paréntesis son diferencias divididas
finitas. Por ejemplo, la primera diferencia dividida finita en forma general se representa
como:
f ( x1 ) −f ( x 0 )
f [ x 1 , x 0 ]=
x 1−x 0

La segunda diferencia dividida finita, que representa la diferencia de las dos


primeras diferencias divididas, se expresa en forma general como:

f [ x2 , x 1]−f [x 1 , x 0 ]
f [ x 2 , x 1 , x 0 ]=
x 1−x 0

En forma similar, la n-ésima diferencia dividida finita es:

f [ x n , x n−1 , … , x 1 ]−f [ x n−1 , x n−2 , … , x 0 ]


f [ x n , xn −1 , … , x1 , x0 ] =
xn −x 0

Estas diferencias sirven para evaluar los coeficientes en las ecuaciones antes
mencionadas, los cuales se sustituirán en la ecuación general para obtener el
polinomio de interpolación que se conoce como polinomio de interpolación de
Newton en diferencias divididas.
Con las ecuaciones mostradas anteriormente podemos notar que las diferencias de
grado superior se calculan tomando diferencias de grado inferior. Esto lo veremos
mejor mediante la siguiente ilustración:

 Problema para desarrollar como ejemplo para el método

Se tienen datos de elevación para un tramo de carretera cada 100 metros. En la siguiente
tabla se muestran los 10 puntos conocidos con coordenadas en metros y altitudes en metros
sobre el nivel del mar:
Punto 1 2 3 4 5 6 7 8 9 10

Coordenadas 0 100 200 300 400 500 600 700 800 900
(m)

Altitudes 100 105 110 112 115 118 120 121 123 125
(msnm)

Se necesita interpolar la altitud a una distancia de 450 metros a lo largo de la carretera. Utiliza la
interpolación polinómica para estimar la altitud en ese punto.

 Algoritmo y capturas de pantalla de programas en ejecución para la regresión


polinomial

 Código método de interpolación de newton por diferencias divididas

Option Explicit: : Esta declaración al principio del módulo del formulario asegura que todas
las variables se declaren antes de ser utilizadas.

Private Sub borrar_Click() : Este es el procedimiento que se ejecuta cuando se hace clic en un
botón llamado "borrar". Este procedimiento se encarga de borrar los valores en una serie de
celdas en la hoja de Excel.

Range("B5").Value = "" Range("B10").Value = ""


Range("B6").Value = "" Range("B11").Value = ""
Range("B7").Value = "" Range("B12").Value = ""
Range("B8").Value = "" Range("B13").Value = ""
Range("B9").Value = "" Range("B14").Value = ""
Range("E12").Value = ""
Range("C5").Value = "" Range("E13").Value = ""
Range("C6").Value = "" Range("E14").Value = ""
Range("C7").Value = ""
Range("C8").Value = "" Range("D18").Value = ""
Range("C9").Value = "" Range("E18").Value = ""
Range("C10").Value = "" Range("G4").Value = ""
Range("C11").Value = "" Range("G5").Value = ""
Range("C12").Value = "" Range("G6").Value = ""
Range("C13").Value = "" Range("G7").Value = ""
Range("C14").Value = "" Range("G8").Value = ""
Range("G9").Value = ""
Range("D5").Value = "" Range("G10").Value = ""
Range("D6").Value = "" Range("G11").Value = ""
Range("D7").Value = "" Range("G12").Value = ""
Range("D8").Value = "" Range("G13").Value = ""
Range("D9").Value = "" Range("G14").Value = ""
Range("D10").Value = ""
Range("D11").Value = "" Range("H4").Value = ""
Range("D12").Value = "" Range("H5").Value = ""
Range("D13").Value = "" Range("H6").Value = ""
Range("D14").Value = "" Range("H7").Value = ""
Range("H8").Value = ""
Range("E3").Value = "" Range("H9").Value = ""
Range("E5").Value = "" Range("H10").Value = ""
Range("E6").Value = "" Range("H11").Value = ""
Range("E7").Value = "" Range("H12").Value = ""
Range("E8").Value = "" Range("H13").Value = ""
Range("E9").Value = "" Range("H14").Value = ""
Range("E10").Value = ""
Range("E11").Value = ""
End Sub

Private Sub cerrar_Click(): Este procedimiento se ejecuta cuando se hace clic en un botón
llamado "cerrar". En este caso, simplemente cierra el formulario y termina la aplicación.
End
End Sub

Private Sub UserForm_Initialize(): Este procedimiento se ejecuta cuando se inicia el


formulario. Establece el enfoque (cursor) en un cuadro de texto llamado TextBox1.
TextBox1.SetFocus
End Sub

'Introducir datos en las listbox


Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift
As Integer): Este procedimiento se ejecuta cuando se presiona una tecla en el cuadro de texto
llamado TextBox1. Si la tecla presionada es "Enter" (código 13), se agrega el valor del cuadro
de texto al ListBox1, se borra el cuadro de texto y se establece nuevamente el enfoque en
TextBox1.

If KeyCode = 13 Then
ListBox1.AddItem TextBox1.Value
TextBox1.Value = ""
TextBox1.SetFocus
End If
End Sub

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift


As Integer): Similar al procedimiento anterior, pero relacionado con TextBox2 y ListBox2.
If KeyCode = 13 Then
ListBox2.AddItem TextBox2.Value
TextBox2.Value = ""
TextBox1.SetFocus
End If
End Sub

'Enviar los datos a la celda


Private Sub CommandButtonEnviar_Click(): Este es un procedimiento largo que se ejecuta
cuando se hace clic en un botón llamado "Enviar". Realiza varias tareas, incluyendo copiar
datos desde ListBox1 y ListBox2 a las columnas B y C de la hoja de Excel

Dim ws As Worksheet Declara una variable ws que se utilizará para referirse a una hoja
de cálculo.
Set ws = ThisWorkbook.Sheets("Hoja1") Asigna a ws la referencia a la hoja de cálculo
llamada "Hoja1" en el libro de trabajo actua

' Copiar datos de ListBox1 a la columna B, comenzando en la fila 5

Comienza un bucle For que copia datos desde ListBox1 a la columna B de la hoja de cálculo
empezando desde la fila 5. El bucle itera a través de los elementos en ListBox1 y copia cada
elemento a la columna B en la fila correspondiente
Dim i As Integer
For i = 0 To ListBox1.ListCount - 1
ws.Cells(i + 5, 2).Value = ListBox1.List(i)
Next i

' Copiar datos de ListBox2 a la columna C, comenzando en la fila 5


Comienza otro bucle For que copia datos desde ListBox2 a la columna C de la hoja de cálculo,
siguiendo un proceso similar al bucle anterior.
For i = 0 To ListBox2.ListCount - 1
ws.Cells(i + 5, 3).Value = ListBox2.List(i)
Next i

' Limpiar ListBox1 y ListBox2 después de copiar los datos


ListBox1.Clear y ListBox2.Clear borran los elementos de ListBox1 y ListBox2 después de
copiar los datos.
ListBox1.Clear
ListBox2.Clear

'Calculos
Dim B5, B6, B7, B8, B9, B10, B11, B12, B13, C5, C6, C7, C8, C9, C10, C11, C12, C13, D5, D6,
As Double Se declaran una serie de variables (B5, B6, B7, ..., C13, D5, ..., H14) como números
de punto flotante (Double)

Se declaran variables adicionales para ser utilizadas en los cálculos de interpolación: n como
entero (Integer), varios arrays (yint, x, y, fdd) para almacenar datos y resultados, xi como
número de punto flotante (Double), j, TempX y TempY también como números de punto
flotante.
'Variables para almacenar
Dim n As Integer
Dim yint(1000), x(1000), y(1000), fdd(1000, 1000), xi, j, TempX, TempY As Double

'Variabls para interpolar


Dim order As Integer
Dim xterm, yint2 As Double

'Introducir Valor de interpolación


Se establece xi como el valor ingresado por el usuario en un cuadro de diálogo de entrada
(InputBox). Esto se utiliza como el valor que se interpolará más tarde.
Range("E3").Value = InputBox("¿Cuál es el valor a interpolar?")

'Número de datos proporcionados


Se declaran variables adicionales (LastRowB y LastRowC) para almacenar la última fila con
datos en las columnas B y C de la hoja de cálculo.
Dim LastRowB As Long
Dim LastRowC As Long

' Obtener la última fila con datos en las columnas "B" y "C"
n se calcula restando 4 a la diferencia entre LastRowB y 4. Esto esta relacionado con la
cantidad de datos proporcionados.
LastRowB = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
LastRowC = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

' Calcular el número de datos proporcionados


n = LastRowB - 4 ' Restar 4 para ajustar a la fila inicial (B5)

'Seleccionar los datos y almacenarlos en vectores


Se selecciona la celda B5 como punto de inicio para la copia de datos en el siguiente bucle.
Range("B5").Select 'Seleccionar celda B5, donde esta el primez valor de x

For i = 0 To n

Se inicia un bucle que copia datos de las celdas activas a los vectores x e y. Se asume que los
datos están dispuestos en pares, con x en una fila y y en la siguiente.

'Almacena el valor de la celda activa en el vector xi


x(i) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select

'Almacena el valor de la celda activa en el vector yi


y(i) = ActiveCell.Value
ActiveCell.Offset(1, -1).Select

Next i “El "Next i" se utiliza para indicar el final del bucle "For i" y continuar con la
siguiente iteración o completar el bucle exterior. En este caso, "Next i" se utiliza para avanzar
al siguiente valor de i.

'Seleccionar el valor a interpolar y guardarlo como xi


xi se define como el valor de la celda E3, que parece ser el valor que se interpolará.
xi = Cells(3, "E")

'INTERPOLACION DE NEWTON
Comienza la sección de interpolación de Newton, en la que se calculan las diferencias finitas y
se generan los polinomios de interpolación.

'Almacenar valores de y para diferencias finitas


Se inicializan las diferencias finitas en fdd(i, 0) con los valores de y proporcionados.
For i = 0 To n
fdd(i, 0) = y(i)
Next i

'Calcula la pendiente para diferencias finitas en cada par de puntos


'Esto se actualiza con cada orden del polinomio de interpolación
Se inician dos bucles anidados para calcular las diferencias finitas para cada par de puntos. El
condicional If x(i + j) = x(i) maneja la división por cero, estableciendo fdd(i, j) en 0 cuando el
denominador se hace cero.

For j = 1 To n
For i = 0 To n - j
Los bucles For j y For i se utilizan para calcular las diferencias finitas de Newton. Estos bucles
se utilizan para iterar a través de una serie de valores. "For j" itera desde 1 hasta el valor de
n, y "For i" itera desde 0 hasta n - j.

' Manejar la división por cero, por ejemplo, establecer fdd(i, j) en 0

If x(i + j) = x(i) Then Si x(i + j) es igual a x(i), se establece fdd(i, j) en 0 para evitar la división
por cero.
fdd(i, j) = 0
Else
fdd(i, j) = (fdd(i + 1, j - 1) - fdd(i, j - 1)) / (x(i + j) - x(i))
End If

Next i
Next j De manera similar, el "Next j" se utiliza para indicar el final del bucle "For j" y
continuar con la siguiente iteración o completar el bucle más externo.

'Hacer el polinomio de diferencias finitas


Luego, se inicia la construcción del polinomio de interpolación de Newton. Se inicializa un
término xterm en 1 y el primer valor del polinomio yint(0) se establece en fdd(0, 0).
xterm = 1
yint(0) = fdd(0, 0)

En un bucle For, se recorren las diferencias finitas calculadas y se agrega el término


correspondiente al polinomio yint. Esto se hace iterativamente para construir el polinomio.
For order = 1 To n
xterm = xterm * (xi - x(order - 1))
yint2 = yint(order - 1) + fdd(0, order) * xterm
yint(order) = yint2
Next order

Range("D5:e15") = "" Se borran las celdas desde D5 hasta E15 en la hoja de cálculo.
Range("D5").Select

'Imprimir valores Se inicia un bucle para imprimir los valores calculados en las celdas.

For i = 0 To n inicia un bucle For que se ejecutará desde i = 0 hasta n, donde n es un valor
que representa el número de elementos que se deben procesar.
ActiveCell.Value = i Establece el valor de la celda activa (la celda seleccionada actualmente)
en el valor de i. Esto se utiliza para enumerar las filas en la hoja de cálculo, por ejemplo, si i es
0, se escribirá 0 en la celda activa.
ActiveCell.Offset(0, 1).Select Desplaza la selección de la celda una columna a la derecha. Esto
se hace para mover la selección a la celda adyacente en la misma fila, que es donde se planea
escribir el siguiente valor.
ActiveCell.Value = yint(i) Establece el valor de la nueva celda activa en el valor almacenado
en el arreglo yint correspondiente a la posición i. yint parece ser un arreglo que contiene
valores numéricos calculados previamente.
ActiveCell.Offset(0, 1).Select Nuevamente, desplaza la selección una columna a la derecha
para mover la selección a la siguiente celda en la misma fila.
ActiveCell.Offset(1, -2).Select Este comando desplaza la selección una fila hacia abajo y dos
columnas a la izquierda. En otras palabras, se está retrocediendo a la primera celda de la fila
siguiente. Esto se hace para preparar la celda activa para la próxima iteración del bucle For,
que escribirá el siguiente valor en la siguiente fila.
Next i Esto indica el final del bucle For para i y permite que el bucle se repita con el siguiente
valor de i.

Finalmente, los resultados de la interpolación se imprimen en la hoja de cálculo en las


ubicaciones especificadas, y se copian los valores de x e y desde los vectores a la hoja de
cálculo.

'Imprimir el valor a interpolar en la celda G8


ws.Cells(18, 4).Value = xi

' Imprimir el resultado en la celda H8


ws.Cells(18, 5).Value = yint(n)

' Imprimir xi en G4
ws.Cells(4, 7).Value = xi
' Imprimir yint en H4
ws.Cells(4, 8).Value = yint(n)

' Imprimir los valores de B en G5 hacia abajo


For i = 0 To n Inicia un bucle que se ejecutará desde i = 0 hasta n.
ws.Cells(i + 5, 7).Value = x(i) ' Valores de B Establece el valor de la celda en la columna 7
(celda G) y la fila correspondiente (comenzando en la fila 5 y avanzando hacia abajo) en el
valor de x(i). Esto imprimirá los valores de x(i) en la columna G, comenzando desde la fila 5 y
avanzando hacia abajo a medida que avanza i.
Next i Esto indica el final del bucle For para i

' Imprimir los valores de C en H5 hacia abajo


For i = 0 To n Inicia otro bucle que se ejecutará desde i = 0 hasta n.
ws.Cells(i + 5, 8).Value = y(i) ' Valores de C Establece el valor de la celda en la columna 8
(celda H) y la fila correspondiente (comenzando en la fila 5 y avanzando hacia abajo) en el
valor de y(i). Esto imprimirá los valores de y(i) en la columna H, comenzando desde la fila 5 y
avanzando hacia abajo a medida que avanza i.
Next i Esto indica el final del bucle For para i

End Sub

 Ejecución en Excel
 Código método de Lagrange
Option Explicit: es una declaración que se coloca al principio de un módulo de código y se
utiliza para obligar a que todas las variables utilizadas en el código se declaren
explícitamente antes de ser utilizadas.
Function MyInputBox (prompt As String) As Variant (Esta línea define una función
llamada “MyInputBox” que toma un argumento llamado prompt, que debe ser una cadena
de texto (String), y devuelve un valor de tipo “Variant”. Un “Variant” es un tipo de datos
que puede contener cualquier tipo de valor).

Dim result As Variant: Se declara una variable llamada “result” con el tipo de datos
“Variant”. Esta variable se utilizará para almacenar el valor introducido por el usuario en el
cuadro de diálogo InputBox.

result = Application.InputBox(prompt, Type = 0): (En esta línea, se utiliza la función


“Application.InputBox” para mostrar un cuadro de diálogo que le pide al usuario que
ingrese un valor. El argumento “prompt” se muestra como un mensaje en el cuadro de
diálogo, y el argumento “Type:=0” indica que se espera una entrada de texto. El valor
introducido por el usuario se almacena en la variable “result”.)

If result = False Then End: (Esta línea comprueba si el usuario hizo clic en el botón
"Cancelar" del cuadro de diálogo InputBox. Si el valor en “result” es igual a “False”,
entonces el código finaliza bruscamente usando “End”. Esto significa que, si el usuario
hace clic en "Cancelar", la función se interrumpirá y no devolverá ningún valor).

“MyInputBox = result”: Finalmente, si el usuario ingresó un valor (no hizo clic en


"Cancelar"), la función asignará el valor almacenado en la variable `result` a la misma
función `MyInputBox`, lo que significa que la función devolverá ese valor como resultado.
End Function (Finaliza la función)

Private Sub Calcular_Click(): Esta línea define un procedimiento (subrutina) llamado


"Calcular_Click" que es privado, lo que significa que solo se puede acceder desde el
módulo actual o el objeto que lo contiene. El "Click" indica que se trata de un manejador de
eventos de clic (cuando el botón "Calcular" se hace clic).
Dim A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, B2, B5, B6, B7, B8, B9, B10, B11,
B12, B13, B14, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14 As Double. (Esta línea
declara múltiples variables (A5, A6, A7, ..., D14) como variables de tipo Double. Estas
variables se utilizarán para almacenar valores numéricos.)
A partir de aquí se utiliza la función MyInputBox para pedir al usuario que introduzca un
valor y luego almacena ese valor en las celdas correspodientes.
Range("B2").Value = MyInputBox("Introduzca el valor interpolar")

Range("A5").Value = MyInputBox("Introduzca el primer valor de x")


Range("A6").Value = MyInputBox("Introduzca el segundo valor de x")
Range("A7").Value = MyInputBox("Introduzca el tercer valor de x")
Range("A8").Value = MyInputBox("Introduzca el cuarto valor de x")
Range("A9").Value = MyInputBox("Introduzca el quinto valor de x")
Range("A10").Value = MyInputBox("Introduzca el sexto valor de x")
Range("A11").Value = MyInputBox("Introduzca el séptimo valor de x")
Range("A12").Value = MyInputBox("Introduzca el octavo valor de x")
Range("A13").Value = MyInputBox("Introduzca el noveno valor de x")
Range("A14").Value = MyInputBox("Introduzca el décimo valor de x")

Range("B5").Value = MyInputBox("Introduzca el primer valor de y")


Range("B6").Value = MyInputBox("Introduzca el segundo valor de y")
Range("B7").Value = MyInputBox("Introduzca el tercer valor de y")
Range("B8").Value = MyInputBox("Introduzca el cuarto valor de y")
Range("B9").Value = MyInputBox("Introduzca el quinto valor de y")
Range("B10").Value = MyInputBox("Introduzca el sexto valor de y")
Range("B11").Value = MyInputBox("Introduzca el séptimo valor de y")
Range("B12").Value = MyInputBox("Introduzca el octavo valor de y")
Range("B13").Value = MyInputBox("Introduzca el noveno valor de y")
Range("B14").Value = MyInputBox("Introduzca el décimo valor de y")

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
D5 = Range("D5").Value
B2 = Range("B2").Value

´Fórmula para calcular L0´


Range("D5").Value = ((B2 - A6) / (A5 - A6)) * ((B2 - A7) / (A5 - A7)) * ((B2 - A8) /
(A5 - A8)) * ((B2 - A9) / (A5 - A9)) * ((B2 - A10) / (A5 - A10)) * ((B2 - A11) / (A5 -
A11)) * ((B2 - A12) / (A5 - A12)) * ((B2 - A13) / (A5 - A13)) * ((B2 - A14) / (A5 - A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
D6 = Range("D6").Value
B2 = Range("B2").Value

´Fórmula para calcular L1´


Range("D6").Value = ((B2 - A5) / (A6 - A5)) * ((B2 - A7) / (A6 - A7)) * ((B2 - A8) /
(A6 - A8)) * ((B2 - A9) / (A6 - A9)) * ((B2 - A10) / (A6 - A10)) * ((B2 - A11) / (A6 -
A11)) * ((B2 - A12) / (A6 - A12)) * ((B2 - A13) / (A6 - A13)) * ((B2 - A14) / (A6 - A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
D7 = Range("D7").Value
B2 = Range("B2").Value

´Fórmula para calcular L2´


Range("D7").Value = ((B2 - A5) / (A7 - A5)) * ((B2 - A6) / (A7 - A6)) * ((B2 - A8) /
(A7 - A8)) * ((B2 - A9) / (A7 - A9)) * ((B2 - A10) / (A7 - A10)) * ((B2 - A11) / (A7 -
A11)) * ((B2 - A12) / (A7 - A12)) * ((B2 - A13) / (A7 - A13)) * ((B2 - A14) / (A7 - A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
D8 = Range("D8").Value
B2 = Range("B2").Value

´Fórmula para calcular L3´


Range("D8").Value = ((B2 - A5) / (A8 - A5)) * ((B2 - A6) / (A8 - A6)) * ((B2 - A7) /
(A8 - A7)) * ((B2 - A9) / (A8 - A9)) * ((B2 - A10) / (A8 - A10)) * ((B2 - A11) / (A8 -
A11)) * ((B2 - A12) / (A8 - A12)) * ((B2 - A13) / (A8 - A13)) * ((B2 - A14) / (A8 - A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
D9 = Range("D9").Value
B2 = Range("B2").Value

´Fórmula para calcular L4´


Range("D9").Value = ((B2 - A5) / (A9 - A5)) * ((B2 - A6) / (A9 - A6)) * ((B2 - A7) /
(A9 - A7)) * ((B2 - A8) / (A9 - A8)) * ((B2 - A10) / (A9 - A10)) * ((B2 - A11) / (A9 -
A11)) * ((B2 - A12) / (A9 - A12)) * ((B2 - A13) / (A9 - A14)) * ((B2 - A14) / (A9 - A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
D10 = Range("D10").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
B2 = Range("B2").Value

´Fórmula para calcular L5´


Range("D10").Value = ((B2 - A5) / (A10 - A5)) * ((B2 - A6) / (A10 - A6)) * ((B2 - A7) /
(A10 - A7)) * ((B2 - A8) / (A10 - A8)) * ((B2 - A9) / (A10 - A9)) * ((B2 - A11) / (A10 -
A11)) * ((B2 - A12) / (A10 - A12)) * ((B2 - A13) / (A10 - A13)) * ((B2 - A14) / (A10 -
A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
D11 = Range("D11").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
B2 = Range("B2").Value

´Fórmula para calcular L6´


Range("D11").Value = ((B2 - A5) / (A11 - A5)) * ((B2 - A6) / (A11 - A6)) * ((B2 - A7) /
(A11 - A7)) * ((B2 - A8) / (A11 - A8)) * ((B2 - A9) / (A11 - A9)) * ((B2 - A12) / (A11 -
A12)) * ((B2 - A13) / (A11 - A13)) * ((B2 - A14) / (A11 - A14)) * ((B2 - A14) / (A11 -
A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
D12 = Range("D12").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
B2 = Range("B2").Value

´Fórmula para calcular L7´


Range("D12").Value = ((B2 - A5) / (A12 - A5)) * ((B2 - A6) / (A12 - A6)) * ((B2 - A7) /
(A12 - A7)) * ((B2 - A8) / (A12 - A8)) * ((B2 - A9) / (A12 - A9)) * ((B2 - A10) / (A12 -
A10)) * ((B2 - A11) / (A12 - A11)) * ((B2 - A13) / (A12 - A13)) * ((B2 - A14) / (A12 -
A14))

´Declaración de las variables que se van a utilizar´


A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
D13 = Range("D13").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
B2 = Range("B2").Value

´Fórmula para calcular L8´


Range("D13").Value = ((B2 - A5) / (A13 - A5)) * ((B2 - A6) / (A13 - A6)) * ((B2 - A7) /
(A13 - A7)) * ((B2 - A8) / (A13 - A8)) * ((B2 - A9) / (A13 - A9)) * ((B2 - A10) / (A13 -
A10)) * ((B2 - A11) / (A13 - A11)) * ((B2 - A12) / (A13 - A12)) * ((B2 - A14) / (A13 -
A14))
´Declaración de las variables que se van a utilizar´
A6 = Range("A6").Value
A5 = Range("A5").Value
A7 = Range("A7").Value
A8 = Range("A8").Value
A9 = Range("A9").Value
A10 = Range("A10").Value
D14 = Range("D14").Value
A11 = Range("A11").Value
A12 = Range("A12").Value
A13 = Range("A13").Value
A14 = Range("A14").Value
B2 = Range("B2").Value

´Fórmula para calcular L9´


Range("D14").Value = ((B2 - A5) / (A14 - A5)) * ((B2 - A6) / (A14 - A6)) * ((B2 - A7) /
(A14 - A7)) * ((B2 - A8) / (A14 - A8)) * ((B2 - A9) / (A14 - A9)) * ((B2 - A10) / (A14 -
A10)) * ((B2 - A11) / (A14 - A11)) * ((B2 - A12) / (A14 - A12)) * ((B2 - A13) / (A14 -
A13))
End Sub (Finaliza el código)

Private Sub Calcular_Click(): (Su función principal es borrar o limpiar el contenido de una
serie de celdas en la hoja de Excel.)

Range("A5").Value = ""
Range("A6").Value = ""
Range("A7").Value = ""
Range("A8").Value = ""
Range("A9").Value = ""
Range("A10").Value = ""
Range("A11").Value = ""
Range("A12").Value = ""
Range("A13").Value = ""
Range("A14").Value = ""
Range("A19").Value = ""
Range("A20").Value = ""
Range("A21").Value = ""
Range("A22").Value = ""
Range("A23").Value = ""
Range("A24").Value = ""
Range("A25").Value = ""
Range("A26").Value = ""
Range("A27").Value = ""
Range("A28").Value = ""
Range("A29").Value = ""
Range("B2").Value = ""
Range("B5").Value = ""
Range("B6").Value = ""
Range("B7").Value = ""
Range("B8").Value = ""
Range("B9").Value = ""
Range("B10").Value = ""
Range("B11").Value = ""
Range("B12").Value = ""
Range("B13").Value = ""
Range("B14").Value = ""
Range("B19").Value = ""
Range("B20").Value = ""
Range("B21").Value = ""
Range("B22").Value = ""
Range("B23").Value = ""
Range("B24").Value = ""
Range("B25").Value = ""
Range("B26").Value = ""
Range("B27").Value = ""
Range("B28").Value = ""
Range("B29").Value = ""

Range("D5").Value = ""
Range("D6").Value = ""
Range("D7").Value = ""
Range("D8").Value = ""
Range("D9").Value = ""
Range("D10").Value = ""
Range("D11").Value = ""
Range("D12").Value = ""
Range("D13").Value = ""
Range("D14").Value = ""
Range("F5").Value = ""

End Sub (Finaliza el código)

Private Sub Interpolación_Click() Esto define un procedimiento que se ejecuta cuando se


hace clic en un control con el nombre "Interpolación" en una hoja de Excel. Es un
manejador de eventos.
Dim x (1 To 10) As Double ' Valores de x Un arreglo para almacenar los valores de x. Se
espera que haya 10 valores.
Dim y (1 To 10) As Double ' Valores de y Un arreglo para almacenar los valores de y,
correspondientes a los valores de x.
Dim n As Integer ' Número de puntos
Dim xi As Double ' Valor de interpolación
Dim yi As Double ' Valor interpolado
Dim i As Integer Variable para controlar bucles y cálculos.
Dim Li As Double Variable para controlar bucles y cálculos.
Dim j As Integer Variable para controlar bucles y cálculos.

' Inicializar los valores de x e y

xi = Range("B2").Value xi se obtiene de la celda B2.

Los valores de x se obtienen de las celdas A5 a A14.


x(1) = Range("A5").Value
x(2) = Range("A6").Value
x(3) = Range("A7").Value
x(4) = Range("A8").Value
x(5) = Range("A9").Value
x(6) = Range("A10").Value
x(7) = Range("A11").Value
x(8) = Range("A12").Value
x(9) = Range("A13").Value
x(10) = Range("A14").Value

Los valores de y se obtienen de las celdas B5 a B14.


y(1) = Range("B5").Value
y(2) = Range("B6").Value
y(3) = Range("B7").Value
y(4) = Range("B8").Value
y(5) = Range("B9").Value
y(6) = Range("B10").Value
y(7) = Range("B11").Value
y(8) = Range("B12").Value
y(9) = Range("B13").Value
y(10) = Range("B14").Value

' Calcular el valor interpolado utilizando el método de Lagrange


n = UBound(x) (n se establece como la cantidad de elementos en el arreglo x)

yi = 0 ( yi se inicializa en 0.)

For i = 1 To n (Luego, hay un bucle que recorre cada punto (i) de 1 a n)


Li = 1 (Li se inicializa en 1.)

For j = 1 To n (luego, otro bucle anidado (j) recorre cada punto distinto al punto actual
(i).)
If i <> j Then
Li = Li * (xi - x(j)) / (x(i) - x(j)) ( Se calcula el valor de Li según la fórmula de
Lagrange que involucra productos y divisiones de las diferencias entre xi y xj.)
End If
Next j

yi = yi + Li * y(i) Se suma el producto Li * y(i) a yi.


Next i

' Mostrar el resultado en una celda de Excel


Range("F5").Value = yi Finalmente, el valor interpolado yi se almacena en la celda F5
de Excel para que el usuario lo vea.

End Sub (Finaliza el código)

Private Sub Finalizar_Click() este código se encarga de finalizar la ejecución del


programa.
End Esta línea termina la ejecución del programa de forma inmediata. No realiza ningún
procesamiento adicional y cierra la aplicación de Excel si se está ejecutando desde Excel.
Esencialmente, detiene por completo la ejecución del código.
End Sub (Finaliza el código)

Private Sub Lagrange_Click() Esto define un procedimiento que se ejecuta cuando se hace
clic en un control con el nombre "Lagrange" en una hoja de Excel. Es un manejador de
eventos.
UserForm1.Show Esta línea de código muestra el formulario de usuario llamado
"UserForm1."
End Sub (Finaliza el código)

Sub Gráfica()
' Gráfica Macro
Las líneas siguientes ingresan valores en celdas específicas
Range("A19").Select
ActiveCell.FormulaR1C1 = "0"
Range("A20").Select
ActiveCell.FormulaR1C1 = "100"
Range("A21").Select
ActiveCell.FormulaR1C1 = "200"
Range("A22").Select
ActiveCell.FormulaR1C1 = "300"
Range("A23").Select
ActiveCell.FormulaR1C1 = "400"
Range("A24").Select
ActiveCell.FormulaR1C1 = "500"
Range("A24").Select
ActiveCell.FormulaR1C1 = "450"
Range("A25").Select
ActiveCell.FormulaR1C1 = "500"
Range("A26").Select
ActiveCell.FormulaR1C1 = "600"
Range("A27").Select
ActiveCell.FormulaR1C1 = "700"
Range("A28").Select
ActiveCell.FormulaR1C1 = "800"
Range("A29").Select
ActiveCell.FormulaR1C1 = "900"
Range("B19").Select
ActiveCell.FormulaR1C1 = "100"
Range("B20").Select
ActiveCell.FormulaR1C1 = "105"
Range("B21").Select
ActiveCell.FormulaR1C1 = "110"
Range("B22").Select
ActiveCell.FormulaR1C1 = "112"
Range("B23").Select
ActiveCell.FormulaR1C1 = "115"
Range("B24").Select
ActiveCell.FormulaR1C1 = "116.5919952"
Range("B25").Select
ActiveCell.FormulaR1C1 = "118"
Range("B26").Select
ActiveCell.FormulaR1C1 = "120"
Range("B27").Select
ActiveCell.FormulaR1C1 = "121"
Range("B28").Select
ActiveCell.FormulaR1C1 = "123"
Range("B29").Select
ActiveCell.FormulaR1C1 = "125"
End Sub (Finaliza el código)

 Ejecución en Excel
 Resultados del problema desarrollado
El problema desarrollado nos muestra cuales son las elevaciones de una carretera cada 100 metros.
El objetivo de este problema de aplicación es encontrar un polinomio que se ajuste a los datos
conocidos y que permita estimar altitudes en cualquier punto a lo largo del tramo que va de 0 a
900m. Este problema en específico nos pidió encontrar la elevación a los 450 m de carretera,
dándonos un valor de 116.5919952 msnm.
CONCLUSIÓN
La interpolación polinómica se utiliza en ingeniería civil en diversas aplicaciones. Nosotros
utilizamos como ejemplo el cálculo de perfiles topográficos o de terreno a partir de datos limitados,
como levantamientos topográficos.

En este aplicamos la interpolación polinómica de Lagrange y la interpolación polinómica de


Newton. Estos métodos permitieron ajustar un polinomio a los datos conocidos y luego evaluar el
polinomio en cualquier ubicación para obtener una estimación de la elevación del terreno.

Una vez que interpolados el perfil topográfico, esta información es fundamental en la ingeniería
civil para el diseño de carreteras, puentes, sistemas de drenaje y otros aspectos de un proyecto.
También ayuda a comprender cómo se eleva o desciende el terreno entre los puntos de medición y a
tomar decisiones informadas sobre la pendiente, la nivelación y el drenaje.

La interpolación polinómica es solo una de las muchas herramientas matemáticas utilizadas en


ingeniería civil para el análisis de terrenos y el diseño de infraestructuras. Esta es una técnica útil
para obtener estimaciones de elevación en ubicaciones intermedias entre puntos conocidos, lo que
es esencial para el diseño y la planificación de proyectos de construcción y carreteras.
WEBGRAFÍA

https://es.wikipedia.org/wiki/Interpolaci%C3%B3n_polin%C3%B3mica
http://www3.fi.mdp.edu.ar/metodos/apuntes/diferencias%20divididas.pdf
https://spiegato.com/es/que-es-la-interpolacion
https://www.sangakoo.com/es/temas/interpolacion-polinomica-definicion
Met. newton
https://numat.net/ejerc/interp/
https://youtu.be/t35gi8UKdTY?si=AHBDAQ4wqaCnWFIA
Met. Lagrange
https://youtu.be/c6mQuBQZr0A?si=jcS0dxwr9A_JA9vV
https://youtu.be/LxqHPPQpE48?si=q4hw9s4T_urwKhnt
BIBLIOGRAFÍA
STEVEN, Chapra. Métodos Numéricos para Ingenieros. (1998)

También podría gustarte