Está en la página 1de 158

4/2/2021 Ingeniero

Ingeniero
¿Qué es un ingeniero?

¿Qué es la ingeniería?

La ingeniería

Pensamiento de ingeniero

Describe el problema

Modela problema matemáticamente

Soluciona el modelo matemático

Usa la solución

¿Qué es un ingeniero?
RAE (De ingenio, máquina o artificio).
Persona que profesa la ingeniería o alguna de sus ramas.

¿Qué es la ingeniería?
Es el conjunto de conocimientos y técnicas científicas aplicadas a la creación,
perfeccionamiento e implementación de estructuras (tanto físicas como teóricas) para
la resolución de problemas que afectan la actividad cotidiana de la sociedad. Para
ella, el estudio, conocimiento, manejo y dominio de las matemáticas, la física y otras
ciencias es aplicado profesionalmente tanto para el desarrollo de tecnologías, como
para el manejo eficiente de recursos y/o fuerzas de la naturaleza en beneficio de la
sociedad.

La ingeniería
Es la actividad de transformar el conocimiento en algo práctico.

Pensamiento de ingeniero
• Describe el problema.

• Modela el problema matemáticamente.

https://www.notion.so/Ingeniero-35e1224847dd44978a7eda9ba9db4b3c#ff160fb1b7454342af1244441b918a41 1/4
4/2/2021 Ingeniero

• Soluciona el modelo matemático.

• Usa la solución.

Se desea construir gaviones para controlar la creciente de un río.

Describe el problema
Es necesario entender plenamente cuál es el problema a resolver, en este caso se debe
conocer la cantidad de malla de acero la cual se vende por cm2 , en vista que la piedra
es un recurso que se puede tomar del mismo lugar. Se sabe que las dimensiones del
gavión son:

• Alto: 1m

• Ancho: 1m

• Largo: 2.58m

Modela problema matemáticamente

https://www.notion.so/Ingeniero-35e1224847dd44978a7eda9ba9db4b3c#ff160fb1b7454342af1244441b918a41 2/4
4/2/2021 Ingeniero

A = 2a2 + 4ab

Soluciona el modelo matemático


Convertir las dimensiones a cm:

• a = 100cm
• b = 258cm
Calcular el área:

A = 2 ∗ 1002 + 4 ∗ 100 ∗ 258

A = 123200cm2

Usa la solución
Se usarán 123200cm2 de malla de acero para cada gavión.

https://www.notion.so/Ingeniero-35e1224847dd44978a7eda9ba9db4b3c#ff160fb1b7454342af1244441b918a41 3/4
4/2/2021 Métodos para resolver problemas

Métodos para resolver


problemas
Métodos exactos o analíticos

Métodos gráficos

Uso de calculadoras

Uso de computadoras

¿Qué son los métodos numéricos?

Dentro del pensamiento de ingeniero se analizará el tercer punto, Soluciona el


modelo matemático . Existen cuatro maneras de resolver los problemas
matemáticos:
1 . Métodos exactos o analíticos.
2 . Métodos gráficos.
3 . Uso de calculadoras.
4 . Uso de computadoras.

Métodos exactos o analíticos


Son los métodos y técnicas usadas por el álgebra, consiste en una seria de pasos ya
definidas para encontrar la solución, como es el caso de resolver una polinomio de
segundo grado (una x2 + b x + C = 0), la manera de encontrar las raíces es
- b ± segundo 2 - 4 a c
aplicar la ecuación cuadrática (X = 2a ).
Lamentablemente muchos problemas no tienen una estrategia para solucionarlos,
X + lo g X = 5, entonces el álgebra no puede resolver todos los problemas, los
matemáticos siguen buscando maneras de resolver fácilmente dichos problemas.

Métodos gráficos
Consiste en crear una gráfica de la función y encontrar en la gráfica la solución, para
ello se puede usar diferentes métodos apoyados por compuradora:

https://www.notion.so/M-todos-para-resolver-problemas-5118416d0a7f4a639b72d686a776bc0a 1/4
4/2/2021 Métodos para resolver problemas

• Google

Realizar una búsqueda iniciando con la palabra gráfica seguida de la ecuación:

gráfico x + log10 (x) -5

• Pitón

importar numpy como np import matplotlib . pyplot como plt %


matplotlib en línea x = np . linspace ( 0 , 7 , 1000 ) y = x + np
. log10 ( x ) - 5 fig , ax = plt . subparcelas ( ) ax . plot ( x
, y ) plt . axhline ( 0 , color = 'negro' ) plt . axvline ( 0 ,
color = 'negro' ) hacha . cuadrícula ( Verdadero , que = 'ambos'
)

Colaboratorio de Google
https://colab.research.google.com/drive/1ADostc7NU…

Si bien se puede obtener la gráfica de manera rápida, solo es útil para problemas que
tienen representaciones bidimensionales (2D) o tridimensionales (3D) para casos
donde se tienen más variables resultantes poco útiles, además de la exactitud de
resultado, si se desea una mayor cantidad de decimales es necesario volver a generar
la gráfica.

Uso de calculadoras
Las calculadoras ayudan en la realización de las operaciones matemáticas y han
permitido resolver los problemas de una mejor manera, ayudan con las operaciones
pero el trabajo sigue siendo manual, es necesario usar papel y lápiz trasladar los datos
y resultados entre el papel y la calculadora lo que puede generar problemas en la
transcripción y en el redondeo.

Uso de computadoras
Las computadoras son las principales herramientas de la ingeniería moderna, para
resolver problemas matemáticos con ellas se usan los Métodos Numéricos .

¿Qué son los métodos numéricos?

https://www.notion.so/M-todos-para-resolver-problemas-5118416d0a7f4a639b72d686a776bc0a 2/4
4/2/2021 Métodos para resolver problemas

Los Métodos Numéricos hijo Técnicas Que permiten Concurso Formulario Y Resolver
Problemas con Matematicos Usando OPERACIONES solitario aritméticas , es factible
de ninguna Hacen Uso del álgebra para resolver los Problemas, lo Cual Es Una ventaja
f Porque las OPERACIONES aritméticas Sencillas hijo, Pero implican la ONU gran
volumen de tediosos Cálculos . Realizar cálculos de manera manual y con la ayuda
de un cálculo resultan poco prácticos pues para resolver un problema es necesario
realizar millas de operaciones, para que los Métodos Numéricos sean aplicables es
necesario usar o construir programas que los implementen y sea la computadora la
que realiza el trabajo. Los Métodos Numéricos no tienen sentido ni valor sin el uso
de la programación y la computadora .
Los problemas que se pueden resolver son:
1 . Raíces.
2 . Sistemas de ecuaciones.
3 . Optimización.
4 . Ajuste de datos.
5 . Derivación
6 . Integración.
7 . Ecuaciones diferenciales.
Métodos numéricos se relacionan con la ingeniería de las siguientes maneras:

• Son herramientas para resolver problemas ingenieriles. Permiten resolver la


gran mayoría de los problemas matemáticos que un ingeniero debe afrontar para
realizar su trabajo.

• Construir y adaptar los programas existentes. Mucho del software usando en


ingeniería actualmente tiene algún mecanismo que permite programar y
automatizar acciones. Para el uso de software especializado para Métodos
Numéricos es necesario conocer los métodos, funcionamiento y nomenclatura.

• Usar mejor las computadoras. Los métodos numéricos permiten obtener todo el
potencial de las computadoras, ayudando a resolver problemas cada vez más
complejos en menor y alta calidad.

• Reforzar el conocimiento de las matemáticas. Comprender el funcionamiento


de un método implica tener fuertes bases matemáticas.

https://www.notion.so/M-todos-para-resolver-problemas-5118416d0a7f4a639b72d686a776bc0a 3/4
4/2/2021 Error en la ingeniería

Error en la ingeniería
Cifras significativas

Exactitud y Precisión

Definición del Error

Error verdadero

Error relativo

Error relativo porcentual

Error de redondeo

Teorema de Taylor

Si bien los Métodos Numéricos son muy prometedores al solo usar operaciones
aritméticas no son perfectos, los métodos numéricos dan soluciones aproximadas y
es necesario medir el error.

Cifras significativas
Son las cifras que dan confiabilidad a un valor numérico. Depende de instrumento con
el que se mide.

https://www.notion.so/Error-en-la-ingenier-a-5cc4e131cdb147ba9d446156fcfaf052 1/6
4/2/2021 Error en la ingeniería

El flexometro puede medir hasta 1mm por otro lado el distanciómetro también
puede medir hasta 1mm ambos instrumentos tienen la misma cantidad de cifras
significativas, es decir una milésima de metro.
La cantidad de cifras significativas se debe elegir de acuerdo al trabajo que se esta
realizando, en el caso de la construcción no sería útil una medida más pequeña.

Exactitud y Precisión
• Exactitud: Cercanía del valor
exacto y del valor calculado. Para
determinar la exactitud es
necesario conocer el valor
verdadero previamente. Para una
problema conocido se puede
resolver con álgebra y comprar con
el resultado obtenido por el
método, si son cercanos el método
es exacto.

• Precisión: Cercanía entre los


valores medidos o calculados.
Consiste en aplicar varias aveces el
método usando los mismos datos
si el resultado es el mismo se dice
que el método es preciso.
Lo que se busca es que un método se
exacto y preciso.

Definición del Error

Error verdadero

ErrorV erdadero = V alorAproximado − V alorV erdadero

EV = VA − VV

https://www.notion.so/Error-en-la-ingenier-a-5cc4e131cdb147ba9d446156fcfaf052 2/6
4/2/2021 Error en la ingeniería

El signo del error generalmente no se toma en cuenta, si es positivo significa que ha


habido un exceso en el valor aproximado o calculado respecto al valor verdadero; por
otro lado si es negativo quiere decir que ha habido una escasez del valor aproximado.
Si el error es de 1m depende del contexto para determinar si es un error aceptable o
no, en la construcción de una carrera de 1000Km será un error muy pequeño, pero
en caso de construir un puente de 10m es un error muy grande.

Error relativo

ErrorV erdadero
ErrorRealtivo =
V alorV erdadero

EV
ER =
VV

El error relativo subsana la falta de contexto del error verdadero, cualquier valor
cercano a cero será un bien error.

Error relativo porcentual

ErrorRelativo% = ErrorRealtivo ∗ 100%

ε = ER ∗ 100%

Error de redondeo
La computadora no puede guardar un número infinito de cifras, por lo tanto los
números son truncados y redondeados. El número más pequeño que se puede
representar depende de varios factores:

• Hardware de la computadora, las computadoras de 64bits almacenan más cifras


significativas de un número que las computadoras de 32bits.

• El sistema operativo, se pueden configurar algunas sistemas operativos,


generalmente linux, para almacenar más cifras significativas.

• Software, como ser los lenguajes de programación pueden tener bibliotecas que
permitan usar varios bloques de memoria para almacenar un número
aumentando la cantidad de cifras significativas.

https://www.notion.so/Error-en-la-ingenier-a-5cc4e131cdb147ba9d446156fcfaf052 3/6
4/2/2021 Error en la ingeniería

Es importante tener consciencia de las capacidades de las herramientas que se están


usando, para determinar el número más pequeño que puede soportar python se
puede usar:

error = 1. while error != 0.: error = error / 2. print(error)

Google Colaboratory
https://colab.research.google.com/drive/1zCpwj-Wiflxjmk…

Teorema de Taylor

Consiste en encontrar el siguiente valor de una función, es decir, f(xi+1 ). A partir del
punto anterior f(xi ) y sus derivadas.
Si xi+1 es muy cercano a xi entonces:

f(xi+1 ) ≅ f(xi )

Se llama aproximación de Grado 0.


En caso que xi+1 y xi no sean cercanos es necesario usar las derivadas de la función.
Mientras más términos tenga la sumatoria la aproximación es mejor:

• Grado 1:

f(xi+1 ) ≅ f(xi ) + f ′ (xi )(xi+1 − xi )

• Grado 2:

f ′′ (xi )
f(xi+1 ) ≅ f(xi ) + f ′ (xi )(xi+1 − xi ) + (xi+1 − xi )2
2!

• Grado 3:

′ f ′′ (xi )
f(xi+1 ) ≅ f(xi ) + f (xi )(xi+1 − xi ) + (xi+1 − xi )2 +
2!
′′′
f (xi )
(xi+1 − xi )3
3!

https://www.notion.so/Error-en-la-ingenier-a-5cc4e131cdb147ba9d446156fcfaf052 4/6
4/2/2021 Error en la ingeniería

• Grado n:

′ f ′′ (xi )
f(xi+1 ) = f(xi ) + f (xi )(xi+1 − xi ) + (xi+1 − xi )2 +
2!
f (n) (xi )
…+ (xi+1 − xi )n + Rn
n!

f (n+1) (ξ)
Rn = (xi+1 − xi )n+1
(n + 1)!

ξ = xi

El teorema de Taylor es la base para muchos métodos y un estrategia para encontrar


el siguiente valor de la función y de esta manera encontrar la solución.

f(xi+1 ) = f(xi ) +
n
f (j) (xi )
∑ (xi+1 − xi )j +
j=1
j!
Rn (xi )

Rn (xi ) =
f (n+1) (xi )
(xi+1 − xi )n+1
(n + 1)!

https://www.notion.so/Error-en-la-ingenier-a-5cc4e131cdb147ba9d446156fcfaf052 5/6
4/2/2021 2.1 Introducción

2.1 Introducción
Raíces

Métodos brutos

Raíces
Al momento de resolver una ecuación de una incógnita es necesario encontrar la raíz,
la raíz es un valor para la incógnita que garantiza la igualdad. Si se desea resolver la
ecuación x + log(x) = 5, es necesario encontrar un valor para x que de 5 = 5 o
escrito de otra manera x debe dar cero después de evaluar la ecuación: x +
log(x) − 5 = 0.
De manera general la raíz es un valor para x donde se cumple que f(x) = 0.
Para encontrar la raíz se pueden usar tres grandes grupos de métodos:
Métodos brutos.
Métodos de intervalos.
Métodos abiertos.

Métodos brutos
Son métodos que no se recomiendan debido a que no siguen ninguna estrategia,
hacen uso del poder bruto de las computadoras:

• Adivinar, consiste en generar números aleatorios hasta que se cumpla que


f(x) = 0.
• Búsqueda, consiste en probar todos los números posibles desde −∞ hasta ∞.

https://www.notion.so/2-1-Introducci-n-7ce40ea77d2a43d8b8b5f3aebcce6694 1/2
4/2/2021 2.2 Métodos de intervalos

2.2 Métodos de intervalos


Método de Bisección

Ejemplo

Método de falsa posición

La gran mayoría de los métodos numéricos necesitan valores de partida para realizar
la búsqueda de la solución a estos valores se les conoce como valores supuestos o
valores iniciales, de estos valores puede depende el tiempo que le tome al método
encontrar la solución.
Consiste en encontrar el intervalo donde se encuentra la raíz y buscarla dentro del
mismo, esto garantiza que la solución se va encontrar. Los valores iniciales son dos
valores para x que forman el segmento de la raíz, dichos valores son x0 y x1 .
Es necesario verificar que los valores iniciales x0 y x1 contienen a la raíz de la función
f(x).

Caso 1 Caso 2 Caso 3

En el Caso 1, puede hacer clic sobre la imagen para verla mejor, los dos valores están
antes que la raíz, f(x0 ) y f(x1 ) son del mismo signo, negativos. En el Caso 2, los dos
valores contiene a la raíz, f(x0 ) y f(x1 ) son de signo diferente. En el Caso 3, los dos
valores están después que la raíz, f(x0 ) y f(x1 ) son del mismo signo, positivos.
El caso deseado es el Caso 2, matemáticamente se puede determinar si f(x0 ) y
f(x1 ) son de signo diferente si se calcula su producto, si f(x0 ) ∗ f(x1 ) < 0
entonces son de signo diferente, caso contrario son del mismo signo.

Método de Bisección
Consiste el dividir el segmento en dos mitades iguales.

https://www.notion.so/2-2-M-todos-de-intervalos-9825b4549d3b4bf68aea49e374b00218 1/7
4/2/2021 2.2 Métodos de intervalos

x0 + x1
x2 =
2

Se considera a x2 como la raíz de f(x), para verificar que realmente es la raíz debe
cumplir que f(x2 ) ≅ 0. Se ha usado ≅en lugar de = en vista que los Métodos
Numéricos no dan una solución exacta, es necesario determinar un error aceptado, es
decir la cantidad de cifras significativas que se usarán para resolver el problema, si el
error = 0.000001 quiere decir que para aceptar el valor de x2 como raíz es
necesario cumplir que ∣f(x2 )∣ ≤ 0.000001.
Si x2 no es la raíz entonces la raíz se encuentra a la derecha o izquierda de x2 , es decir
que solo es necesario continuar con la búsqueda en una de las mitades, para
determinar en que mitad se encuentra la raíz se usa el mismo criterio para determinar
si x0 y x1 contienen a la raíz.
Si f(x0 ) ∗ f(x2 ) < 0 entonces la raíz se encuentra en el segmento x0 , x2 por lo
tanto se puede descartar el segmento x2 , x1 , para limitar el nuevo segmento a x1 se
le asigna el valor de x2 .
Si f(x2 ) ∗ f(x1 ) < 0 entonces la raíz se encuentra en el segmento x2 , x1 por lo
tanto se puede descartar el segmento x0 , x2 , para limitar el nuevo segmento a x0 se
le asigna el valor de x2 .
Con el nuevo segmento se repite el procedimiento hasta que f(x2 ) ≅ 0.

Ejemplo
Resuelva la siguiente ecuación, con un error = 0.000001:

x + log x = 5

Como primer paso es necesario igualar a cero y definir la función.

f(x) = x + log x − 5

Se asumen dos valores iniciales:

• x0 = 5
• x1 = 6
Se verifica si x0 , x1 contiene a la raíz:

https://www.notion.so/2-2-M-todos-de-intervalos-9825b4549d3b4bf68aea49e374b00218 2/7
4/2/2021 2.2 Métodos de intervalos

f(5) ∗ f(6) = 0.6989700043360187 ∗ 1.7781512503836439 =


1.2428743871907526

En vista que no es negativo, el segmento no contiene a la raíz.


Se asumen dos valores iniciales:

• x0 = 1
• x1 = 6
Se verifica si x0 , x1 contiene a la raíz:

f(1) ∗ f(6) = −4 ∗ 1.7781512503836439 = −7.112605001534575

En vista que es negativo, el segmento contiene a la raíz.


Se procede a aplicar el método hasta que f(x2 ) ≅ 0, cada vez que se aplica se llama
iteración.
Iteración 1:

• x0 = 1.0
• x1 = 6.0
• x2 = 3.5
• f(x2 ) = −0.9559319556497243, x2 no es la raíz.
• f(x0 ) ∗ f(x2 ) = −4.0 ∗ −0.9559319556497243, es positivo, la raíz no se
encuentra en x0 , x2 .

• f(x2 ) ∗ f(x1 ) = −0.9559319556497243 ∗ 1.7781512503836439, es


negativo, la raíz se encuentra en x2 , x1 .

• x0 = x2
Iteración 2:

• x0 = 3.5
• x1 = 6.0
• x2 = 4.75
• f(x2 ) = 0.42669360962486635, x2 no es la raíz.
• f(x0 ) ∗ f(x2 ) = −0.9559319556497243 ∗ 0.42669360962486635, es
negativo, la raíz se encuentra en x0 , x2 .

https://www.notion.so/2-2-M-todos-de-intervalos-9825b4549d3b4bf68aea49e374b00218 3/7
4/2/2021 2.2 Métodos de intervalos

• x1 = x2
Iteraciones 3 a la 20:

• x0 = 3.5, f(x0 ) = −0.9559319556497243, x1 = 4.75, f(x1 ) =


0.42669360962486635, x2 = 4.125, f(x2 ) = −0.2595760471140558
• x0 = 4.125, f(x0 ) = −0.2595760471140558, x1 = 4.75, f(x1 ) =
0.42669360962486635, x2 = 4.4375, f(x2 ) = 0.08463836606315045
• x0 = 4.125, f(x0 ) = −0.2595760471140558, x1 = 4.4375, f(x1 ) =
0.08463836606315045, x2 = 4.28125, f(x2 ) = −0.08717941116349959
• x0 = 4.28125, f(x0 ) = −0.08717941116349959, x1 = 4.4375, f(x1 ) =
0.08463836606315045, x2 = 4.359375, f(x2 ) = −0.001200770710289234
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 = 4.4375, f(x1 ) =
0.08463836606315045, x2 = 4.3984375, f(x2 ) = 0.041735925203477464
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 =
4.3984375, f(x1 ) = 0.041735925203477464, x2 = 4.37890625, f(x2 ) =
0.020271897283123508
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 =
4.37890625, f(x1 ) = 0.020271897283123508, x2 = 4.369140625, f(x2 ) =
0.009536648120798574
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 =
4.369140625, f(x1 ) = 0.009536648120798574, x2 =
4.3642578125, f(x2 ) = 0.004168210520546722
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 =
4.3642578125, f(x1 ) = 0.004168210520546722, x2 =
4.36181640625, f(x2 ) = 0.0014837879350118044
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 =
4.36181640625, f(x1 ) = 0.0014837879350118044, x2 =
4.360595703125, f(x2 ) = 0.00014152562935354496
• x0 = 4.359375, f(x0 ) = −0.001200770710289234, x1 =
4.360595703125, f(x1 ) = 0.00014152562935354496, x2 =
4.3599853515625, f(x2 ) = −0.0005296182850287323
• x0 = 4.3599853515625, f(x0 ) = −0.0005296182850287323, x1 =
4.360595703125, f(x1 ) = 0.00014152562935354496, x2 =
4.36029052734375, f(x2 ) = −0.00019404526412714063
• x0 = 4.36029052734375, f(x0 ) = −0.00019404526412714063, x1 =
4.360595703125, f(x1 ) = 0.00014152562935354496, x2 =
4.360443115234375, f(x2 ) = −2.6259551477281207e − 05

https://www.notion.so/2-2-M-todos-de-intervalos-9825b4549d3b4bf68aea49e374b00218 4/7
4/2/2021 2.2 Métodos de intervalos

• x0 = 4.360443115234375, f(x0 ) = −2.6259551477281207e − 05, x1 =


4.360595703125, f(x1 ) = 0.00014152562935354496, x2 =
4.3605194091796875, f(x2 ) = 5.763310541251343e − 05
• x0 = 4.360443115234375, f(x0 ) = −2.6259551477281207e − 05, x1 =
4.3605194091796875, f(x1 ) = 5.763310541251343e − 05, x2 =
4.360481262207031, f(x2 ) = 1.5686793586766612e − 05
• x0 = 4.360443115234375, f(x0 ) = −2.6259551477281207e − 05, x1 =
4.360481262207031, f(x1 ) = 1.5686793586766612e − 05, x2 =
4.360462188720703, f(x2 ) = −5.28637479035865e − 06
• x0 = 4.360462188720703, f(x0 ) = −5.28637479035865e − 06, x1 =
4.360481262207031, f(x1 ) = 1.5686793586766612e − 05, x2 =
4.360471725463867, f(x2 ) = 5.200210436484554e − 06
• x0 = 4.360462188720703, f(x0 ) = −5.28637479035865e − 06, x1 =
4.360471725463867, f(x1 ) = 5.200210436484554e − 06, x2 =
4.360466957092285, f(x2 ) = −4.3081917588949636e − 08

Método de falsa posición


Dividir siempre en dos mitades iguales
puede ser problemático, en algunas
ocasiones es mejor dividir en
segmentos desiguales, para realizar
esta división desigual se traza un
segmento entre los puntos
(x0 , f(x0 )) y (x1 , f(x1 )), que corta
el eje x en x2 .

https://www.notion.so/2-2-M-todos-de-intervalos-9825b4549d3b4bf68aea49e374b00218 5/7
4/2/2021 2.2 Métodos de intervalos

Se puede ver que el segmento forma


dos triángulos rectángulos. Para
calcular el valor de x2 se parte dichos
triángulos.
Tomando el ángulo que se forma con
x2 se puede calcular tan para los dos
triángulos:
1. −f(x0 )
tan α =
x2 − x0
2. f(x1 )
tan α =
x1 − x2

Igualando:

−f(x0 ) f(x1 )
=
x2 − x0 x1 − x2

Despejando x2 :

−f(x0 )(x1 − x2 ) = f(x1 )(x2 − x0 )

−f(x0 )x1 + f(x0 )x2 = f(x1 )x2 − f(x1 )x0

f(x0 )x2 − f(x1 )x2 = f(x0 )x1 − f(x1 )x0

f(x0 )x1 − f(x1 )x0


x2 =
f(x0 ) − f(x1 )

El método se aplica de la misma manera que el Método de Bisección con la única


diferencia en el cálculo de x2 .

https://www.notion.so/2-2-M-todos-de-intervalos-9825b4549d3b4bf68aea49e374b00218 6/7
4/2/2021 2.3 Métodos abiertos

2.3 Métodos abiertos


Método de Newton-Raphson

Método de la Secante

Método de Halley

Programación

Evaluar función

Derivar función

scipy

Encontrar el segmento que contiene la raíz puede ser moroso, los métodos abiertos
no poseen dicha restricción, la desventaja es que no garantizan encontrar la solución.

Método de Newton-Raphson

https://www.notion.so/2-3-M-todos-abiertos-e124d35957794f02abe9f702f35e310d 1/6
4/2/2021 2.3 Métodos abiertos

Se requiere un valor inicial, x0 , con el


cual se encuentra el punto en la
función, es decir (x0 , f(x0 )), en dicho
punto se traza la tangente, el punto
donde la tangente corta al eje x es x1 ,
x1 se considera la raíz, si no se cumple
que f(x1 ) ≅ 0, se reppite el
procedimiento a partir de x1 .

La pendiente (m) de la tangente se


puede calcular con la primera derivada:

m = f ′ (x0 )

La pendiente de la tangente también se


puede calcular como:

Δy f(x0 ) − 0
m= = =
Δx x0 − x1
f(x0 )
x0 − x1

Igualando:

f(x0 )
f ′ (x0 ) =
x0 − x1

Despejando x1 :

f(x0 )
x1 = x0 −
f ′ (x0 )

Método de la Secante

https://www.notion.so/2-3-M-todos-abiertos-e124d35957794f02abe9f702f35e310d 2/6
4/2/2021 2.3 Métodos abiertos

La secante es la recta que corta una curva en dos puntos. En algunas ocasiones es
difícil calcular f ′ (x), se puede llegar a una aproximación a la tangente a través de la
secante de la siguiente manera:

f(x1 ) − f(x0 )
f ′ (x1 ) ≅
x1 − x0

x0 y x1 , los valores supuestos, deben ser muy cercanos para que pueden aproximarse
a la tangente.
Reemplazando en la ecuación de Newton-Raphson:

f(x1 )
x2 = x1 −
f(x1 ) − f(x0 )
x1 − x0

Simplificando:

f(x1 )(x1 − x0 )
x2 = x1 −
f(x1 ) − f(x0 )

Método de Halley
Conocido también como el Método de hipérbolas tangentes encuentra la raíz de
manera más rápida, la convergencia del Newton-Raphson es lineal de Halley es
cúbica, es decir la raíz se encuentra con mayor rapidez.
Toma la serie de Taylor segundo grado:

′ f ′′ (xi )
f(xi+1 ) = f(xi ) + f (xi )(xi+1 − xi ) + (xi+1 − xi )2
2!

xi+1 es la raíz, por lo tanto f(xi+1 ) = 0, entonces 1 queda:

′ f ′′ (xi )
0 = f(xi ) + f (xi )(xi+1 − xi ) + (xi+1 − xi )2
2!

Factorizando (xi+1 − xi ), se obtiene:

https://www.notion.so/2-3-M-todos-abiertos-e124d35957794f02abe9f702f35e310d 3/6
4/2/2021 2.3 Métodos abiertos

f ′′ (xi )
0 = f(xi ) + (xi+1 − xi ) [f (xi ) + ′
(xi+1 − xi )]
2!

Despejando xi+1 , se obtiene:

f(xi )
xi+1 = xi −
f ′′ (xi )
f ′ (xi ) + (xi+1 − xi )
2

De la ecuación de Newton-Raphson se obtiene:

f(xi )
xi+1 − xi = −
f ′ (xi )

Reemplazando:

2f(xi )f ′ (xi )
xi+1 = xi − 2
2 [f ′ (xi )] − f(xi )f ′′ (xi )

Programación

Evaluar función

from sympy import symbols, log x = symbols('x') ec = x + log(x, 10) -


5 for item in range(0, 10): print(item, ec.subs(x, item).evalf())

Derivar función

from sympy import symbols, log, diff x = symbols('x') ec = x + log(x,


10) - 5 dec = diff(ec, x) print(dec)

https://www.notion.so/2-3-M-todos-abiertos-e124d35957794f02abe9f702f35e310d 4/6
4/2/2021 2.3 Métodos abiertos

scipy
scipy es una biblioteca que contiene muchas herramientas para el cálculo numérico:

• bisect , implementa el método de bisección:

(../index.html)

SciPy.org (https://scipy.org/) Docs (https://docs.scipy.org/)


SciPy v1.6.0 Reference Guide (../index.html)
Optimization and root nding (scipy.optimize ) (../optimize.html)
index (../genindex.html) modules (../py-modindex.html) next (scipy.optimize.newton.html)
previous (scipy.optimize.ridder.html)

scipy.optimize.bisect Previous topic


scipy.optimize.ridd
scipy.optimize.bisect(f, a, b, args=(), xtol=2e-12, rtol=8.881784197001252e- (scipy.optimize.ridd
16, maxiter=100, full_output=False, disp=True) [source]
Next topic
• newton , implementa los métodos de Newton-Raphson, secante y Halley:

(../index.html)

SciPy.org (https://scipy.org/) Docs (https://docs.scipy.org/)


SciPy v1.6.0 Reference Guide (../index.html)
Optimization and root nding (scipy.optimize ) (../optimize.html)
index (../genindex.html) modules (../py-modindex.html) next (scipy.optimize.toms748.html)
previous (scipy.optimize.bisect.html)

scipy.optimize.newton Previous topic


scipy.optimize.bise
scipy.optimize.newton(func, x0, fprime=None, args=(), tol=1.48e-08, (scipy.optimize.bise
maxiter=50, fprime2=None, x1=None, rtol=0.0, full_output=False, disp=True)
Next topic

https://www.notion.so/2-3-M-todos-abiertos-e124d35957794f02abe9f702f35e310d 5/6
4/2/2021 3.1 Método de Müller

3.1 Método de Müller


No todos las ecuaciones que tiene una raíz real cortan al eje X, en la figura se puede
ver f ( x ) = X2 - 2 x + 1, sus dos raíces hijo 1, pero todos los valores de f ( x )
son positivos, por lo tanto no se pueden aplicar ningún método de intervalos.

Este método consiste en obtener la parábola que pasa por tres puntos elegidos.
Dichos coeficientes son sustituidos en la formula cuadrática para obtener el valor
donde la parábola intersecta al ejeX; es decir, la raíz estimada. La aproximación se
puede facilitar, si se escribe la ecuación de la parábola en una forma conveniente.

https://www.notion.so/3-1-M-todo-de-M-ller-274432b883084e5b8d07ffc043220ceb 1/5
4/2/2021 3.1 Método de Müller

En el Método de la Secante se usaban dos puntos para trazar una recta, ahora se usan
tres puntos para trazar una parábola y encontrar la raíz. Es recomendable que los
valores supuestos,X0 , X1 y X2 , sean lo más posibles posibles.
Una parábola se define como:

f ( x ) = una x2 + b x + C

Es necesario encontrar los valores de un, segundo y C a partir de X0 , X1 y X2 .


X3 es la raíz que se desea calcular, para ello se debe encontrar los coeficientes que
definen la parábola; en la figura, se puede ver queX2 es el valor inicial más cercano a
X3 , se usará X2 como punto de partida para trazar la parábola, matemáticamente
consiste en reemplazar X por X - X2 , quedando la ecuación:

f ( x ) = una ( x - X2 )2 + b ( x - X2 ) + C

Se reemplazan los valores iniciales:


1. f(x0 ) = a(x0 − x2 )2 + b(x0 − x2 ) + c
2. f(x1 ) = a(x1 − x2 )2 + b(x1 − x2 ) + c
3. f(x2 ) = a(x2 − x2 )2 + b(x2 − x2 ) + c
Simplificando la tercera ecuación:
f ( x2 ) = C
Reemplazando en las dos primeras:
1. f(x0 ) = a(x0 − x2 )2 + b(x0 − x2 ) + f(x2 )
2. f(x1 ) = a(x1 − x2 )2 + b(x1 − x2 ) + f(x2 )
Llevar f ( x2 ) a la derecha:
1. f(x0 ) − f(x2 ) = a(x0 − x2 )2 + b(x0 − x2 )
2. f(x1 ) − f(x2 ) = a(x1 − x2 )2 + b(x1 − x2 )
Definir h:

• h0 = x1 − x0
• h1 = x2 − x1
Definir ρ:

• ρ0 = f(x1 ) − f(x0 )
x1 − x0

https://www.notion.so/3-1-M-todo-de-M-ller-274432b883084e5b8d07ffc043220ceb 2/5
4/2/2021 3.1 Método de Müller

• ρ1 = f(x2 ) − f(x1 )
x2 − x1

Reemplazando h en ρ:
1. f(x1 ) − f(x0 )
ρ0 =
h0
2. f(x2 ) − f(x1 )
ρ1 =
h1
La segunda ecuación se puede escribir así:

f ( x1 ) - f ( x2 ) = una ( h1 )2 - b h1

Factorizando h1 y pasando al otro miembro:

f ( x1 ) - f ( x2 )
= una h1 - segundo
h1

Reemplazando ρ1 :

- ρ1 = una h1 - segundo

Despejando segundo:

segundo = ρ1 + una h1

De las ecuaciones de h0 y h1 se puede encontrar la relación X0 - X2 :


• x1 = h0 + x0
• x1 = x2 − h1
Igualando:

h0 + X0 = X2 - h1

Despejando:

X0 - X2 = - h0 - h1

https://www.notion.so/3-1-M-todo-de-M-ller-274432b883084e5b8d07ffc043220ceb 3/5
4/2/2021 3.1 Método de Müller

De las ecuaciones de ρ0 y ρ1 encontrar la relación f ( x0 ) - f ( x2 ):


• f(x1 ) = ρ0 h0 + f(x0 )
• f(x1 ) = f(x2 ) − ρ1 h1
Igualando:

ρ0 h0 + f ( x0 ) = f ( x2 ) - ρ1 h1

Despejando:

f ( x0 ) - f ( x2 ) = - ρ0 h0 - ρ1 h1

Reemplazando estas relaciones en la primera ecuación:

- ρ0 h0 - ρ1 h1 = a ( - h0 - h1 )2 + ( ρ1 + una h1 ) ( - h0 - h1 )

Dividiendo entre - h0 - h1 :

- ρ0 h0 - ρ1 h1
= a ( - h0 - h1 ) + ρ1 + una h1
- h0 - h1

Simplificando:

- ρ0 h0 - ρ1 h1
= - una h0 + ρ1
- h0 - h1

Despejando un:

ρ1 - ρ0
un =
h0 + h1

Para calcular X3 se usa una versión modificada de la ecuación cuadrática:

- 2 tazas
X3 = X2 +
segundo ± segundo2 - 4 a c

https://www.notion.so/3-1-M-todo-de-M-ller-274432b883084e5b8d07ffc043220ceb 4/5
4/2/2021 3.1 Método de Müller

Por el signo ± se entiende que hay dos resultados, solo se usa uno de ellos, se debe
usar el valor que esta entre X2 y la raíz, para determinar este valor matemáticamente
se comparan ∣ b + segundo2 - 4 a c∣ y ∣ b - segundo2 - 4 a c∣; si∣ b +
segundo2 - 4 a c∣ > ∣ b - segundo2 - 4 a c∣ se usa el valor calculado con
segundo + segundo2 - 4 a c, caso contrario con segundo -
segundo2 - 4 a c.
Si no se cumple que F( X3 ) ≅ 0 se repite el procedimiento, cambiando:
• X0 por el valor de X1 (X0 = X1 ).
• X1 por el valor de X2 (X1 = X2 ).
• X2 por el valor de X3 (X2 = X3 ).

https://www.notion.so/3-1-M-todo-de-M-ller-274432b883084e5b8d07ffc043220ceb 5/5
4/2/2021 3.2 Método de Bairstow

3.2 Método de Bairstow


Calcular b

Calcular c

Calcular r y s

Calcular todas las raíces

Los polinomios tiene varias raíces, los métodos anteriores solo calcular una raíz a la
vez, la raíz obtenida depende de los valores iniciales. Si un polinomio tiene raíces
iguales, diferentes valores iniciales calcularan la misma raíz. Una estrategia para
encontrar todas las raíces de un polinomio es la factorización, la regla de Ruffini, como
se ve en la figura, consiste en factorizar el polinomio de gradonorte en el producto de
un polinomio de primer grado por un polinomio de grado norte - 1.

Fnorte ( x ) = F1 ( x ) fn - 1 ( x )

El Método de Bairstow es un método eficiente de búsqueda de las raíces de un


polinomio real de grado arbitrario. Es un método iterativo, basado en el método de
Müller y de Newton-Raphson.
Dado un polinómio:

fn (x) = a0 + a1 x + a2 x2 + … + an−1 xn−1 + an xn

El método consiste en factorizar de la siguiente manera:

https://www.notion.so/3-2-M-todo-de-Bairstow-d11322f8bd8a494799d70111c59c6902 1/4
4/2/2021 3.2 Método de Bairstow

fn (x) = f2 (x)fn−2 (x)

Despejando fn−2 (x) :

fn (x)
fn−2 (x) =
f2 (x)

Cociente:

fn−2 (x) = b2 + b3 x + b4 x2 + … + bn−1 xn−3 + bn xn−2

Residuo:

Para garantizar que la división ha sido


R = b0 + b1 (x − r) exacta R = 0, si b0 = 0 y b1 = 0
entonces R = 0.

Donde:

f2 (x) = x2 − rx − s

r y s son los valores supuesto, el propósito del método es encontrar estos valores.

Calcular b
Para calcular el vector b, que contiene los coeficientes del cociente y del residuo se
usan las siguientes fórmulas:

• bn = an
• bn−1 = an−1 + rbn
• bi = ai + rbi+1 + sbi+2 (i = n − 2 ⋯ 0)
Generalmente los valores supuestos para r y s no generan un división exacta, cambiar
dichos valores de manera aleatoria no es una buena estrategia, el mejor camino es
minimizar b0 y b1 respecto de r y s:

• ∂b1 Δr + ∂b1 Δs = −b1


∂r ∂s

https://www.notion.so/3-2-M-todo-de-Bairstow-d11322f8bd8a494799d70111c59c6902 2/4
4/2/2021 3.2 Método de Bairstow

• ∂b0 Δr + ∂b0 Δs = −b0


∂r ∂s

Resolviendo el sistema se obtiene como respuesta Δr y Δs que indican cuanto debe


crecer o reducir r y s, respectivamente, para acercarse a una factorización exitosa.
Se pueden reemplazar la derivadas por parciales por unas constantes:

• ∂b0 = c1
∂r
• ∂b1
=
∂b0
= c2
∂r ∂s
• ∂b1
= c3
∂s

Calcular c
• cn = bn
• cn−1 = bn−1 + rcn
• ci = bi + rcyo + 1 + s cyo + 2 ( yo = norte - 2 ⋯ 1 )

Calcular r y s
Después de calcular C el sistema queda de la siguiente forma:

• C2 Δ r + C3 Δ s = - b1
• C1 Δ r + C2 Δ s = - b0
Los nuevos valores de r y s se calculan a partir de Δ r y Δ s:
• r =r+Δr
• s=s+Δs

Calcular todas las raíces


Una vez terminada la factorización se puede calcular fácilmente las raíces de F2 ( x )
aplicando la formula cuadrática, para encontrar las otras raíces se aplica el método a
Fn - 2 ( x ); se repite este procedimiento hasta queFn - 2 ( x ) mar de grado 1 o 2.

https://www.notion.so/3-2-M-todo-de-Bairstow-d11322f8bd8a494799d70111c59c6902 3/4
4/2/2021 4.1 Regla de Cramer

4.1 Regla de Cramer


Introducción

Definición

2 Ecuaciones con 2 Incógnitas

3 Ecuaciones con 3 Incógnitas

Otros sistemas

Introducción
Un sistema de ecuaciones lineal es un conjunto de ecuaciones de primer grado, todas
las ecuaciones son rectas:




un0 0 X0 + un0 1 X1 + ... + un0 n Xnorte = segundo0

un1 0 X0 + un1 1 X1 + ... + un1 n Xnorte = segundo1



...
unm 0 X0 + unm 1 X1 + ... + unm n Xnorte = segundometro

Para solucionarlo se debe encontrar los valores para X0 , X1 , ... , Xnorte que
satisfagan todas las igualdades al mismo tiempo.

Definición

La regla de Cramer es un teorema del álgebra lineal que da la solución de un sistema


lineal de ecuaciones en términos de determinantes . Recibe este nombre en honor a
Gabriel Cramer (1704-1752), quien publicó la regla en su Introduction à l'analyse des
lignes courbes algébriques de 1750.
Para sistemas de ecuaciones lineales de más de tres ecuaciones su aplicación para la
resolución del mismo resulta excesivamente costosa , es lenta.

2 Ecuaciones con 2 Incógnitas


Un sistema de 2 ecuaciones con 2 incógnitas se puede representar de la siguiente
manera:

https://www.notion.so/4-1-Regla-de-Cramer-96b4d862a81f4b3a8f6eb1a880a17aec 1/4
4/2/2021 4.1 Regla de Cramer

una x + b y = mi
{
cx+dy =F

El método busca encontrar ecuaciones que calcular de manera rápida las raíces del
sistema para ello se calcula la determinante de dos matrices:
1 . Matriz de coeficientes del sistema:

[ ]
un segundo
C re

2 . Matriz de la variable a resolver, se debe reemplazar la columna de la variable que


se va a resolver por el vector de términos independientes.
Las ecuaciones para encontrar las dos variables son:

• Para la primera variable:

∣mi segundo∣
∣ ∣
∣F re ∣∣ ed-bf
X= ∣ =
∣un segundo∣ una d - b c
∣ ∣
∣C re ∣∣

• Para la segunda variable:

∣un mi∣
∣ ∣
∣C F ∣ una f - c e
y= ∣ ∣ =
∣un segundo∣ una d - b c
∣ ∣
∣C re ∣∣

Con las ecuaciones:

• x = ed − bf
ad − bc
• y=
af − ce
ad − bc

https://www.notion.so/4-1-Regla-de-Cramer-96b4d862a81f4b3a8f6eb1a880a17aec 2/4
4/2/2021 4.1 Regla de Cramer

Se pueden calcular las raíces de cualquier sistema con 2 ecuaciones y con 2 incógnitas
de manera rápida, pero solo sirven para este caso.

3 Ecuaciones con 3 Incógnitas


El procedimiento es el mismo, encontrar tres ecuaciones, a partir del cálculo de las
determinantes, que calcular las raíces a partir de los coeficientes.

∣j segundo C ∣
∣ ∣
∣k mi F ∣∣

∣l h yo∣∣
X= ∣ =
∣ un segundo C ∣
∣ ∣
∣ re mi F ∣
∣ ∣
∣gramo h yo∣
∣ ∣
( j e yo + k h c + l b f ) - ( c e l + f h j + yo b k )
( a e i + d h c + g b f ) - ( c e g + f h a + yo b d )

∣ un j C ∣∣

∣ re k F ∣∣

∣gramo l yo∣
y= ∣ ∣ =
∣ un segundo C ∣
∣ ∣
∣ re mi F ∣∣

∣gramo h yo∣∣

( a k yo + d l c + g j f ) - ( c k g + f l a + yo j d )
( a e i + d h c + g b f ) - ( c e g + f h a + yo b d )

∣ un segundo j ∣∣

∣ re mi k ∣∣

∣gramo h l ∣∣
z = ∣∣ ∣=
∣ un segundo C ∣
∣ re mi F ∣∣

∣gramo h yo∣∣

(ae l +d hj +g bk )-(j e g+k ha+l bd )
( a e i + d h c + g b f ) - ( c e g + f h a + yo b d )

Otros sistemas

https://www.notion.so/4-1-Regla-de-Cramer-96b4d862a81f4b3a8f6eb1a880a17aec 3/4
4/2/2021 4.1 Regla de Cramer

Para sistemas más grande resulta muy costoso encontrar las ecuaciones necesarias,
por suerte bibliotecas como numpy permiten calcular la determinante de manera
rápida gracias a la función det :

 Search the docs ...

Array objects

Constants

Universal functions (ufunc)

Routines
linalg.det(a)
Array creation routines
Compute the determinant of an array
Con el cual es muy fácil aplicar la Reglar de Cramer a un sistema de cualquier tamaño.

https://www.notion.so/4-1-Regla-de-Cramer-96b4d862a81f4b3a8f6eb1a880a17aec 4/4
4/2/2021 4.2 Eliminación de Gauss

4.2 Eliminación de Gauss


Definición

Ejemplo

Convertir primera columna

Convertir matriz

Definición
La eliminación de Gauss, llamada así debido a Carl Friedrich Gauss, es un algoritmo
del álgebra lineal para determinar las soluciones de un sistema de ecuaciones lineales,
encontrar matrices e inversas. Un sistema de ecuaciones se resuelve por el método de
Gauss cuando se obtienen sus soluciones la reducción del sistema dado a otro
equivalente en el que cada ecuación tiene una incógnita menos que la anterior. El
método de Gauss transforma la matriz de coeficientes en una matriz triangular
superior.
Si bien se pueden aplicar muchas estrategias para la transformación no todas se
pueden programar fácilmente; una estrategia que es fácil de implementar en un
programa consiste en usar la primera fila para convertir todos los elementos de la
primera columna debajo de la diagonal principal en ceros; luego usar la segunda fila
para convertir todos los elementos de la segunda columna debajo de la diagonal
principal en ceros y así sucesivamente hasta convertir la matriz de coeficientes en una
matriz triangular superior, no hay que olvidar que las operaciones deben afectar al
vector de términos independientes para que el sistema se mantenga equivalente.

Ejemplo
Resuelva el siguiente sistema:




    6x  − 2y  + 2z  + 4t = 12
⎨ 
   12x  − 8y  + 6z  + 10t = 34
 



    3x − 13y  + 9z  + 3t = 27
    − 6x  + 4y  + z   − 18t = −38 

Matricialmente se pueden representar:

https://www.notion.so/4-2-Eliminaci-n-de-Gauss-43fefb8ac9e14b52952d71403bcc3a02 1/4
4/2/2021 4.2 Eliminación de Gauss

⎡6 −2 2 4 ⎤ ⎡x⎤ ⎡ 12 ⎤
⎢ 12 −8 6 10 ⎥ ∗ ⎢ y ⎥ = ⎢ 34 ⎥
⎢ 3 −13 9 3 ⎥ ⎢ z ⎥ ⎢ 27 ⎥
⎣−6 4 1 −18⎦ ⎣ t ⎦ ⎣−38⎦

Se suele usar la representación matricial extendía para trabajar mejor:

⎡6 −2 2 4 12 ⎤
⎢ 12 −8 6 10 34 ⎥
⎢ 3 −13 9 3 27 ⎥
⎣−6 4 1 −18 −38⎦

Convertir primera columna


El primer elemento a convertir es el 12, para ello se debe usar la primera columna, es
decir el 6; para convertir 12 en 0 es necesario 12 − 12, por lo tanto es necesario
encontrar el valor de 12 a partir de 6, para este cado no resulta muy complicado pues
2 ∗ 6 = 12; una manera eficiente el 2 es dividiendo el valor que se desea convertir a
12
cero entre el valor del elemento de la diagonal principal, es decir . Para convertir el
6
12 en 0 es necesario aplicar la operación a toda la fila:
12
f1 = f1 − 6
∗ f0 :
⎡6 −2 2 4 12 ⎤
⎢0 −4 2 2 10 ⎥
⎢ 3 −13 9 3 27 ⎥
⎣−6 4 1 −18 −38⎦

Convertir matriz
Es procedimiento se aplica con el siguiente elemento de la primera columna a
convertir, el 3, usando la primera fila:
3
f2 = f2 − 6
∗ f0 :
⎡6 −2 2 4 12 ⎤
⎢0 −4 2 2 10 ⎥
⎢ 0 −12 8 1 21 ⎥
⎣−6 4 1 −18 −38⎦

https://www.notion.so/4-2-Eliminaci-n-de-Gauss-43fefb8ac9e14b52952d71403bcc3a02 2/4
4/2/2021 4.2 Eliminación de Gauss

Finalmente con el −6:


−6
f3 = f3 − 6
∗ f0 :
⎡6 −2 2 4 12 ⎤
⎢0 −4 2 2 10 ⎥
⎢0 −12 8 1 21 ⎥
⎣0 2 3 −14 −26⎦
Una vez terminada la primera columna, se procede con se segunda columna usando la
segunda fila:
−12
f2 = f2 − −4
∗ f1 :
⎡6 −2 2 4 12 ⎤
⎢0 −4 2 2 10 ⎥
⎢0 0 2 −5 −9 ⎥
⎣0 2 3 −14 −26⎦
2
f3 = f3 − −4 ∗ f1 :
⎡6 −2 2 4 12 ⎤
⎢0 −4 2 2 10 ⎥
⎢0 0 2 −5 −9 ⎥
⎣0 0 4 −13 −21⎦
Se debe continuar hasta conseguir una matriz triangular superior:

⎡6 −2 2 4 12 ⎤
⎢0 −4 2 2 10 ⎥
⎢0 0 2 −5 −9⎥
⎣0 0 0 −3 −3⎦

Este sistema equivalente aun no tiene la solución, pero es mucho más fácil de resolver,
si se lo escribe algebraicamente:




6x − 2y + 2z + 4t = 12

−4y + 2z + 2t = 10



2z − 5t = −9
−3t = −3

Es fácil encontrar la última incógnita, realizar la sustitución de abajo hacia arriba:


t=1
Con el valor de t se puede reemplazar en la penúltima ecuación:

https://www.notion.so/4-2-Eliminaci-n-de-Gauss-43fefb8ac9e14b52952d71403bcc3a02 3/4
4/2/2021 4.2 Eliminación de Gauss

2z − 5(1) = −9 z = −2

Con t y z se puede calcular y :

−4y + 2(−2) + 2 ( 1 ) = 1 0 y=-3


Finalmente calcular X:

X=1

https://www.notion.so/4-2-Eliminaci-n-de-Gauss-43fefb8ac9e14b52952d71403bcc3a02 4/4
4/2/2021 4.3 Eliminación de Gauss-Jordan

4.3 Eliminación de Gauss-


Jordan
Definición

Resolución de sistemas

Inversa

Definición
La eliminación de Gauss, llamada así debido a Carl Friedrich Gauss y Wilhelm Jordan.
La eliminación de Gauss-Jordan continúa el proceso de transformación, iniciado por la
Eliminación de Gauss, hasta obtener una identidad matriz.

Resolución de sistemas
En la forma matricial extendida se debe colocar el vector de términos independientes
al lado de la matriz de coeficientes. La raíz del sistema se encuentra en el vector de
términos independientes, por lo tanto no es necesario realizar otro procedimiento.
Para aplicar correctamente el método es recomendable seguir los siguientes pasos:
1 . Dividir la fila entre el término de la diagonal principal.
2 . Convertir todos los elementos debajo de la diagonal principal en ceros.
3 . Convertir todos los elementos encima de la diagonal principal en ceros.

Inversa
Un sistema se pude escribir:

Ax = b

Resolverlo sería muy fácil despejando x:

https://www.notion.so/4-3-Eliminaci-n-de-Gauss-Jordan-1eddfd970e094d778e637a64ccba77d0 1/2
4/2/2021 4.3 Eliminación de Gauss-Jordan

b
x=
A

Lastimosamente la división no es posible en el álgebra lineal; pero es posible usar la


inversa para obtener una equivalencia a la división, por lo tanto un sistema se puede
resolver usando:

x = A−1 b

En la forma matricial extendida se debe colocar una identidad matriz al lado de la


matriz de coeficientes.

⎡a00 a01 a02 a03 1 0 0 0⎤


⎢a10 0 1 0 0⎥
⎢a20 0⎥
a11 a12 a13
0 0 1
⎣a30 1⎦
a21 a22 a23
a31 a32 a33 0 0 0

Se aplican el método como para la resolución de ecuaciones, al terminar la operación


se intenta la inversa donde estaba la matriz identidad:

⎡1 0 0 0 i00 i01 i02 i03 ⎤


⎢0 1 0 0 i13 ⎥
⎢0 i23 ⎥
i10 i11 i12
0 1 0
⎣0 i33 ⎦
i20 i21 i22
0 0 1 i30 i31 i32

https://www.notion.so/4-3-Eliminaci-n-de-Gauss-Jordan-1eddfd970e094d778e637a64ccba77d0 2/2
4/2/2021 4.4 Descomposición LU

4.4 Descomposición LU
Definición

Variantes

Doolittle

Ejemplo

Crout y Cholesky

Definición
La Descomposición LU consiste en descomponer la matriz de coeficientes del sistema
UN en las matrices L y U :

UN = L U

Donde:

• L es una matriz triangular inferior (inferior).


• U es una matriz triangular superior (superior).
El sistema se puede escribir como:

L U x = segundo

Se hace un cambio de variable:

z=Ux L z = segundo

Estafa L y segundo se puede calcular fácilmente el vector z .


El cambio de variable se puede escribir comor:

Ux=z

Estafa U y z finalmente se calcula X.

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 1/7
4/2/2021 4.4 Descomposición LU

Variantes
• Doolittle : Los elementos de la diagonal principal deL hijo 1. Los elementos de la
diagonal principal deU pueden ser cualquier número.

• Crout : Los elementos de la diagonal principal deL pueden ser cualquier número.
Los elementos de la diagonal principal de U son 1.

• Cholesky: Los elementos de la diagonal principal de L pueden ser cualquier


número. U = LT . Solo puede resolver sistemas simétricos.

Doolittle
En vista que L es una matriz triangular inferior y los elementos de su diagonal
principal son 1; y U una matriz triangular superior la cantidad de elementos que se
debe calcular de cada matriz se reducen significativamente:

⎡1    0    0⎤ ⎡u11 u12 u13 ⎤


L = ⎢ l21 1    0⎥ U = ⎢ 0    u23 ⎥
⎣ l31 1⎦ ⎣ 0    u33 ⎦
u22
l32 0   

Multiplicando matricialmente:

⎡ u11      u12            u13 ⎤


LU = ⎢l21 u11 l21 u12 + u22      l21 u13 + u23 ⎥
⎣l31 u11 l31 u12 + l32 u22 l31 u13 + l32 u23 + u33 ⎦

Como A = LU entonces:

⎡a11 a12 a13 ⎤


⎢a21 a22 a23 ⎥ =
⎣a31 a32 a33 ⎦
⎡ u11      u12            u13 ⎤
⎢l21 u11 l21 u12 + u22      l21 u13 + u23 ⎥
⎣l31 u11 l31 u12 + l32 u22 l31 u13 + l32 u23 + u33 ⎦

Se tienen nueve ecuaciones, para iniciar se toman las ecuaciones de los elementos de
la diagonal principal:

• a11 = u11

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 2/7
4/2/2021 4.4 Descomposición LU

• a22 = l21 u12 + u22


• a33 = l31 u13 + l32 u23 + u33
Estas ecuaciones no son útiles escritas de esa manera, pues todos los elementos de A
son conocidos, es necesario despejar de cada una de ellas una variable desconocida,
hay que tener cuidad de despejar un elemento que sea fácil de identificar en cada
ecuación, se busca un patrón es decir una regla que se aplica en cada ecuación y guía
que varia despejar. En la primera ecuación solo se puede despejar el elemento de la
diagonal principal u11 , por lo tanto en las demás ecuaciones se despejará el elemento
de la diagonal princpial uii , de no ser posible se busca otro patrón.
Las ecuaciones resultantes son:

• u11 = a11
• u22 = a22 − l21 u12
• u33 = a33 − l31 u13 − l32 u23
Ahora es necesario encontrar una regla que permita calcular uii sin importar el
tamaño del sistema.
En primer lugar se puede ver que el primer elemento es aii y a continuación esta una
serie de restas sucesivas, las restas se puede cambiar por una sumatoria de la siguente
manera:

• u33 = a33 − (l31 u13 + l32 u23 )


Se puede ver que los términos de la sumatoria depende de i, cuando i = 1 la
sumatoria no tiene términos, cuando i = 2 la sumatoria tiene un término, en general
la sumatoria tiene i − 1 términos.
Se puede ver que el primer índice de l y el segundo índice de u son iguales a i.
Finalmente el segundo índice de l y el primer índice de u son iguales al número de
término, es decir inician el el 1 y van incrementando de 1 en 1, la ecuación para
calcular uii es:

i−1
uii = aii − ∑ lik uki
k=1

A continuación se toman los elementos sobre la diagonal principal:

• a12 = u12
• a13 = u13
• a23 = l21 u13 + u23

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 3/7
4/2/2021 4.4 Descomposición LU

En este caso el criterio es despejar uij :

• u12 = a12
• u13 = a13
• u23 = a23 − l21 u13
Aplicando el mismo análisis del caso anterior se obtiene:

i−1
uij = aij − ∑ lik ukj
k=1

Finalmente se usan las ecuaciones restantes:

• a21 = u11 l21


• a31 = u11 l31
• a32 = l31 u12 + l32 u22
El criterio es despejar lij que está siendo multiplicado por uii :

• l21 = a21
u11
a31
• l31 =
u11
• l32 =
a32 − l31 u12
u22
Se obtiene la siguiente ecuación:

aij − ∑j−1
k=1 lik ukj
lij =
ujj

Con estas tres ecuaciones es posible calcular todos los elementos de las matrices L y
U.
El método se debe aplicar fila por fila, es decir, primero se encuentra el elemento u11 ,
luego el elemento u12 y así hasta terminar la fila, en la segunda fila se empieza por
l21 , luego con u22 . Se sigue así hasta encontrar todos los elementos.

Ejemplo
Resolver:

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 4/7
4/2/2021 4.4 Descomposición LU




6x  − 2y  + 2z  + 4t = 12

12x  − 8y  + 6z  + 10t = 34



3x − 13y  + 9z  + 3t = 27
−6x  + 4y  + z   − 18t = −38

Matricialmente:

⎡ 6  −2 2   4 ⎤ ⎡x⎤ ⎡ 12 ⎤


⎢ 12   − 8 6  10 ⎥ ⎢ y ⎥ ⎢ 34 ⎥
⎢ 3 −13 9   3 ⎥ ⎢ z ⎥ ⎢ 27 ⎥
∗ =
⎣−6   4 1 −18⎦ ⎣ t ⎦ ⎣−38⎦

Calcular L y U :

⎡1 0 0 0⎤ ⎡ ?   ?   ?   ?⎤


L=⎢
0⎥
U =⎢
? 1 0  0   ?   ?   ?⎥
⎢? ? 1 0⎥ ⎢ 0   0   ?   ?⎥
⎣? ? ? 1⎦ ⎣ 0   0   0   ?⎦

En la primera fila de L todos los elementos son conocidos por lo tanto se pasa a la
primera final de U , donde el primer elemento a calcular es u11 , se debe usar la
ecuación para uii :

⎡ 1   0   0   0⎤ ⎡6 ? ? ?⎤


L=⎢
  0⎥
U =⎢
 ?   1   0 0 ? ? ?⎥
⎢ ?   ?   1   0⎥ ⎢0 0 ? ?⎥
⎣ ?   ?   ?   1⎦ ⎣0 0 0 ?⎦

A continuación se calcula u12 con la ecuación para uij :

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 5/7
4/2/2021 4.4 Descomposición LU

⎡ 1   0   0   0⎤ ⎡6 −2 ? ?⎤


L=⎢
  0⎥
U =⎢
 ?   1   0 0 ? ? ?⎥
⎢ ?   ?   1   0⎥ ⎢0 0 ? ?⎥
⎣ ?   ?   ?   1⎦ ⎣0 0 0 ?⎦

Luego de calcular todos los elementos se obtiene:

⎡1 0 0 0⎤ ⎡6 −2 2 4 ⎤
L=⎢
0⎥
U =⎢
2 1 0 0 −4 2 2 ⎥
⎢ 0.5 3 1 0⎥ ⎢0 0 2 −5⎥
⎣−1 −0.5 2 1⎦ ⎣0 0 0 −3⎦

A continuación se calcula z :

Lz = b ⎡  1   0   0   0⎤


⎢  2   1   0   0⎥
⎢ 0.5   3   1   0⎥ ∗
⎣−1 −0.5 2   1⎦

⎡z1 ⎤ ⎡ 12 ⎤
⎢z2 ⎥ = ⎢ 34 ⎥
⎢z3 ⎥ ⎢ 27 ⎥
⎣z4 ⎦ ⎣−38⎦

Se puede resolver fácilmente haciendo sustituciones de arriba hacia abajo:

⎡z1 ⎤ ⎡1 2⎤
⎢z2 ⎥ = ⎢1 0⎥
⎢z3 ⎥ ⎢ - 9 ⎥
⎣z4 ⎦ ⎣ - 3 ⎦

Finalmente se calcula X:

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 6/7
4/2/2021 4.4 Descomposición LU

Ux=z ⎡6 - 2 2 4 ⎤ ⎡X⎤
⎢0 - 4 2 2 ⎥ ∗ ⎢ y ⎥ =
⎢0 0 2 - 5⎥ ⎢ z ⎥
⎣0 0 0 - 3⎦ ⎣ t ⎦

⎡1 2⎤
⎢1 0⎥
⎢ - 9⎥
⎣ - 3⎦

Aplicando sustituciones de abajo hacia arriba:

⎡X⎤ ⎡ 1 ⎤
⎢ y ⎥ = ⎢- 3⎥
⎢ z ⎥ ⎢- 2⎥
⎣t⎦ ⎣1⎦

Crout y Cholesky
La manera de deducir las ecuaciones para Crout y Cholesky es simular, pero al
cambiar las matrices iniciales se obtendrán ecuaciones diferentes.

https://www.notion.so/4-4-Descomposici-n-LU-3baf8e4e6c1e4d0eb9b2b8bcdf83326f 7/7
4/2/2021 4.5 Método de Jacobi

4.5 Método de Jacobi


Introducción

Definición

Introducción

Es un método iterativo, usado para resolver sistemas de ecuaciones lineales. El


método toma su nombre del matemático alemán Carl Gustav Jakob Jacobi. El método
de Jacobi consiste en usar fórmulas como iteración de punto fijo. Solo sirve para
matrices con diagonal dominante .
Una matriz tiene diagonal dominante cuando se cumple que para cada final la suma
de los valores absolutos de los elemento que no pertenecen a la diagonal principal es
mayor al absoluto del elemento de la diagonal principal:

norte
∣ unyo yo ∣ ≥ ∑ ∣ unyo j ∣
j = 1 ; yo 
=j

Definición
Al ser un método iterativo necesita valores iniciales para cada variable, los cuales se
representan en el vector X0 , a partir de estos valores se calcula la raíz:

X1 = M x0 + norte

Donde:

• METRO = - D- 1 C
• norte = re- 1 segundo
• UN = C + re
• C , todos los elementos de la diagonal principal son cero.
• re, todos los elementos que no pertenecen a la diagonal principal son cero.

https://www.notion.so/4-5-M-todo-de-Jacobi-1af3be7fffa240f3b32f9816338ff9a4 1/2
4/2/2021 4.5 Método de Jacobi

Si los valores de X1 no satisfacen al sistema se repite el procedimiento usando X1


como valores de partida.

https://www.notion.so/4-5-M-todo-de-Jacobi-1af3be7fffa240f3b32f9816338ff9a4 2/2
4/2/2021 5 Introducción.ipynb - Colaboratory

Sistemas de ecuaciones no lineales


Es un sistema de ecuaciones donde al menos una de las ecuaciones no es una ecuación lineal.

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline

fig, ax = plt.subplots()

x = np.linspace(0, 3, 1000)
y = np.sqrt(4+x**2)
ax.plot(x, y, linewidth=3, c='r', label='f(x)')

y = 6 / x
ax.plot(x, y, linewidth=3, c='g', label='g(x)')

plt.xlabel("x")
plt.ylabel("y")
ax.legend();
ax.set_ylim(-10, 10)

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:12: RuntimeWarning: d
if sys.path[0] == '':
(-10.0, 10.0)

Método de Newton-Raphson
Este método se estudio en el tema 2. Reponde a la siguente fórmula:
f (x 0 )
x1 = x0 −

f (x 0 )

https://colab.research.google.com/drive/1anr1BXw6gYFvtJtNoeJCK2gAj0qU_iYw 1/4
4/2/2021 5 Introducción.ipynb - Colaboratory

Se puede aplicar la misma ecuación pero con el cuidado de que ahora no se trata de estalares
sino de vectores.

La primera derivada de una función vectorial se conoce como Jacobiano (J(x) ), por lo tanto la
ecuación que expresada de la siguente manera:
f (x 0 )
x1 = x0 −
J(x 0 )

f (x 0 ) es un vector fruto de evaluar el la función vectorial f con el los valores del vector x0 ,
J(x 0 ) es una matriz cuadrada. No es posible realizar la división entre un vector y una matriz, sin
embargo es posible aplicar la inversa como equivalencia de la división:
f (x 0 )
−1
= J(x 0 ) f (x 0 )
J(x 0 )

Por lo tanto la ecuación de Newton-Raphson para la resuloción de sistemas de ecuaciones no


lineales queda de la siguiente forma:
−1
x 1 = x 0 − J(x 0 ) f (x 0 )

Ejemplo
Resuelva el siguiente sistema de ecuaciones:
2 2
x −y = 4
{
xy = 6

Como se puede ver las dos ecuaciones son no lineales, por lo tanto todo el sistema se considera
no lineal.

Para expresar vectorialmente es necesario igualar a 0 cada ecuación de la siguente manera:


2 2
x −y −4
f (x) = [ ]
xy − 6

Valores iniciales
x = 1

y = 2

El orden es un factor muy importante para el ejemplo x ocupará la primera posición del vector y
y la segunda:
x
x0 = [ ]
y

Por lo tanto el vector x0 queda de la siguiente manera:


1
x0 = [ ]
2

https://colab.research.google.com/drive/1anr1BXw6gYFvtJtNoeJCK2gAj0qU_iYw 2/4
4/2/2021 5 Introducción.ipynb - Colaboratory

A partir de ahora y hasta el nal de ejercicio se debe respetar dicho orden.

Jacobiano
El Jacobiano se calcula a partir de las derivadas parciales de todas las funciones respecto a
todas las incógnitas:
∂ f1 ∂ f1 ∂ f1
⎡ ⎤

⎢ ∂ x1 ∂ x2 ∂ xn ⎥
⎢ ⎥
⎢ ∂ f2 ∂ f2 ∂ f2 ⎥
⎢ … ⎥
⎢ ∂x ∂ x2 ∂ xn ⎥
J(x) = ⎢ 1 ⎥
⎢ ⎥
⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋮ ⎥
⎢ ⎥
⎢ ∂f ∂ fn ∂f ⎥
n n
⎣ … ⎦
∂ x1 ∂ x2 ∂ xn

Por lo tanto J(x) para el ejercicio es:


2x −2y
J(x) = [ ]
y x

Iteración 1:
1
x0 = [ ]
2

2 2
1 −2 −4 −7
f (x 0 ) = [ ] = [ ]
1 ∗ 2 −6 −4

2 ∗ 1 −2 ∗ 2 2 −4
J(x 0 ) = [ ] = [ ]
2 1 2 1

0.1 0.4
−1
J (x 0 ) = [ ]
−0.2 0.2

Calcular x1 aplicando la fórmula de Newton-Raphson:


1 0.1 0.4 −7 3.3
x1 = [ ] −[ ] ∗ [ ] = [ ]
2 −0.2 0.2 −4 1.4

from sympy import Matrix


from sympy.abc import x, y

x_0 = Matrix([1, 2])

incognitas = Matrix([x, y]) #Se mantiene el mismo orden, primero x, luego y.


funciones = Matrix([x**2 - y**2 - 4, x*y - 6])

fx0 = funciones.subs({})
jacobiano = funciones.jacobian(incognitas)

https://colab.research.google.com/drive/1anr1BXw6gYFvtJtNoeJCK2gAj0qU_iYw 3/4
4/2/2021 5 Introducción.ipynb - Colaboratory

print(jacobiano)
print(jacobiano.subs({x:1, y:2}))

Matrix([[2*x, -2*y], [y, x]])


Matrix([[2, -4], [2, 1]])

Repetir el proceso hasta que f (x0 ) ≅ 0

https://colab.research.google.com/drive/1anr1BXw6gYFvtJtNoeJCK2gAj0qU_iYw 4/4
4/2/2021 6.1 Introducción.ipynb - Colaboratory

Introducción
Es común que los datos se den como valores discretos a lo largo de un fenómeno continuo. Sin
embargo, se requiere la estimación de un punto entre valores discretos.

A partir de un conjunto de datos, puede ser una tabla, fruto de observaciones teóricas o
empíricas es necesario realizar cálculos o tomar decisiones, para ello es frecuente calcular una
curva, a este proceso se llama ajuste.

Considere los siguientes pares de datos:


x y

2.4 2.9
1.5 2.1

1.8 1.8
2.9 2.7

1.2 1.5
3 2.9

¿Cuánto vale y si x = 2 ?

Se puede ver claramente que no se puede responder directamente a la pregunta porque en los
datos no existe el par donde x = 2 .

Para entender mejora el problema resulta útil gra car los datos.

import matplotlib as mpl


import matplotlib.pyplot as plt
%matplotlib inline

x = [2.4, 1.5, 1.8, 2.9, 1.2, 3]


y = [2.9, 2.1, 1.8, 2.7, 1.5, 2.9]
plt.scatter(x, y, s=40, c='b')

plt.xlabel("x")
plt.ylabel("y")

https://colab.research.google.com/drive/1v9A_sHPCnD43yYoQT7OYbL5fLRMwqVkJ 1/3
4/2/2021 6.1 Introducción.ipynb - Colaboratory

Text(0, 0.5, 'y')

¿Qué curvas se pueden calcular?

Se puede ver que existe una tendencia donde a mayor x mayor y ; existen dos formas de encarar
este problema:

1. Calcular una curva que pase cerca de todos los datos (regresión) (curva roja).
2. Calcular una curva que pase exactamente por todos los datos (interpolación) (curva
verde).

import numpy as np
fig, ax = plt.subplots()

x = [2.4, 1.5, 1.8, 2.9, 1.2, 3]


y = [2.9, 2.1, 1.8, 2.7, 1.5, 2.9]
ax.scatter(x, y, s=40, c='b')

x = np.linspace(1.2, 3, 1000)
y = 0.76885441527447 + 0.72553699284009 * x
ax.plot(x, y, linewidth=3, c='r', label='Regresión')

y = 6.65895 * x ** 5 - 71.4277 * x ** 4 + 298.874 * x ** 3 - 608.465 * x ** 2 + 602.348


ax.plot(x, y, linewidth=3, c='g', label='Interpolación')

plt.xlabel("x")
plt.ylabel("y")
ax.legend();

Existen diferentes métododos tanto para la regresión como para la interpolación, los cuales
serán estudiados con detalle en el presente capítulo.

https://colab.research.google.com/drive/1v9A_sHPCnD43yYoQT7OYbL5fLRMwqVkJ 2/3
4/2/2021 6.2 Regresión.ipynb - Colaboratory

Regresión
El término regresión fue introducido por Francis Galton en su libro Natural inheritance (1889) y
fue con rmado por su amigo Karl Pearson. Su trabajo se centró en la descripción de los rasgos
fıś icos de los descendientes (variable A) a partir de los de sus padres (variable B). Estudiando la
altura de padres e hijos a partir de más de mil registros de grupos familiares, se llegó a la
conclusión de que los padres muy altos tenıá n una tendencia a tener hijos que heredaban parte
de esta altura, pero que revelaban también una tendencia a regresar a la media. Galton
generalizó esta tendencia bajo la ley de la regresión universal: Cada peculiaridad en un hombre
es compartida por sus descendientes, pero en media, en un grado menor.

Hoy en día el sentido de regresión es el de predicción de una medida basándonos en el


conocimiento de otra.

Para aplicar la regresión es necesario estudiar la naturaleza de los datos, cuando los datos
tienen errores sustanciales, es decir no son exactos, con frecuencia los datos experimentales
son de este tipo.

Problema

Se realizó un estudio de ingeniería del transporte para determinar el diseño apropiado de carriles
para bicicletas. Se recabaron datos del ancho de los carriles y la distancia promedio entre las
bicicletas y los autos en circulación. Los datos de 9 calles son:
N° Calle Distancia entre bicicletas y autos (m) Ancho del carril (m)

1 Junín 2.4 2.9


2 Ayacucho 1.5 2.1
3 Pichincha 2.4 2.3
4 Calama 1.8 2.1

5 Pedro Mendoza 1.8 1.8

6 Estados Unidos 2.9 2.7


7 Cúcuta 1.2 1.5

8 Tres pinos 3 2.9

9 Pecosa 1.2 1.5

Si se considera que la distancia promedio mínima de seguridad entre las bicicletas y los autos
en circulación es de 2 m, determine el ancho de carril mínimo correspondiente.

En este problema intervienen dos variables:

Independiente, de la cual se conoce la información (la distancia promedio mínima de


seguridad entre las bicicletas y los autos en circulación es de 2 m).
Dependiente, de la se quiere calcular un valor (el ancho de carril mínimo correspondiente).

https://colab.research.google.com/drive/1wCVOcvv_hgonbQHmURu7hnIS0riAR_lE 1/3
4/2/2021 6.2 Regresión.ipynb - Colaboratory

Se puede ver claramente que no se puede responder directamente a la pregunta, porque existen
muchos datos diferentes y además en los datos recopilados no existe en valor del ancho del
carril cuando la distancia entre bicicletas y autos es de 2 m.

import matplotlib as mpl


import matplotlib.pyplot as plt
%matplotlib inline

distancia = [2.4, 1.5, 2.4, 1.8, 1.8, 2.9, 1.2, 3, 1.2]


ancho = [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]
plt.scatter(distancia, ancho, s=40, c='b')

plt.xlabel("Distancia entre bicicletas y autos (m)")


plt.ylabel("Ancho del carril (m)")

Text(0, 0.5, 'Ancho de la pista (m)')

Para ver la naturaleza de los datos primero se debe entender el signi cado de las variables que
se están usando: Distancia entre bicicletas y autos y Ancho del carril, la relación entre estas dos
variables no es exacta debido a que las calles han cambiado mucho a lo largo del tiempo,
agregando los carriles para bicicletas de manera improvisa en algunos casos, por lo tanto las
calles que tienen carriles para bicicleta no cumplen con las mismas características entre sí.

La inexactitud de las variables se re eja en los datos recopilados, se pueden analizar los
siguientes pares de calles:

1 (2.4, 2.9) y 3 (2.4, 2.3)


4 (1.8, 2.1) y 5 (1.8, 1.8)
7 (1.2, 1.5) y 9 (1.2, 1.5)

Entre sí comparten la misma distancia entre bicicletas y autos, pero tiene diferentes anchos de
carril. Por otro lado las calles 7 y 9 son iguales, pero al tratarse de calles diferentes se deben
tratar con datos diferentes por lo que el número de datos se incrementa.

https://colab.research.google.com/drive/1wCVOcvv_hgonbQHmURu7hnIS0riAR_lE 2/3
4/2/2021 6.2 Regresión.ipynb - Colaboratory

Generalmente la regresión se aplica a grupos grandes de datos, los datos son inexactos,
re ejado en la duplicidad de datos y en valores diferentes de la variable dependiente a un valor
de la variable independiente.

Método de Mínimos cuadrados


Mıń imos cuadrados es una técnica de análisis numérico enmarcada dentro de la optimización
matemática, en la que, dados un conjunto de pares ordenados: variable independiente, variable
dependiente, y una familia de funciones, se intenta encontrar la función continua, dentro de
dicha familia, que mejor se aproxime a los datos (un ”mejor ajuste”), de acuerdo con el criterio de
mı́nimo error cuadrático.

El método tienes diferente variantes que perminten encontrar diferentes tipos de curva que se
estudiaran en el presenten capítulo.

https://colab.research.google.com/drive/1wCVOcvv_hgonbQHmURu7hnIS0riAR_lE 3/3
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

Regresión lineal
El proósito del Método de Mínimos Cuadrados para la regresión lineal consite encontrar una
línea recta que pase lo más cerca posible de todos los datos observados, recordando el
problema del diseño de los carriles para bicicletas se tienen los siguientes datos:
N° Calle Distancia entre bicicletas y autos (m) Ancho del carril (m)

1 Junín 2.4 2.9


2 Ayacucho 1.5 2.1
3 Pichincha 2.4 2.3

4 Calama 1.8 2.1


5 Pedro Mendoza 1.8 1.8

6 Estados Unidos 2.9 2.7


7 Cúcuta 1.2 1.5

8 Tres pinos 3 2.9


9 Pecosa 1.2 1.5

import matplotlib as mpl


import matplotlib.pyplot as plt
%matplotlib inline

distancia = [2.4, 1.5, 2.4, 1.8, 1.8, 2.9, 1.2, 3, 1.2]


ancho = [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]
plt.scatter(distancia, ancho, s=40, c='b')

plt.xlabel("Distancia entre bicicletas y autos (m)")


plt.ylabel("Ancho del carril (m)")

Una recta esta de nda por la ecuación


y = a0 + a1 x

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 1/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

Es posible obtener un número in nito de rectas que pasen cerca de estos puntos, dependerá de
los valores
import queassenp
numpy asignen a a0 y a1

distancia = [2.4, 1.5, 2.4, 1.8, 1.8, 2.9, 1.2, 3, 1.2]


ancho = [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]
plt.scatter(distancia, ancho, s=40, c='b')

x = np.linspace(1.2, 3, 1000)
a_0 = 0.8
a_1 = 0.7
y = a_0 + a_1 * x
plt.plot(x, y, linewidth=3, c='r')

a_0 = 3
a_1 = -0.3
y = a_0 + a_1 * x
plt.plot(x, y, linewidth=3, c='m')

a_0 = 1.5
a_1 = 0.3
y = a_0 + a_1 * x
plt.plot(x, y, linewidth=3, c='c')

plt.xlabel("Distancia entre bicicletas y autos (m)")


plt.ylabel("Ancho del carril (m)")

Como se puede ver es difícil que la recta pase por alguno de los datos, dentro de esta familia de
ecuaciones nesesario encontrar la recta que pase lo más cerca posible de todos los datos.

Para determinar el grado de cercania de la recta con los puntos se va comparar el valor de la
función contra el valor observado. Analizando la recta y = 0.8 + 0.7x (a0 ,
= 0.8 a1 = 0.7 )

a_0 = 0.8
a_1 = 0.7

distancia = [2.4, 1.5, 2.4, 1.8, 1.8, 2.9, 1.2, 3, 1.2]


ancho = [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]
https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 2/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory
ancho [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]

for index in range(len(distancia)):


print('-' * 5)
print('Distancia:', distancia[index])
print('Ancho observado:', ancho[index])
ancho_calculado = a_0 + a_1 * distancia[index]
print('Ancho calculado:', ancho_calculado)
print('Error:', ancho[index] - ancho_calculado)

-----
Distancia: 2.4
Ancho observado: 2.9
Ancho calculado: 2.48
Error: 0.41999999999999993
-----
Distancia: 1.5
Ancho observado: 2.1
Ancho calculado: 1.8499999999999999
Error: 0.2500000000000002
-----
Distancia: 2.4
Ancho observado: 2.3
Ancho calculado: 2.48
Error: -0.18000000000000016
-----
Distancia: 1.8
Ancho observado: 2.1
Ancho calculado: 2.06
Error: 0.040000000000000036
-----
Distancia: 1.8
Ancho observado: 1.8
Ancho calculado: 2.06
Error: -0.26
-----
Distancia: 2.9
Ancho observado: 2.7
Ancho calculado: 2.83
Error: -0.1299999999999999
-----
Distancia: 1.2
Ancho observado: 1.5
Ancho calculado: 1.6400000000000001
Error: -0.14000000000000012
-----
Distancia: 3
Ancho observado: 2.9
Ancho calculado: 2.8999999999999995
Error: 4.440892098500626e-16
-----
Distancia: 1.2
Ancho observado: 1.5
Ancho calculado: 1.6400000000000001
Error: -0.14000000000000012

Para que los datos calculados sean iguales a los datos observados es necesario agregar el error
como una variable de la ecuación de la recta, quedando la ecuación de la siguiente manera:
https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 3/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

y = a0 + a1 x + e

Donde:

y es la observación de la variable dependiente.


a0 es la ordenada en el origen de la línea recta.
a1 es la pendiente de la línea recta.
x es la observación de la variable independiente.
e es el error.

Para validar la recta (a0 , a1 ) es necesario despejar el error:

e = y − a0 − a1 x

Se calcula el error para cada datos y luego se suman todos los errores:

∑ e i = ∑(yi − a0 − a1 x i )

¿Cuál de las rectas anteriores tiene menor error?

fig, ax = plt.subplots()

plt.scatter(distancia, ancho, s=40, c='b')

print('Recta 1')
a_0 = 0.8
a_1 = 0.7
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error
print('Error:', sum_error)
ax.plot(np.linspace(1.2, 3, 1000), a_0 + a_1 * np.linspace(1.2, 3, 1000), linewidth=3,

print('Recta 2')
a_0 = 3
a_1 = -0.3
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error
print('Error:', sum_error)
ax.plot(np.linspace(1.2, 3, 1000), a_0 + a_1 * np.linspace(1.2, 3, 1000), linewidth=3,

print('Recta 3')
a 0 = 1 5
https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 4/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory
a_0 = 1.5
a_1 = 0.3
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error
print('Error:', sum_error)
ax.plot(np.linspace(1.2, 3, 1000), a_0 + a_1 * np.linspace(1.2, 3, 1000), linewidth=3,

plt.xlabel("Distancia entre bicicletas y autos (m)")


plt.ylabel("Ancho del carril (m)")
ax.legend();

Solo sumar los errores tiene un problema, los errores son positivos y negativos, por lo que es
posible que los errores negativos compensen a los positivos distorcionando el resultado.

Para evitar la compensación de los negativos se puede sumar el valor absoluto de los errores:

$$\sum |e_i|=\sum |y_i-a_0-a_1x_i|$$

print('Recta 1')
a_0 = 0.8
a_1 = 0.7
print('a_0:', a_0)
print('a 1:', a 1)
https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 5/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory
p ( _ , _ )
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += abs(error)
print('Error:', sum_error)

print('Recta 2')
a_0 = 3
a_1 = -0.3
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += abs(error)
print('Error:', sum_error)

print('Recta 3')
a_0 = 1.5
a_1 = 0.3
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += abs(error)
print('Error:', sum_error)

Recta 1
a_0: 0.8
a_1: 0.7
Error: 1.56
Recta 2
a_0: 3
a_1: -0.3
Error: 5.76
Recta 3
a_0: 1.5
a_1: 0.3
Error: 2.76

El Método de Mínimos Cuadrado es una técnica de análisis numérico enmarcada dentro de la


optimización matemática, según el criterio del mıń imo error cuadrático; signi ca que es
necesario derivar en algún momento, para facilitar el trabajo de derivación y no tener los
problemas de errores negativos en lugar de sumar los valores absolutos de los errores se suman
los cuadrados de los mismos:

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 6/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

$$\sum e_i^2=\sum (y_i-a_0-a_1x_i)^2$$$$\sum e_i^2=\sum (y_i-a_0-a_1x_i)^2$$

print('Recta 1')
a_0 = 0.8
a_1 = 0.7
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error ** 2
print('Error:', sum_error)

print('Recta 2')
a_0 = 3
a_1 = -0.3
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error ** 2
print('Error:', sum_error)

print('Recta 3')
a_0 = 1.5
a_1 = 0.3
print('a_0:', a_0)
print('a_1:', a_1)
sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error ** 2
print('Error:', sum_error)

Recta 1
a_0: 0.8
a_1: 0.7
Error: 0.39659999999999984
Recta 2
a_0: 3
a_1: -0.3
Error: 4.7166
Recta 3
a_0: 1.5
a_1: 0.3
Error: 1.1705999999999999

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 7/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

A la sumatoria de los errores se la conoce como Discrepancia entre datos y esta representada
por:

$$S_R=\sum e_i^2$$$$S_R=\sum e_i^2$$

$S_R$$S_R$ depende de $a_0$$a_0$ y $a_1$$a_1$, si alguna de estas variables cambia


tambíen lo hará $S_R$$S_R$, por lo tanto para minimizar el modelo es necesario derivar
parcialmente $S_R$$S_R$ respecto de $a_0$$a_0$ y $a_1$$a_1$

$$\dfrac{\partial S_R}{\partial a_0}=-2\sum (y_i-a_0-a_1x_i)$$$$\dfrac{\partial S_R}{\partial


a_0}=-2\sum (y_i-a_0-a_1x_i)$$

$$\dfrac{\partial S_R}{\partial a_1}=-2\sum \left[(y_i-a_0-a_1x_i)x_i\right]$$$$\dfrac{\partial


S_R}{\partial a_1}=-2\sum \left[(y_i-a_0-a_1x_i)x_i\right]$$

En vista que se esta minimizando $\dfrac{\partial S_R}{\partial a_0}=0$$\dfrac{\partial S_R}


{\partial a_0}=0$ y $\dfrac{\partial S_R}{\partial a_1}=0$$\dfrac{\partial S_R}{\partial a_1}=0$,
quedando las ecuaciones:

$$0=-2\sum (y_i-a_0-a_1x_i)$$$$0=-2\sum (y_i-a_0-a_1x_i)$$

$$0=-2\sum \left[(y_i-a_0-a_1x_i)x_i\right]$$$$0=-2\sum \left[(y_i-a_0-a_1x_i)x_i\right]$$

Llevando el -2 a dividir:

$$0=\sum (y_i-a_0-a_1x_i)$$$$0=\sum (y_i-a_0-a_1x_i)$$

$$0=\sum \left[(y_i-a_0-a_1x_i)x_i\right]$$$$0=\sum \left[(y_i-a_0-a_1x_i)x_i\right]$$

La sumatoria se puede distribuir en el parátensis:

$$0=\sum y_i-\sum a_0 - \sum a_1x_i$$$$0=\sum y_i-\sum a_0 - \sum a_1x_i$$

$$0=\sum y_ix_i - \sum a_0x_i - \sum a_1x_i^2$$$$0=\sum y_ix_i - \sum a_0x_i - \sum
a_1x_i^2$$

Se sabe que $\sum a_0 = na_0$$\sum a_0 = na_0$, donde $n$$n$ es el número de datos:

$$0=\sum y_i- na_0 - \sum a_1x_i$$$$0=\sum y_i- na_0 - \sum a_1x_i$$

$$0=\sum y_ix_i - \sum a_0x_i - \sum a_1x_i^2$$$$0=\sum y_ix_i - \sum a_0x_i - \sum
a_1x_i^2$$

El valor de $a_0$$a_0$ es el mismo por lo tanto se puede factorizar:

$$0=\sum y_i- na_0 - \sum a_1x_i$$$$0=\sum y_i- na_0 - \sum a_1x_i$$

$$0=\sum y_ix_i - (\sum x_i)a_0 - \sum a_1x_i^2$$$$0=\sum y_ix_i - (\sum x_i)a_0 - \sum
a_1x_i^2$$

El valor de $a_1$$a_1$ es el mismo por lo tanto se puede factorizar:

$$0=\sum y_i- na_0 - (\sum x_i)a_1$$$$0=\sum y_i- na_0 - (\sum x_i)a_1$$

$$0=\sum y_ix_i - (\sum x_i)a_0 - (\sum x_i^2)a_1$$$$0=\sum y_ix_i - (\sum x_i)a_0 - (\sum
x_i^2)a_1$$

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 8/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

Los términos que contiene $a_0$$a_0$ y $a_1$$a_1$ se llevan al miembro derecho por son
términos de las incognitas, las incógnicas son $a_0$$a_0$ y $a_1$$a_1$:

$$na_0 + (\sum x_i)a_1=\sum y_i$$$$na_0 + (\sum x_i)a_1=\sum y_i$$

$$(\sum x_i)a_0 + (\sum x_i^2)a_1=\sum y_ix_i$$$$(\sum x_i)a_0 + (\sum x_i^2)a_1=\sum


y_ix_i$$

Para resolver este problema se usan las siguientes ecuaciones:

$$a_1=\dfrac{n\sum y_ix_i - \sum x_i \sum y_i}{n\sum x_i^2-(\sum


x_i)^2}$$$$a_1=\dfrac{n\sum y_ix_i - \sum x_i \sum y_i}{n\sum x_i^2-(\sum x_i)^2}$$

$$a_0=\overline{y}-a_1\overline{x}$$$$a_0=\overline{y}-a_1\overline{x}$$

$$\overline{x}=\frac{\sum x_i}{n}$$$$\overline{x}=\frac{\sum x_i}{n}$$

$$\overline{y}=\frac{\sum y_i}{n}$$$$\overline{y}=\frac{\sum y_i}{n}$$

Aplicación
Para aplicar este método es necesario calcular: $\sum x_i$$\sum x_i$, $\sum x_i^2$$\sum
x_i^2$, $\sum y_ix_i$$\sum y_ix_i$, $\sum y_i$$\sum y_i$

A continuación se resolverá problema del diseño de los carriles:

x = distancia
y = ancho
sum_x = 0
sum_x2 = 0
sum_yx = 0
sum_y = 0
n = len(distancia)
for index in range(n):
sum_x += x[index]
sum_x2 += x[index] ** 2
sum_yx += y[index] * x[index]
sum_y += y[index]
media_x = sum_x / n
media_y = sum_y / n
a_1 = (n * sum_yx - sum_x * sum_y) / (n * sum_x2 - sum_x ** 2)
a_0 = media_y - a_1 * media_x
print('a_0:', a_0)
print('a_1:', a_1)
distancia_segura = 2
ancho_diseño = a_0 + a_1 * distancia_segura
print('El ancho del carril para bicicletas debe ser de:', ancho_diseño)

fig, ax = plt.subplots()
plt.scatter(distancia, ancho, s=40, c='b')
ax.plot(np.linspace(1.2, 3, 1000), a_0 + a_1 * np.linspace(1.2, 3, 1000), linewidth=3,

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 9/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

plt.xlabel("Distancia entre bicicletas y autos (m)")


plt.ylabel("Ancho del carril (m)")
ax.legend();

La recta que pasa más cerca de todos los datos es:

$$y=0.7167162403331468+0.7334919690660264x$$$$y=0.7167162403331468+0.733491969
0660264x$$

Una vez obtenida la recta se usa la misma para obtener valores de la variable dependiente
aunque se tengan observaciones con ese valor de la variable independiente, esto se debe a que
pueden existir diferentes datos con el mismo valor.

Error
Es necesario determinar el error de la recta, si bien es la recta que pasa más cerca de los datos,
puede ser que otra curva, como ser una parábola, ajuste de mejor manera los datos. El error
($S_{y/x}$$S_{y/x}$) se calula de la siguiente manera:

$$S_{y/x}=\sqrt{\dfrac{S_R}{n-2}}$$$$S_{y/x}=\sqrt{\dfrac{S_R}{n-2}}$$

from math import sqrt

sum_error = 0
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x
sum_error += error ** 2
S_yx = sqrt(sum_error / (n - 2))
print('El error de la recta es:', S_yx)

El error de la recta es: 0.2361089351365086

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 10/11
4/2/2021 6.2.1 Regresión lineal.ipynb - Colaboratory

Coe ciente de correlación


El coe ciente de correlación lineal mide el grado de intensidad de la relación entre dos variables.

$$r=\dfrac{n\sum y_ix_i-\sum x_i\sum y_i}{\sqrt{n\sum x_i^2-(\sum x_i)^2}\sqrt{n\sum y_i^2-


(\sum y_i)^2}}$$$$r=\dfrac{n\sum y_ix_i-\sum x_i\sum y_i}{\sqrt{n\sum x_i^2-(\sum
x_i)^2}\sqrt{n\sum y_i^2-(\sum y_i)^2}}$$

Los valores que puede tomar el coe ciente de correlación se encuentran en el intervalo
$[-1,1]$$[-1,1]$

Si $r = 1$$r = 1$, existe una correlación positiva perfecta. Indica una dependencia total
entre las dos variables denominada relación directa: cuando una de ellas aumenta, la otra
también lo hace en proporción constante.
Si $0 < r < 1$$0 < r < 1$, existe una correlación positiva.
Si r = 0, no existe relación lineal. Pero esto no necesariamente implica que las variables son
independientes: pueden existir todavía relaciones no lineales entre las dos variables.
Si $-1 < r < 0$$-1 < r < 0$, existe una correlación negativa.
Si $r = -1$$r = -1$, existe una correlación negativa perfecta. Indica una dependencia total
entre las dos variables llamada relación inversa: cuando una de ellas aumenta, la otra
disminuye en proporción constante.

https://colab.research.google.com/drive/14Prfys30cDb0Ju-1MAQuaPDTYsz7v1s1#scrollTo=DQPYo7Tw7zIv 11/11
4/2/2021 6.2.2 Regresión polinomial.ipynb - Colaboratory

Regresión polinomial
El propósito del Método de Mínimos Cuadrados para la regresión polinimial consite encontrar un
polinimio que pase lo más cerca posible de todos los datos observados, recordando el problema
del diseño de los carriles para bicicletas se tienen los siguientes datos:
N° Calle Distancia entre bicicletas y autos (m) Ancho del carril (m)

1 Junín 2.4 2.9


2 Ayacucho 1.5 2.1
3 Pichincha 2.4 2.3

4 Calama 1.8 2.1


5 Pedro Mendoza 1.8 1.8

6 Estados Unidos 2.9 2.7


7 Cúcuta 1.2 1.5

8 Tres pinos 3 2.9


9 Pecosa 1.2 1.5

import matplotlib as mpl


import matplotlib.pyplot as plt
%matplotlib inline

distancia = [2.4, 1.5, 2.4, 1.8, 1.8, 2.9, 1.2, 3, 1.2]


ancho = [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]
plt.scatter(distancia, ancho, s=40, c='b')

plt.xlabel("Distancia entre bicicletas y autos (m)")


plt.ylabel("Ancho del carril (m)")

Text(0, 0.5, 'Ancho del carril (m)')

El polinomio puede ser de cualquier grado. A continuación se hará la demostración para un


polinimio de grado 2.

Un polinimio de grado 2 está de ndo por la ecuación:

https://colab.research.google.com/drive/1ukA6YNc_EQu0xzeQTQoJHGSAhe1XjnsC 1/5
4/2/2021 6.2.2 Regresión polinomial.ipynb - Colaboratory
2
y = a0 + a1 x + a2 x

Para que los datos calculados sean iguales a los datos observados es necesario agregar el error
como una variable de la ecuación del polinimio, quedando la ecuación de la siguiente manera:
2
y = a0 + a1 x + a2 x +e

Donde:

y es la observación de la variable dependiente.


a0 es el término independiente.
a1 es el coe ciente del término de x .
a2 es el coe ciente del término de x2 .
x es la observación de la variable independiente.
e es el error.

Para validar el polonimio (a0 , a1 , a2 ) es necesario despejar el error:


2
e = y − a0 − a1 x − a2 x

Aplicando el criterio del mínimo error cuadrático:


2 2 2
∑e = ∑(yi − a0 − a1 x i − a2 x )
i

SR depende de a0 , a1 y a2 , si alguna de estas variables cambia tambíen lo hará SR , por lo


tanto para minimizar el modelo es necesario derivar parcialmente SR respecto de a0 , a1 y a2
∂ SR
2
= −2 ∑(yi − a0 − a1 x i − a2 x )
i
∂ a0

∂ SR
2
= −2 ∑ [(yi − a0 − a1 x i − a2 x )x i ]
i
∂ a1

∂ SR
2 2
= −2 ∑ [(yi − a0 − a1 x i − a2 x )x ]
i i
∂ a1

Simpli cando se obtiene el siguiente sistema:


2
⎧ na0 + (∑ x i )a1 + (∑ x )a2 = ∑ yi

⎪ i

2 3
⎨ (∑ x i )a0 + (∑ x )a1 + (∑ x )a2 = ∑ yi x i
i i



2 3 4 2
(∑ x )a0 + (∑ x )a1 + (∑ x )a2 = ∑ yi x
i i i i

Matricialmente se puede representar:


2
n ∑ xi ∑x ∑ yi
⎡ i ⎤ a0 ⎡ ⎤
⎡ ⎤
⎢∑x 2 3 ⎥∗ ⎢
⎢ i
∑x ∑x ⎥ a1 ⎥ = ⎢ ∑ yi x i ⎥
i i

⎣ 3 ⎦ ⎣ ⎦ ⎣ 2 ⎦
2 4 ∑ yi x
∑x ∑x ∑x a2
i i i i

El sistema de ecuaciones que se debe resolver es simétrico; por lo tanto es recomendable usar el
método Cholesky, pero se puede aplicar cualquier otro método. Al resolver dicho sistema se
encuentran los coe cientes del polinímio.

Este procedimiento se aplica para encontrar polinomios de cualquier grado.

https://colab.research.google.com/drive/1ukA6YNc_EQu0xzeQTQoJHGSAhe1XjnsC 2/5
4/2/2021 6.2.2 Regresión polinomial.ipynb - Colaboratory

Aplicación
Para aplicar este método es necesario calcular: ∑ xi , ∑ x2i , ∑ x3i , ∑ x4i , ∑ yi , ∑ yi xi ,
2
∑ yi x
i

A continuación se resolverá problema del diseño de los carriles:

∑ x i = 18.2

2
∑x = 40.54
i
3
∑x = 97.532
i
4
∑x = 248.2882
i

∑ yi = 19.8

∑ yi x i = 42.78

2
∑ yi x = 100.44
i

import matplotlib as mpl


import matplotlib.pyplot as plt
import numpy as np

%matplotlib inline

distancia = [2.4, 1.5, 2.4, 1.8, 1.8, 2.9, 1.2, 3, 1.2]


ancho = [2.9, 2.1, 2.3, 2.1, 1.8, 2.7, 1.5, 2.9, 1.5]
n = len(ancho)

sum_x = 18.2
sum_x2 = 40.54
sum_x3 = 97.532
sum_x4 = 248.2882
sum_y = 19.8
sum_yx = 42.78
sum_yx2 = 100.44

coeficientes = np.array([[n, sum_x, sum_x2], [sum_x, sum_x2, sum_x3], [sum_x2, sum_x3,


independientes = np.array([sum_y, sum_yx, sum_yx2])
a_0, a_1, a_2 = np.linalg.solve(coeficientes, independientes)

print('a_0:', a_0)
print('a_1:', a_1)
print('a_2:', a_2)

distancia_segura = 2
ancho_diseño = a_0 + a_1 * distancia_segura + a_2 * distancia_segura ** 2
print('El ancho del carril para bicicletas debe ser de:', ancho_diseño)

fig, ax = plt.subplots()
plt.scatter(distancia, ancho, s=40, c='b')
ax.plot(np.linspace(1.2, 3, 1000), a_0 + a_1 * np.linspace(1.2, 3, 1000) + a_2 * np.lin

plt.axhline(linewidth=1, color='k')
plt.xlabel("Distancia entre bicicletas y autos (m)")
https://colab.research.google.com/drive/1ukA6YNc_EQu0xzeQTQoJHGSAhe1XjnsC 3/5
4/2/2021 6.2.2 Regresión polinomial.ipynb - Colaboratory
plt.xlabel( Distancia entre bicicletas y autos (m) )
plt.ylabel("Ancho del carril (m)")
ax.legend();

a_0: 0.07207437798777279
a_1: 1.4191331769153437
a_2: -0.16469889545508642
El ancho del carril para bicicletas debe ser de: 2.2515451499981145

El polinomio de grado 2 que pasa más cerca de todos los datos es:
2
y = 0.07207437798777279 + 1.4191331769153437x − 0.16469889545508642x

Error
El error (Sy/x ) se calula de la siguiente manera:
−−−−−−−−− −
SR
Sy/x = √
n − (m + 1)

Donde:

SR : Discrepancia entre datos.


n : Cantidad de datos observados.
m : Grado del polinomio.

from math import sqrt

sum_error = 0
m = 2
for index in range(len(distancia)):
y = ancho[index]
x = distancia[index]
error = y - a_0 - a_1 * x - a_2 * x ** 2
sum_error += error ** 2
S_yx = sqrt(sum_error / (n - (m + 1)))
print('El error del polinomio es:', S_yx)

El error del polinomio es: 0.24656542975871043

https://colab.research.google.com/drive/1ukA6YNc_EQu0xzeQTQoJHGSAhe1XjnsC 4/5
4/2/2021 6.2.2 Regresión polinomial.ipynb - Colaboratory

Se puede observar que el error del polinomio de grado 2 es mayor al error de la recta, por lo tanto
la recta ajusta de mejor los datos.

https://colab.research.google.com/drive/1ukA6YNc_EQu0xzeQTQoJHGSAhe1XjnsC 5/5
4/2/2021 6.2.3 Regresión lineal múltiple.ipynb - Colaboratory

Regresión lineal múltiple


En ocasiones una variable depende de muchas otras y no solamente de una, como es el caso
del precio de un departamento puede depender de la super cie en la está contruido, el barrio, el
piso en el que se encuentra, el número de dormitorios, los servicios que tiene, la antigüedad y
muchos factores más.

Tomando datos de la página web https://www.ultracasas.com/, se han encontrado algunos


precios de departamentos en función de la super cie, cantidad de dormitorios y cantidad baños
que se presentan en la siguente tabla:
N° Super cie (m2 ) Dormitorios Baños Precio (USD)

1 44 1 1 56853

2 120 3 3 90896
3 99 2 3 96889

4 96 3 3 92000
5 91 3 2 95000

6 97 3 2 99800
7 97 3 2 108000
8 120 3 4 82000

9 124 3 4 85000
10 45 1 1 65500
11 125 3 3 167000

12 36 1 1 34920
13 103 3 3 99910

14 136 2 3 131920
15 160 3 4 90000
16 167 3 4 109000

17 46 1 1 50600

18 45 1 1 60000
19 52 1 1 60000

20 88 2 3 98000

21 121 3 3 125000
22 106 2 2 138500

23 137 3 3 190500

24 166 3 4 217500
25 171 3 4 234500

26 113 2 2 140000

27 260 3 3 310000

Una pareja desea comprar un departamento de 2 dormitorios y 100 m² de super cie, ¿cuánto le
costará?

https://colab.research.google.com/drive/1HL4H-9ZXGvaHdCdsc52bncNl8Putf_eI#scrollTo=DQPYo7Tw7zIv 1/5
4/2/2021 6.2.3 Regresión lineal múltiple.ipynb - Colaboratory

A modo de explicación se gra carán las tres variables que intervienen, en la práctica no se
grafíca.

Las variables son:

Precio, variable dependiente llamada y, eje z.


Super cie, variable independiente, llamada x1 , eje y.
Dormitorios, variable independiente, llamada x2 , eje x.

import matplotlib as mpl


import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline

data = [
[44, 1, 1, 56853],
[120, 3, 3, 90896],
[99, 2, 3, 96889],
[96, 3, 3, 92000],
[91, 3, 2, 95000],
[97, 3, 2, 99800],
[97, 3, 2, 108000],
[120, 3, 4, 82000],
[124, 3, 4, 85000],
[45, 1, 1, 65500],
[125, 3, 3, 167000],
[36, 1, 1, 34920],
[103, 3, 3, 99910],
[136, 2, 3, 131920],
[160, 3, 4, 90000],
[167, 3, 4, 109000],
[46, 1, 1, 50600],
[45, 1, 1, 60000],
[52, 1, 1, 60000],
[88, 2, 3, 98000],
[121, 3, 3, 125000],
[106, 2, 2, 138500],
[137, 3, 3, 190500],
[166, 3, 4, 217500],
[171, 3, 4, 234500],
[113, 2, 2, 140000],
[260, 3, 3, 310000],
]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

for item in data:


ax.scatter(item[0], item[1], item[-1])
ax.set_xlabel('Superficie')
ax.set_ylabel('Dormitorios')
ax.set_zlabel('Precio')

https://colab.research.google.com/drive/1HL4H-9ZXGvaHdCdsc52bncNl8Putf_eI#scrollTo=DQPYo7Tw7zIv 2/5
4/2/2021 6.2.3 Regresión lineal múltiple.ipynb - Colaboratory

Text(0.5, 0, 'Precio')

Para este ejemplo, donde se tiene dos variables independientes, el propósito del ajuste es
conseguir un plano:

y = a0 + a1 x 1 + a2 x 2

Siguiendo con el mismo criterio del método a la ecuación del plano se debe agregar el error:

y = a0 + a1 x 1 + a2 x 2 + e

Donde:

y es la observación de la variable dependiente.


a0 es el término independiente.
a1 es el coe ciente del término de la primera variable independiente x1 .
a2 es el coe ciente del término de la segunda variable independiente x2
x1 es la observación de la primera variable independiente.
x2 es la observación de la segunda variable independiente.
e es el error.

Para validar el polonimio (a0 , a1 , a2 ) es necesario despejar el error:

e = y − a0 − a1 x 1 − a2 x 2

Aplicando el criterio del mínimo error cuadrático:


2 2
SR = ∑ e = ∑(yi − a0 − a1 x 1i − a2 x 2i )
i

SR depende de a0 , a1 y a2 , si alguna de estas variables cambia tambíen lo hará SR , por lo


tanto para minimizar el modelo es necesario derivar parcialmente SR respecto de a0 , a1 y a2
∂ SR
= −2 ∑(yi − a0 − a1 x 1i − a2 x 2i )
∂ a0

∂ SR
= −2 ∑((yi − a0 − a1 x 1i − a2 x 2i )x 1i )
∂ a1

∂ SR
= −2 ∑((yi − a0 − a1 x 1i − a2 x 2i )x 2i )
∂ a2

Simpli cando se obtiene el siguiente sistema:

https://colab.research.google.com/drive/1HL4H-9ZXGvaHdCdsc52bncNl8Putf_eI#scrollTo=DQPYo7Tw7zIv 3/5
4/2/2021 6.2.3 Regresión lineal múltiple.ipynb - Colaboratory

n ∑ x 1i ∑ x 2i a0 ∑ yi
⎡ ⎤ ⎡ ⎤ ⎡ ⎤
2
⎢ ∑ x 1i ∑x ∑ x 1i x 2i ⎥ ∗ ⎢ a ⎥ = ⎢ ∑ y x
1 i 1i ⎥
1i

⎣ 2 ⎦ ⎣ ⎦ ⎣ ⎦
∑ x 2i ∑ x 1i x 2i ∑x a2 ∑ yi x 2i
2i

Al resolver dicho sistema se encuentrar los coe cientes del plano.

Este procedimiento se puede aplicar a cualquier número de variables, siempre y cuando todas
sean independientes entre sí y solo exista una variable dependiente.

Aplicación
Para aplicar este método es necesario calcular: ∑ x1i , ∑ x2i , ∑ x21i , ∑ x1i x2i, ∑ x221 , ∑ yi ,
,
∑ yi x 1i ∑ yi x 2i

A continuación se resolverá planteado en esta sección, una pareja desea comprar un


departamento de 2 dormitorios y 100 m² de super cie, ¿cuánto le costará?

∑ x 1i = 2965

∑ x 2i = 64

2
∑x = 390169
1i

∑ x 1i x 2i = 7817

2
∑x = 170
2i

∑ yi = 3129288

∑ yi x 1i = 412229733

∑ yi x 2i = 8126809

import numpy as np

n = len(data)

sum_x1=2965
sum_x2=64
sum_x1_2=390169
sum_x1x2=7817
sum_x2_2=170
sum_y=3129288
sum_yx1=412229733
sum_yx2=8126809

coeficientes = np.array([[n, sum_x1, sum_x2], [sum_x1, sum_x1_2, sum_x1x2], [sum_x2, s


independientes = np.array([sum_y, sum_yx1, sum_yx2])
print(coeficientes)
print(independientes)

a_0, a_1, a_2 = np.linalg.solve(coeficientes, independientes)

print('a_0:', a_0)
print('a_1:', a_1)
i t(' 2 ' 2)
https://colab.research.google.com/drive/1HL4H-9ZXGvaHdCdsc52bncNl8Putf_eI#scrollTo=DQPYo7Tw7zIv 4/5
4/2/2021 6.2.3 Regresión lineal múltiple.ipynb - Colaboratory
print('a_2:', a_2)

superficie = 100
dormitorios = 2
precio = a_0 + a_1 * superficie + a_2 * dormitorios
print('El precio del departamento es de:', precio)

[[ 27 2965 64]
[ 2965 390169 7817]
[ 64 7817 170]]
[ 3129288 412229733 8126809]
a_0: 14541.92237079433
a_1: 1243.87941223487
a_2: -14866.34939512245
El precio del departamento es de: 109197.16480403641

Error
El error (Sy/x ) se calula de la siguiente manera:
−−−−−−−−− −
SR
Sy/x = √
n − (m + 1)

Donde:

SR : Discrepancia entre datos.


n : Cantidad de datos observados.
m : Cantidad de variables independientes.

https://colab.research.google.com/drive/1HL4H-9ZXGvaHdCdsc52bncNl8Putf_eI#scrollTo=DQPYo7Tw7zIv 5/5
4/2/2021 6.2.4 Regresión general lineal.ipynb - Colaboratory

Regresión general lineal


Los modelos anteriores se puede expresar como la ecuacion general:

$$y=a_0z_0+a_1z_1+a_2z_2+\ldots+a_mz_m+e$$

Donde:

Regresión lineal múltiple: $z_0=1$, $z_1=x_1$, $z_2=x_2$, $\ldots$, $z_m=x_m$


Regresión polinomial: $z_0=x^0$, $z_1=x^1$, $z_2=x^2$, $\ldots$, $z_m=x^m$

Para la regresión lineal se puede se puede aplicar cualquiera de los dos modelos.

Matricialmente la ecuación general se puede escribir como:

$$y=Za+e$$

Donde:

$y$: Vector de datos de la variable dependiente.


$Z$: Matriz de datos de las variables independientes. Tiene tantas columnas como la
cantidad de variables independientes $+ 1$, la primera columna esta llena de 1s.
$a$: Vector coe cientes desconocidos.
$e$: Vector de errores.

La discrepancia entre datos se calcula de la siguiente manera:

$$S_R=\sum e_i^2= \sum_{i=1}^n \left(y_i-\sum_{j=0}^ma_jZ_{j i}\right)^2 $$

Minimizando
Para minimizar este modelo se asume que el error es 0, por lo tanto minimizando la ecuación se
puede escribir como: $$y=Za$$

o como: $$Za=y$$

$Z$ no es una matriz cuadrada por lo tanto no se puede resolver el sistema, como se puede ver el
resolver el problema del departamento.

Se tiene dos variables independientes, la super cie y la cantidad de dormitorios que tiene el
departamento, entonces $Z$ tendra 3 columnas, debido a que tiene la candidad de variables
independientes más uno. La primera columna tendra el valor 1 en todas sus nal, se segunda la
corresponde a la primera variable independiente, en este caso la super cie, la tercera la
corresponde a la segunda variable independiente, en este caso la cantidad de dormitorios; si se
tendría más variables se deben añadir a continuación, por lo tanto $Z$ para el ejemplo sería:

https://colab.research.google.com/drive/1dZ-YkcrBelxz6P8nMqCDx5LKWgQHA1Mv 1/4
4/2/2021 6.2.4 Regresión general lineal.ipynb - Colaboratory

$$Z=\begin{bmatrix} 1 & 44 & 1\\ 1 & 120 & 3\\ 1 & 99 & 2\\ 1 & 96 & 3\\ 1 & 91 & 3\\ 1 & 97 & 3\\
1 & 97 & 3\\ 1 & 120 & 3\\ 1 & 124 & 3\\ 1 & 45 & 1\\ 1 & 125 & 3\\ 1 & 36 & 1\\ 1 & 103 & 3\\ 1 &
136 & 2\\ 1 & 160 & 3\\ 1 & 167 & 3\\ 1 & 46 & 1\\ 1 & 45 & 1\\ 1 & 52 & 1\\ 1 & 88 & 2\\ 1 & 121 &
3\\ 1 & 106 & 2\\ 1 & 137 & 3\\ 1 & 166 & 3\\ 1 & 171 & 3\\ 1 & 113 & 2\\ 1 & 260 & 3
\end{bmatrix}$$

Como se puede ver $Z$ no es una matriz cuadrada por lo tanto no se puede resolver el sistema
$Za=y$.
Es posible realizar diferentes operaciones con las ecuaciones, el único requisito es aplicar la misma
operación a los dos miembros para que se mantenga el equilibrio, en este sentido es posible
multiplicar los dos miembros por la transpuesta de $Z$$Z$ ($Z^T$$Z^T$), quedando la ecuación
de la siguente manera:

$$Z^TZa=Z^Ty$$$$Z^TZa=Z^Ty$$

$Z^TZ$$Z^TZ$ es una matriz cuadrada por lo tanto es posible resolver el sistema por cualquier
método.

$$(Z^TZ)a=Z^Ty$$$$(Z^TZ)a=Z^Ty$$

import numpy as np

Z = np.array([
[1, 44, 1],
[1, 120, 3],
[1, 99, 2],
[1, 96, 3],
[1, 91, 3],
[1, 97, 3],
[1, 97, 3],
[1, 120, 3],
[1, 124, 3],
[1, 45, 1],
[1, 125, 3],
[1, 36, 1],
[1, 103, 3],
[1, 136, 2],
[1, 160, 3],
[1, 167, 3],
[1, 46, 1],
[1, 45, 1],
[1, 52, 1],
[1, 88, 2],
[1, 121, 3],
[1, 106, 2],
[1, 137, 3],
[1, 166, 3],
[1, 171, 3],
[1, 113, 2],
https://colab.research.google.com/drive/1dZ-YkcrBelxz6P8nMqCDx5LKWgQHA1Mv 2/4
4/2/2021 6.2.4 Regresión general lineal.ipynb - Colaboratory
[1, 113, 2],
[1, 260, 3]
])

y = np.array([
56853,
90896,
96889,
92000,
95000,
99800,
108000,
82000,
85000,
65500,
167000,
34920,
99910,
131920,
90000,
109000,
50600,
60000,
60000,
98000,
125000,
138500,
190500,
217500,
234500,
140000,
310000
])
coeficientes = np.dot(np.transpose(Z), Z)
independientes = np.dot(np.transpose(Z), y)

print(coeficientes)
print(independientes)

a_0, a_1, a_2 = np.linalg.solve(coeficientes, independientes)

print('a_0:', a_0)
print('a_1:', a_1)
print('a_2:', a_2)

[[ 27 2965 64]
[ 2965 390169 7817]
[ 64 7817 170]]
[ 3129288 412229733 8126809]
a_0: 14541.92237079433
a_1: 1243.87941223487
a_2: -14866.34939512245

https://colab.research.google.com/drive/1dZ-YkcrBelxz6P8nMqCDx5LKWgQHA1Mv 3/4
4/2/2021 6.2.4 Regresión general lineal.ipynb - Colaboratory

Como se puede ver el resultado es el mismo, por lo tanto son métodos equivalentes.

Para el caso de regresión polinomial, $Z$$Z$ se construye de la siguiente manera:

Primera columna: $1$$1$.


Segunda columna: $x$$x$.
Tercera columna: $x^2$$x^2$.
Cuarta columna: $x^3$$x^3$.

Y así sucesivamente hasta llegar a $x^n$$x^n$ donde $n$$n$ es el grado de polinomio.

https://colab.research.google.com/drive/1dZ-YkcrBelxz6P8nMqCDx5LKWgQHA1Mv 4/4
4/2/2021 6.3.1 Regresión logarítmica - Colaboratory

Regresión logarítmica
Cuando es necesario ajustar los datos a una expresión logarítmica, es decir:

$$y=a_0+a_1 \log(x)$$

La idea es convertir una curva logarítmica a una recta haciendo un cambio de variable:

$$x' = \log x$$

$$y=a_0+a_1 x'$$

Aplicando el método de mínimos cuadrados se obtiene el siguiente sistema de ecuaciones:

$$ \left\lbrace \begin{array}{l} n a_0 + (\sum x'_i) a_1 = \sum y_i\\ (\sum x'_i) a_0 + (\sum
{x'}_i^2)a_1 = \sum y_ix'_i \end{array} \right. $$

Matricialmente se puede representar: $$\begin{bmatrix} n & \sum x'_i \\ \sum x'_i & \sum {x'}_i^{2}
\end{bmatrix}* \begin{bmatrix} a_0 \\ a_1 \end{bmatrix}= \begin{bmatrix} \sum y_i\\ \sum y_i x'_i\\
\end{bmatrix}$$

Los valores obtenidos para $a_0$ y $a_1$ son los coe cientes para la ecuación:

$$y=a_0+a_1 \log(x)$$

Es posible aplicar el mismo razonamiento con logaritmos de otras bases.

Aplicación
Recordando el problema del diseño de los carriles para bicicletas se tienen los siguientes datos:
N° Calle Distancia entre bicicletas y autos (m) Ancho del carril (m)

1 Junín 2.4 2.9


2 Ayacucho 1.5 2.1

3 Pichincha 2.4 2.3


4 Calama 1.8 2.1
5 Pedro Mendoza 1.8 1.8

6 Estados Unidos 2.9 2.7


7 Cúcuta 1.2 1.5
8 Tres pinos 3 2.9
9 Pecosa 1.2 1.5

El sistema resultante es:

$$\begin{bmatrix} 9 & 2.54494049739937 \\ 2.54494049739937 & 0.904453351504549


\end{bmatrix}* \begin{bmatrix} a_0 \\ a_1 \end{bmatrix}= \begin{bmatrix} 19.8\\

https://colab.research.google.com/drive/1cjPuAKx-BZ-9jgyZ_UY_SY9qDdsRUh78 1/2
4/2/2021 6.3.1 Regresión logarítmica - Colaboratory

6.21212284197725 \end{bmatrix}$$$$\begin{bmatrix} 9 & 2.54494049739937 \\


2.54494049739937 & 0.904453351504549 \end{bmatrix}* \begin{bmatrix} a_0 \\ a_1
\end{bmatrix}= \begin{bmatrix} 19.8\\ 6.21212284197725 \end{bmatrix}$$

sum_xprime = 2.54494049739937
sum_xprime2 = 0.904453351504549
sum_y_xprime = 6.21212284197725
sum_y = 19.8
n = 9
media_xprime = sum_xprime / n
media_y = sum_y / n
a_1 = (n * sum_y_xprime - sum_xprime * sum_y) / (n * sum_xprime2 - sum_xprime ** 2)
a_0 = media_y - a_1 * media_xprime

print('a_0:', a_0)
print( 'a_1:', a_1)

a_0: 1.2617207653400833
a_1: 3.3181573874000403

quedando nalmente la ecuación:

$$y=1.2617207653400833+3.3181573874000403\log
x$$$$y=1.2617207653400833+3.3181573874000403\log x$$

https://colab.research.google.com/drive/1cjPuAKx-BZ-9jgyZ_UY_SY9qDdsRUh78 2/2
4/2/2021 6.3.2 Regresión potencial.ipynb - Colaboratory

Regresión potencial
Cuando es necesario ajustar los datos a una expresión potencial, es decir:
a1
y = a0 x

La idea es convertir una curva potencial a una recta por medio de logaritmos, como sigue:

log y = log a0 + a1 log x

Aplicando el método de mínimos cuadrados se obtiene el siguiente sistema de ecuaciones:


n log a0 + (∑ log x i )a1 = ∑ log yi
{
2
(∑ log x i ) log a0 + (∑(log x i ) )a1 = ∑ log yi log x i

Matricialmente se puede representar:


n ∑ log x i log a0 ∑ log yi
[ ] ∗ [ ] = [ ]
2
∑ log x i ∑(log x i ) a1 ∑ log yi log x i

Aplicación
Recordando el problema del diseño de los carriles para bicicletas se tienen los siguientes datos:
N° Calle Distancia entre bicicletas y autos (m) Ancho del carril (m)

1 Junín 2.4 2.9

2 Ayacucho 1.5 2.1


3 Pichincha 2.4 2.3

4 Calama 1.8 2.1


5 Pedro Mendoza 1.8 1.8

6 Estados Unidos 2.9 2.7


7 Cúcuta 1.2 1.5
8 Tres pinos 3 2.9

9 Pecosa 1.2 1.5

El sistema resultante es:


9 2.5449404973993737 log a0 2.969781208657
[ ] ∗ [ ] = [ ]
2.5449404973993737 0.9044533515045494 a1 0.9654675908337498

sum_log_x = 2.5449404973993737
sum_log_x2 = 0.9044533515045494
sum_log_y_log_x = 0.9654675908337498
sum_log_y = 2.969781208657
n = 9
media_log_x = sum_log_x / n
media log y = sum log y / n
https://colab.research.google.com/drive/1Ege56nHJLKG4B2s_qVzd3mkJ4PAQmVmu 1/3
4/2/2021 6.3.2 Regresión potencial.ipynb - Colaboratory
media_log_y sum_log_y / n
a_1 = (n * sum_log_y_log_x - sum_log_x * sum_log_y) / (n * sum_log_x2 - sum_log_x ** 2)
log_a_0 = media_log_y - a_1 * media_log_x

print('log a_0:', log_a_0)


print( 'a_1:', a_1)

log a_0: 0.13765587004034566


a_1: 0.6801252838966729

Como se puede ver no se ha encontrado los coe cientes para la ecuación:


a1
y = a0 x

pues no se ha encontrado el valor de a0 si no el valor del log a0 , para encuentrar a0 se aplica el


antilogaritmo:

log a0 = 0.13765587004034566
log a0 0.13765587004034566
10 = 10

0.13765587004034566
a0 = 10

a_0 = 10 ** log_a_0
print('a_0:', a_0)

a_0: 1.3729536311846982

quedando nalmente la ecuación:


0.6801252838966729
y = 1.3729536311846982x

https://colab.research.google.com/drive/1Ege56nHJLKG4B2s_qVzd3mkJ4PAQmVmu 2/3
4/2/2021 6.3.2 Regresión potencial.ipynb - Colaboratory

https://colab.research.google.com/drive/1Ege56nHJLKG4B2s_qVzd3mkJ4PAQmVmu 3/3
4/2/2021 6.3.3 Regresión exponencial.ipynb - Colaboratory

Regresión exponencial
Cuando es necesario ajustar los datos a una expresión exponencial, es decir:
x
y = a0 a
1

La idea es convertir una curva exponencial a una recta por medio de logaritmos, como sigue:

log y = log a0 + x log a1

Aplicando el método de mínimos cuadrados se obtiene el siguiente sistema de ecuaciones:


n log a0 + (∑ x i ) log a1 = ∑ log yi
{
2
(∑ x i ) log a0 + (∑ x ) log a1 = ∑ x i log yi
i

Matricialmente se puede representar:


n ∑ xi log a0 ∑ log yi
[ ] ∗ [ ] = [ ]
2
∑ xi ∑x log a1 ∑ x i log yi
i

Aplicación
Recordando el problema del diseño de los carriles para bicicletas se tienen los siguientes datos:
N° Calle Distancia entre bicicletas y autos (m) Ancho del carril (m)

1 Junín 2.4 2.9

2 Ayacucho 1.5 2.1


3 Pichincha 2.4 2.3

4 Calama 1.8 2.1

5 Pedro Mendoza 1.8 1.8


6 Estados Unidos 2.9 2.7
7 Cúcuta 1.2 1.5

8 Tres pinos 3 2.9


9 Pecosa 1.2 1.5

El sistema resultante es:


9 18.2 log a0 2.969781208657
[ ] ∗ [ ] = [ ]
18.2 40.54 log a1 6.56148411469917

sum_x = 18.2
sum_x2 = 40.54
sum_x_log_y = 6.56148411469917
sum_log_y = 2.969781208657
n = 9
media_log_x = sum_x / n
media log y = sum log y / n
https://colab.research.google.com/drive/1mjiYlwPvswXG5FfNjoImep_iK02al6gb 1/3
4/2/2021 6.3.3 Regresión exponencial.ipynb - Colaboratory
media_log_y = sum_log_y / n
log_a_1 = (n * sum_x_log_y - sum_x * sum_log_y) / (n * sum_x2 - sum_x ** 2)
log_a_0 = media_log_y - log_a_1 * media_log_x

print('log a_0:', log_a_0)


print( 'log a_1:', log_a_1)

log a_0: 0.02902793906692136


log a_1: 0.14882031632168724

Como se puede ver no se ha encontrado los coe cientes para la ecuación:


x
y = a0 a
1

pues no se han encontrado los valores de a0 y a1 si no el log a0 y log a1 , para encuentrar a0 y a1


se aplica el antilogaritmo:

log a0 = 0.02902793906692136
log a0 0.02902793906692136
10 = 10
0.02902793906692136
a0 = 10

log a1 = 0.14882031632168724
log a1 0.14882031632168724
10 = 10
0.14882031632168724
a1 = 10

a_0 = 10 ** log_a_0
print('a_0:', a_0)
a_1 = 10 ** log_a_1
print('a_1', a_1)

a_0: 1.0691236559578605
a_1 1.4087058441630465

quedando nalmente la ecuación:


x
y = 1.0691236559578605 ∗ 1.4087058441630465

https://colab.research.google.com/drive/1mjiYlwPvswXG5FfNjoImep_iK02al6gb 2/3
4/2/2021 6.4 Interpolación.ipynb - Colaboratory

Interpolación
Los datos son considerados verdaderos y si se repite en ensayo para un valor de la variable
independiente siempre será el mismo valor de la variable dependiente, esto hace que no sea
necesario repetir los datos pues no se trata de información nueva, por este motivo generalmente no
se cuenta con pocos datos. El propósito es encontrar una o varias curvas que pasen por todos los
puntos observados y permitan estimar pares de valores no observados.

Los métodos de interpolación se pude dividen en dos tipos:

Polinomial.
Spline.

Problema
Los lagos de la zona templada llegan a dividirse en estratos térmicos durante el verano. El agua es
tibia y ligera, y en el fondo es más fría y densa. La estrati cación divide efectivamente el lago en
dos capas en forma vertical: el epilimnion y el hipolimnion, separadas por un plano conocido como
termoclina.

Se han tomado mediciones de la temperatura a diferentes profundidades, usando las mismas


herramientas e instrumentos y en la misma hora, como se puede ver la siguiente tabla.
N° Temperatura (°C) Profundidad (m)

1 22.8 0

2 11.7 18.3
3 22.8 4.9
4 20.6 9.1
5 13.9 13.7

6 11.1 27.2
7 11.1 22.9
8 22.8 2.3

Se desea conocer la temperatura del agua a 15m de profundidad.

Como se puede ver para una profundidad dada la temperatura siempre será la misma, pues se trata
del mismo lago.

Es necesario identi car las variables, en este caso la variable independiente es la profundidad pues
el problema nos proporciona un valor para esta variable sobre el cual se debe calcular la
temperatura.

https://colab.research.google.com/drive/144WdMva0pZp45X-KUAIW8vft3rUb6UQv 1/3
4/2/2021 6.4 Interpolación.ipynb - Colaboratory

Variable independiente: Profundidad.


Variable dependiente: Temperatura.

import matplotlib as mpl


import matplotlib.pyplot as plt
%matplotlib inline

profundidad = [0, 2.3, 4.9, 9.1, 13.7, 18.3, 22.9, 27.2]


temperatura = [22.8, 22.8, 22.8, 20.6, 13.9, 11.7, 11.1, 11.1]

plt.scatter(profundidad, temperatura, s=40, c='b')

plt.xlabel("Profundidad (m)")
plt.ylabel("Temperatura (°C)")

Text(0, 0.5, 'Temperatura (°C)')

https://colab.research.google.com/drive/144WdMva0pZp45X-KUAIW8vft3rUb6UQv 2/3
4/2/2021 6.4.1 Interpolación polinomial.ipynb - Colaboratory

Interpolación polinomial
Consiste en encontrar uno o varios polinomios que pasen por todos los datos observados, es decir
la función $f(n)$ que se usará para el ajuste debe ser un polinomio.

$$f(x)=a_0+a_1x+a_2x^2+\ldots+a_nx^n$$

Partiendo el problema, los puntos observados se verían así:

import matplotlib as mpl


import matplotlib.pyplot as plt
%matplotlib inline

profundidad = [0, 2.3, 4.9, 9.1, 13.7, 18.3, 22.9, 27.2]


temperatura = [22.8, 22.8, 22.8, 20.6, 13.9, 11.7, 11.1, 11.1]

plt.scatter(profundidad, temperatura, s=40, c='b')

plt.xlabel("Profundidad (m)")
plt.ylabel("Temperatura (°C)")

Cargando...

Si se usan polinomios de primer grado, líneas rectas el ajuste se vería así:

plt.scatter(profundidad, temperatura, s=40, c='b')


plt.plot(profundidad, temperatura, c='r')

plt.xlabel("Profundidad (m)")
plt.ylabel("Temperatura (°C)")

https://colab.research.google.com/drive/1YF7HLhADix8bVH93gKiQ-uABm9NQwC5W 1/3
4/2/2021 6.4.1 Interpolación polinomial.ipynb - Colaboratory

Encontrar rectas entre dos puntos es una tarea fácil pero lamentablemente pierde representatividad,
las transiciones entre cada segmento son bruscas, se busca que dichas transiciones sean lo más
suaves posibles.

Una buena opción es encontrar el polinomio del grado más alto posible. El problema tiene 8
observaciones por lo tanto se puede construir un polinomio de grado 7, en general el grado del
polinomio más alto es igual al número de observaciones menos uno.

import numpy as np

plt.scatter(profundidad, temperatura, s=40, c='b')

x = np.linspace(profundidad[0], profundidad[-1], 1000)


y = 4.96190363e-07 * x ** 7 - 4.19254251e-05 * x ** 6 + 1.32791547e-03 * x ** 5 - 1.928957

Cargando... y, linewidth=3, c='r', label='Interpolación')


plt.plot(x,

https://colab.research.google.com/drive/1YF7HLhADix8bVH93gKiQ-uABm9NQwC5W 2/3
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

Diferencia divididas de Newton

Primer grado
La forma más sencilla de encontrar un grupo de polinomios que pasen por todas observaciones es
usando polinomios de primer grado (f1 (x) ), para ello se puede usar la ecuación de la recta a partir
de dos puntos:
f1 (x) − f (x 0 ) f (x 1 ) − f (x 0 )
=
x − x0 x1 − x0

Desjando f1 (x) :
f (x 1 ) − f (x 0 )
f1 (x) = f (x 0 ) + (x − x 0 )
x1 − x0

Aplicación
El primer paso para cualquier tipo de interpolación es ordenar los datos en función de la variable
independiente, recuerde que debe ordenar los pares. Partiendo el problema, los puntos observados y
ordenados se verían así:
N° Temperatura (°C) Profundidad (m)

1 22.8 0
8 22.8 2.3

3 22.8 4.9
4 20.6 9.1

5 13.9 13.7
2 11.7 18.3

7 11.1 22.9
6 11.1 27.2

El siguiente paso es identi car el intervalo donde se encuentra el valor de la variable independiente
para el cual se desea calcular la variable dependiente, en este caso se desea conocer la
temperatura del agua a 15m de profundidad, por lo tanto se debe usar el intervalo:
N° Temperatura (°C) Profundidad (m)

Punto f (xi ) xi

0 13.9 13.7
1 11.7 18.3

A continuación se usa la ecuación:

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 1/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

f (x 1 ) − f (x 0 )
f1 (x) = f (x 0 ) + (x − x 0 )
x1 − x0

Reemplazando:
11.7 − 13.9
f1 (15) = 13.9 + (15 − 13.7) = 13.278261
18.3 − 13.7

Segundo grado
Para forma un polinomio de segundo grado es necesario usar tres puntos, para ello se deben dividir
los datos de tres en tres, teniendo el cuidado de que el último elemento de un segmento debe ser el
primero del siguiente, una vez identi cado el segmento de trabajo es necesario encontrar los
coe cientes del polinomio, para este propósito se usa la siguiente ecuación:

f2 (x) = b0 + b1 (x − x 0 ) + b2 (x − x 0 )(x − x 1 )

Expandiendo:
2
f2 (x) = b0 + b1 x − b1 x 0 + b2 x + b2 x 0 x 1 − b2 x x 0 − b2 x x 1

La forma habitual de la ecuación de segundo grado es:


2
f2 (x) = a0 + a1 x + a2 x

Estas dos versiones son equivalentes:

a 0 = b0 − b1 x 0 + b2 x 0 x 1

a 1 = b1 − b2 x 0 − b2 x 1

a 2 = b2

Si se pueden encontrar los valores de b0 , b1 y b2 fácilmente se puede calcular los coe cientes a0 ,
a1 y a2 del polinomio, para calcular b0 , b1 y b2 se usan las siguientes ecuaciones:

b0 = f (x 0 )

f (x 1 ) − f (x 0 )
b1 =
x1 − x0

f (x 2 ) − f (x 1 ) f (x 1 ) − f (x 0 )

x2 − x1 x1 − x0
b2 =
x2 − x0

Aplicación
Luego de ordenar los datos es necesario dividir en intervalos de tres en tres:

Partiendo el problema, los puntos observados y ordenados se verían así:


N° Temperatura (°C) Profundidad (m)

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 2/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

N° Temperatura (°C) Profundidad (m)

1 22.8 0
8 22.8 2.3
3 22.8 4.9
4 20.6 9.1
5 13.9 13.7
2 11.7 18.3

7 11.1 22.9
6 11.1 27.2

Los datos divididos serían los siguientes:

Intervalo 1:
N° Temperatura (°C) Profundidad (m)

1 22.8 0

8 22.8 2.3
3 22.8 4.9

Intervalo 2:
N° Temperatura (°C) Profundidad (m)

3 22.8 4.9
4 20.6 9.1
5 13.9 13.7

Intervalo 3:
N° Temperatura (°C) Profundidad (m)

5 13.9 13.7
2 11.7 18.3

7 11.1 22.9

Intervalo 4:
N° Temperatura (°C) Profundidad (m)

7 11.1 22.9
6 11.1 27.2

Note que el último segmento puede ser de primer grado.

El siguiente paso es identi car el intervalo donde se encuentra el valor de la variable independiente
para el cual se desea calcular la variable dependiente, en este caso se desea conocer la
temperatura del agua a 15m de profundidad, por lo tanto se debe usar el tercer intervalo:
N° Temperatura (°C) Profundidad (m)

Punto f (xi ) xi

0 13.9 13.7

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 3/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

N° Temperatura (°C) Profundidad (m)

1 11.7 18.3
2 11.1 22.9

A continuación se calcula b0 , b1 y b2 :

b0 = f (x 0 ) = 13.9

f (x 1 ) − f (x 0 ) 11.7 − 13.9
b1 = = = −0.47826086956521746
x1 − x0 18.3 − 13.7

f (x 2 ) − f (x 1 ) f (x 1 ) − f (x 0 ) 11.1 − 18.3 18.3 − 13.9


− −
x2 − x1 x1 − x0 22.9 − 18.3 18.3 − 13.7
b2 = = = 0.0378071833
x2 − x0 22.9 − 13.7

Seguidamente se calcula a0 , a1 y a2 :

a0 = b0 − b1 x 0 + b2 x 0 x 1 = 13.9 − (−0.47826086956521746) ∗ 13.7 + 0.03780718336483

= 29.93081285444235

a1 = b1 − b2 x 0 − b2 x 1 = −0.47826086956521746 − 0.037807183364839334 ∗ 13.7 − 0.0

−1.688090737240076

a2 = b2 = 0.037807183364839334

A continuación se puede ver como la curva pase perfectamente por los tres puntos utilizados.

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline

profundidad = [0, 2.3, 4.9, 9.1, 13.7, 18.3, 22.9, 27.2]


temperatura = [22.8, 22.8, 22.8, 20.6, 13.9, 11.7, 11.1, 11.1]

plt.scatter(profundidad, temperatura, s=40, c='b')

x = np.linspace(13.7, 22.9, 10)


#y = 0.8 * x ** 2 -27.8 * x + 244.608
y = 0.037807183364839334 * x ** 2 -1.688090737240076 * x + 29.93081285444235
plt.plot(x, y, linewidth=3, c='r')

plt.xlabel("Profundidad (m)")
plt.ylabel("Temperatura (°C)")

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 4/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

Text(0, 0.5, 'Temperatura (°C)')

Para terminar es necesario calcular el valor de la variable dependiente a partir del dato de la
variable independiente.

Reemplazando en la ecuación del polonomio de segundo grado:


2
f2 (15) = a0 + a1 x + a2 x = 29.93081285444235 + (−1.688090737240076) ∗ 15 + 0.03780718

= 13.11606805293006

Forma general
Después de ordenar y dividir los datos en función del polinomio requerido, para encontrar el se usa
la siguiente ecuación:

fn (x) = b0 + b1 (x − x 0 ) + … + bn (x − x 0 )(x − x 1 ) … (x − x n−1 )

Donde aparencen muchas b , para calcularlas se usan las siguientes ecuaciones:

b0 = f (x 0 )

b1 = f [x 1 , x 0 ]

b2 = f [x 2 , x 1 , x 0 ]

bn = f [x n , x n−1 , … , x 1 , x 0 ]

Note que f no es una función normal, no usa paréntesis, usa corchetes, para calcular su valor se
usan las siguientes ecuaciones:
f (x i ) − f (x j )
f [x i , x j ] =
xi − xj

f [x i , x j ] − f [x j , x k ]
f [x i , x j , x k ] =
xi − xk

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

Una vez encontrados los valores para las b se reemplaza directamente en la primera ecuación,
encontrar el polinomio de la forma ax2 + bx + c puede llevar mucho tiempo.
https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 5/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

Aplicación
Resolver el problema, usando un polinomio de tercer grado.

En primer lugar es necesario dividir el polinomio cada cuatro puntos, recuerdo que se necesita
$grado+1$ puntos para encontrar el polinomio.

Los datos divididos serían los siguientes:

Intervalo 1:
N° Temperatura (°C) Profundidad (m)

1 22.8 0

8 22.8 2.3
3 22.8 4.9

4 20.6 9.1

Intervalo 2:
N° Temperatura (°C) Profundidad (m)

4 20.6 9.1

5 13.9 13.7
2 11.7 18.3

7 11.1 22.9

Intervalo 3:
N° Temperatura (°C) Profundidad (m)

7 11.1 22.9
6 11.1 27.2

Note que el último segmento puede ser de un grado menor.

Se usará el segundo intervalo, porque $15$ se encuentra en él:


N° Temperatura (°C) Profundidad (m)

Puntos $f(x_i)$ $x_i$


0 20.6 9.1
1 13.9 13.7

2 11.7 18.3
3 11.1 22.9

Como primer paso es necesario construir el polinomio de tercer grado usando la ecuación:

$$f_n(x)=b_0+b_1(x-x_0)+\ldots+b_n(x-x_0)(x-x_1)\ldots(x-x_{n-1})$$

$n=3$, entonces tiene cuatro términos.

A continuación se detalla como encontrar cada término:

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 6/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

$b_0$
$b_1(x-x_0)$
$b_2(x-x_0)(x-x_1)$
$b_3(x-x_0)(x-x_1)(x-x_2)$

Dando como resultado: $$f_3(x)=b_0+b_1(x-x_0)+b_2(x-x_0)(x-x_1)+b_3(x-x_0)(x-x_1)(x-x_2)$$

Seguidamente se calculan las $b$, desde $b_0$ hasta $b_3$:

Calculando $b_0:$

$b_0$ tiene su propia ecuación, por lo tanto:

$b_0=f(x_0)=20.6$

Calculando $b_1:$

Para determinar cuántos parámetros tiene $f[]$ se inicia con el mismo índice de $b$, para este caso
$1$ y se continúa hasta llegar a $0$.

$b_1=f[x_1, x_0]=\dfrac{f(x_1)-f(x_0)}{x_1-x_0}$

$b_1=f[13.7, 9.1]=\dfrac{13.9-20.6}{13.7-9.1}=-1.456521739$

Calculando $b_2:$

$b_2=f[x_2, x_1, x_0]=\dfrac{f[x_2,x_1]-f[x_1,x_0]}{x_2-x_0}$

$b_2=f[18.3, 13.7, 9.1]=\dfrac{f[18.3, 13.7]-f[13.7, 9.1]}{18.3-9.1}$

No se puede calcular directamente, es necesario calcular previamente $f[18.3, 13.7]$ y $f[13.7,


9.1]$:

$f[18.3, 13.7]=\dfrac{11.7-13.9}{18.3-13.7}=-0.47826087$

$f[13.7, 9.1]$ se ha calculado en $b_1$.

$b_2=f[18.3, 13.7, 9.1]=\dfrac{-0.47826087-(-1.456521739)}{18.3-9.1}=0.106332703$

Calculando $b_3:$

$b_3=f[x_3, x_2, x_1, x_0]=\dfrac{f[x_3, x_2,x_1]-f[x_2,x_1,x_0]}{x_3-x_0}$

$b_3=f[22.9, 18.3, 13.7, 9.1]=\dfrac{f[22.9, 18.3, 13.7]-f[18.3, 13.7, 9.1]}{22.9-9.1}$

No se puede calcular directamente, es necesario calcular previamente $f[22.9, 18.3, 13.7]$ y $f[18.3,
13.7, 9.1]$:

$f[22.9, 18.3, 13.7]=\dfrac{f[22.9, 18.3]-f[18.3, 13.7]}{22.9-13.7}$

No se puede calcular directamente, es necesario calcular previamente $f[22.9, 18.3]$ y $f[18.3,


13.7]$:

$f[22.9, 18.3]=\dfrac{11.1-11.7}{22.9-18.3}=-0.130434783$

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 7/8
4/2/2021 6.4.1.1 Diferencia divididas de Newton.ipynb - Colaboratory

$f[18.3, 13.7]$ se ha calculado en $b_2$.

$f[22.9, 18.3, 13.7]=\dfrac{-0.130434783-(-0.47826087)}{22.9-13.7}=0.037807183$

$f[18.3, 13.7, 9.1]$ se ha calculado en $b_2$.

$b_3=f[22.9, 18.3, 13.7, 9.1]=\dfrac{0.037807183-0.106332703}{22.9-9.1}=-0.004965617$

Para nalizar es necesario reeemplazar $x$, $b_0$, $b_1$, $b_2$ y $b_3$ en:

$$f_3(x)=b_0+b_1(x-x_0)+b_2(x-x_0)(x-x_1)+b_3(x-x_0)(x-x_1)(x-x_2)$$

$$f_3(15)=20.6+(-1.456521739)*(15-9.1)+0.106332703*(15-9.1)*(15-13.7)+(-0.004965617)*(15-
9.1)*(15-13.7)*(15-18.3)=12.947778$$

https://colab.research.google.com/drive/1zL5p2f1XURCqWkHcOr0W3pN_NqQ-aGKk 8/8
4/2/2021 6.4.1.2 Lagrange - Colaboratory

Lagrange

Es necesario seguir los pasos iniciales de los métodos anterior: ordenar y elegir el intervalo de
trabajo. Para encontrar el polinomio se usan las siguientes ecuaciones:
n

fn (x) = ∑ L i (x)f (x i )

i=0

n
x − xj
L i (x) = ∏
xi − xj
j=0,i≠j

∑ : Sumatoria.
∏ : Productoria.

Aplicación
Resolver el problema, usando un polinomio de tercer grado.

El intervalo de trabajo es el segundo:


N° Temperatura (°C) Profundidad (m)

Puntos f (xi ) xi

0 20.6 9.1
1 13.9 13.7

2 11.7 18.3
3 11.1 22.9

El primer lugar se calculan las L:

Calculando L0 (15) :
x − x1 x − x2 x − x3
L 0 (x) = ∗ ∗
x0 − x1 x0 − x2 x0 − x3

15 − 13.7 15 − 18.3 15 − 22.9


L 0 (15) = ∗ ∗ = −0.05803094435768887
9.1 − 13.7 9.1 − 18.3 9.1 − 22.9

Calculando L1 (15) :
x − x0 x − x2 x − x3
L 1 (x) = ∗ ∗
x1 − x0 x1 − x2 x1 − x3

15 − 9.1 15 − 18.3 15 − 22.9


L 1 (15) = ∗ ∗ = 0.7901136270239172
13.7 − 9.1 13.7 − 18.3 13.7 − 22.9

Calculando L2 (15) :
https://colab.research.google.com/drive/1DJ6jSD6QkxTY6MPTa0XqHovzzjrJBlSR 1/2
4/2/2021 6.4.1.2 Lagrange - Colaboratory
x − x0 x − x1 x − x3
L 2 (x) = ∗ ∗
x2 − x0 x2 − x1 x2 − x3

15 − 9.1 15 − 13.7 15 − 22.9


L 2 (15) = ∗ ∗ = 0.31125688337305846
18.3 − 9.1 18.3 − 13.7 18.3 − 22.9

Calculando L3 (15) :
x − x0 x − x1 x − x2
L 3 (x) = ∗ ∗
x3 − x0 x3 − x1 x3 − x2

15 − 9.1 15 − 13.7 15 − 18.3


L 3 (15) = ∗ ∗ = −0.04333956603928667
22.9 − 9.1 22.9 − 13.7 22.9 − 18.3

Finalmente se aplica la ecuación:


3

f3 (x) = ∑ L i (x)f (x i )

i=0

f3 (x) = L 0 (x)f (x 0 ) + L 1 (x)f (x 1 ) + L 2 (x)f (x 2 ) + L 3 (x)f (x 3 ) = −0.05803094435768887 ∗ 2

+ 0.31125688337305846 ∗ 11.7 + (−0.04333956603928667) ∗ 11.1 = 12.947778

https://colab.research.google.com/drive/1DJ6jSD6QkxTY6MPTa0XqHovzzjrJBlSR 2/2
4/2/2021 6.4.1.3 Coeficientes de una interpolación polinomial.ipynb - Colaboratory

Coe cientes de una interpolación polinomial


Código Texto

Consiste en encontrar un polinomio de grado n , donde n es igual al número de observaciones


menos uno, a partir de la ecuación del polinomio deseado.
2 n
fn (x) = a0 + a1 x + a2 x + … + an x

Se forma un sistema de ecuaciones, donde cada ecuación es un polinomio de grado deseado y


grado más un datos, de tal forma que el sistema es lineal.

Aplicación
Resolver el problema, usando un polinomio de tercer grado.

El intervalo de trabajo es el segundo:


N° Temperatura (°C) Profundidad (m)

Puntos f (xi ) xi

0 20.6 9.1
1 13.9 13.7

2 11.7 18.3
3 11.1 22.9

Usando la ecuación del polinomio de tercer grado:


2 3
f3 (x) = a0 + a1 x + a2 x + a3 x

y los puntos del segmento de trabajo se construye en sistema de ecuaciones lineales:


2 3
⎧ f (x 0 ) = a0 + a1 x 0 + a2 x + a3 x
⎪ 0 0


⎪ 2 3
f (x 1 ) = a0 + a1 x 1 + a2 x + a3 x
1 1

2 3
⎪ f (x 2 ) = a0 + a1 x 2 + a2 x 2 + a3 x 2



⎪ 3
2
f (x 3 ) = a0 + a1 x 3 + a2 x + a3 x
3 3

Reemplazando los valores de los puntos:


2 3
⎧ 20.6 = a0 + a1 ∗ 9.1 + a2 ∗ 9.1 + a3 ∗ 9.1



⎪ 2 3
13.9 = a0 + a1 ∗ 13.7 + a2 ∗ 13.7 + a3 ∗ 13.7

2 3
⎪ 11.7 = a0 + a1 ∗ 18.3 + a2 ∗ 18.3 + a3 ∗ 18.3




2 3
11.1 = a0 + a1 ∗ 22.9 + a2 ∗ 22.9 + a3 ∗ 22.9

Simpli cando y representando matricialmente:

https://colab.research.google.com/drive/19IKH3Axnzqo4gy1-jYNgkfv4m2egEsaL 1/2
4/2/2021 6.4.1.3 Coeficientes de una interpolación polinomial.ipynb - Colaboratory

1 9.1 82.81 753.571 a0 20.6


⎡ ⎤ ⎡ ⎤ ⎡ ⎤

⎢1 13.7 187.69 2571.353 ⎥ ⎢ a1 ⎥ ⎢ 13.9 ⎥


⎢ ⎥∗ ⎢ ⎥ = ⎢ ⎥
⎢1 18.3 334.89 6128.487 ⎥ ⎢a ⎥ ⎢ 11.7 ⎥
2

⎣ ⎦ ⎣ ⎦ ⎣ ⎦
1 22.9 524.41 12008.989 a3 11.1

Resolviendo el sistema:
a0 58.4397083
⎡ ⎤ ⎡ ⎤

⎢ a1 ⎥ ⎢ −6.57182509 ⎥
⎢ ⎥ = ⎢ ⎥
⎢a ⎥ ⎢ 0.310419578 ⎥
2

⎣ ⎦ ⎣ ⎦
a3 −0.00496561738

Por lo tanto el polinomio resultado es:


2 3
f3 (x) = 58.4397083 − 6.57182509x + 0.310419578x − 0.00496561738x

Sustituyendo el valor de la variable independiente:


2 3
f3 (15) = 58.4397083 − 6.57182509 ∗ 15 + 0.310419578 ∗ 15 − 0.00496561738 ∗ 15 = 12.947

Como se puede ver los tres métodos obtienen la misma respuesta, por lo tanto generan el mismo
polinomio.

https://colab.research.google.com/drive/19IKH3Axnzqo4gy1-jYNgkfv4m2egEsaL 2/2
4/2/2021 6.4.2 Interpolación Spline.ipynb - Colaboratory

Interpolación Spline

Usar todos los datos observados para encontrar un polinomio es una buena estrategia que
garantiza transiciones suaves entre los intervalos, pero cuando el fenómeno cambia bruscamente
resulta ser una estrategia mala, el polinomio resultante está lejos de la función real, en este caso
sería mejor un ajuste polinomial de primer grado; como se puede ver en la gura:

Una mejor estrategia es usar una función spline o simplmente spline. Una función spline está
formada por varios polinomios, cada uno de nido sobre un subintervalo, que se unen entre sí
obedeciendo a ciertas condiciones de continuidad. Las transiciones entre cada intervalo son suaves
porque los dos intervalos tienen la misma pendiente.

Se pueden calcular splines de diferentes grados para los más útiles en ingeniería son:

1. Spline lineal.
2. Spline cuadrático.
3. Spline cúbico.
https://colab.research.google.com/drive/1FDY3giTu15uTqFJdZiocG3-2t-AhqsTA 1/2
4/2/2021 6.4.2.1 Spline lineal.ipynb - Colaboratory

Spline lineal

Consiste en encontrar un polinomio de primer orden (f i(x) = ai x + bi ) para cada segmento, como
se puede ver a continuación:

Es equivalente a la interpolación polinomial de primer grado.

https://colab.research.google.com/drive/1cTurDYCf3xANsZ8UewItE_bj9uCFoW2F 1/2
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory

Spline cuadrático

Consiste en encontrar un polinomio de segundo orden (fi (x) = ai x2 + b i x + ci ) para cada


segmento.

El modelo tiene dos tipos de nodos:

Nodos nales, son el primer y último datos observados.


Nodos interiores, son los otros datos, cada uno de estos nodos participan de dos intervalos.

Los puntos se empiezan a contar desde cero y el índice del último dato observado es igual al
número de intervalos.

Es necesario encontrar los coe cientes que de nen el polinomio de segundo orden (ai , bi y ci ), es
necesario un sistema de 3n ecuaciones y 3n incógnitas. Para encontrarlas se siguen los siguientes
criterios:

https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 1/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory

1. Los valores de las funciones deben ser iguales en los nodos interiores. Esta condición se
representa mediante:
2
ai−1 x + bi−1 x i−1 + ci−1 = f (x i−1 )
i−1

2
ai x + bi x i−1 + ci = f (x i−1 )
i−1

i = 2⋯n

Se generan 2n − 2 ecuaciones.

2. La primera y la última función deben pasar a través de los puntos nales. Esto agrega dos
ecuaciones adicionales:
2
a1 x + b1 x 0 + c1 = f (x 0 )
0
2
an x n + bn x n + cn = f (x n )

Se generan 2 ecuaciones.

3. Las primeras derivadas en los nodos interiores deben ser iguales:



f (x) = 2ax + b

2ai−1 x i−1 + bi−1 = 2ai x i−1 + bi

i = 2⋯n

Se generan n − 1 ecuaciones.

4. Se asume que el primer tramo es una recta:

a1 = 0

Se generan 1 ecuación.

Una vez resulto el sistema de ecuaciones construir los polinomios para cada segmento.

Finalmente identi car el segmento donde se encuentra el valor de la variable independiente y con su
polonimio encontrar el valor de la variable dependiente.

Note que es necesario trabajar con todos los datos desde un principio esto representa mayor
trabajo, pero mejora los resultados.

Aplicación
Resolver el problema aplicando spline cuadrático.

El problema tiene ocho datos observados por lo tanto tiene siete intervalos, al igual que en la
interpolación polinomial es necesario ordenar los datos.
i Temperatura (°C) Profundidad (m)

0 22.8 0
1 22.8 2.3

https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 2/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory

i Temperatura (°C) Profundidad (m)

2 22.8 4.9
3 20.6 9.1
4 13.9 13.7
5 11.7 18.3
6 11.1 22.9
7 11.1 27.2

Criterio 1:

i = 2

2
a1 x + b1 x 1 + c1 = f (x 1 )
1
2
a2 x + b2 x 1 + c2 = f (x 1 )
1
2
a1 (2.3) + b1 (2.3) + c1 = f (2.3)
2
a2 (2.3) + b2 (2.3) + c2 = f (2.3)

i = 3

2
a2 x + b2 x 2 + c2 = f (x 2 )
2
2
a3 x + b3 x 2 + c3 = f (x 2 )
2
2
a2 (4.9) + b2 (4.9) + c2 = f (4.9)
2
a3 (4.9) + b3 (4.9) + c3 = f (4.9)

i = 4

2
a3 x + b3 x 3 + c3 = f (x 3 )
3
2
a4 x + b4 x 3 + c4 = f (x 3 )
3
2
a3 (9.1) + b3 (9.1) + c3 = f (9.1)
2
a4 (9.1) + b4 (9.1) + c4 = f (9.1)

i = 5

2
a4 x + b4 x 4 + c4 = f (x 4 )
4
2
a5 x + b5 x 4 + c5 = f (x 4 )
4
2
a4 (13.7) + b4 (13.7) + c4 = f (13.7)
2
a5 (13.7) + b5 (13.7) + c5 = f (13.7)

i = 6

2
a5 x + b5 x 5 + c5 = f (x 5 )
5
2
a6 x + b6 x 5 + c6 = f (x 5 )
5
2
a5 (18.3) + b5 (18.3) + c5 = f (18.3)
2
a6 (18.3) + b6 (18.3) + c6 = f (18.3)

i = 7

https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 3/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory
2
a6 x + b6 x 6 + c6 = f (x 6 )
6
2
a7 x + b7 x 6 + c7 = f (x 6 )
6
2
a6 (22.9) + b6 (22.9) + c6 = f (22.9)
2
a7 (22.9) + b7 (22.9) + c7 = f (22.9)

Criterio 2:
2
a1 x + b1 x 0 + c1 = f (x 0 )
0
2
a7 x + b7 x 7 + cn = f (x 7 )
7
2
a1 (0) + b1 (0) + c1 = f (0)
2
a7 (27.2) + b7 (27.2) + cn = f (27.2)

Criterio 3:

i = 2

2a1 x 1 + b1 = 2a2 x 1 + b2

2a1 (2.3) + b1 = 2a2 (2.3) + b2

i = 3

2a2 x 2 + b2 = 2a3 x 2 + b3

2a2 (4.9) + b2 = 2a3 (4.9) + b3

i = 4

2a3 x 3 + b3 = 2a4 x 3 + b4

2a3 (9.1) + b3 = 2a4 (9.1) + b4

i = 5

2a4 x 4 + b4 = 2a5 x 4 + b5

2a4 (13.7) + b4 = 2a5 (13.7) + b5

i = 6

2a5 x 5 + b5 = 2a6 x 5 + b6

2a5 (18.3) + b5 = 2a6 (18.3) + b6

i = 7

2a6 x 6 + b6 = 2a7 x 6 + b7

2a6 (22.9) + b6 = 2a7 (22.9) + b7

Criterio 4:

a1 = 0

A partir de la aplicación de las cuatro criterios se obtiene:


5.29 2.3 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 4/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory
5.29 2.3 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 0. 5.29 2.3 1. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 0. 24.01 4.9 1. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 24.01 4.9 1. 0. 0. 0. 0. 0.


0. 0. 0. 0. 0. 0. 82.81 9.1 1. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 82.81 9.1 1. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 187.69 13.7 1. 0. 0.

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 187.6913.7 1.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 334.8918.3 1.


0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 4.6 1. 0. −4.6 −1. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 9.8 1. 0. −9.8 −1. 0. 0. 0. 0. 0. 0.


0. 0. 0. 0. 0. 0. 18.2 1. 0. −18.2 −1. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 27.4 1. 0. −27.4 −1.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 36.6 1.

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

a1 22.8
⎡ ⎤ ⎡ ⎤

⎢ b1 ⎥ ⎢ 22.8 ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ 22.8 ⎥
⎢ 1 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a2 ⎥ ⎢ 22.8 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
20.6
⎢ b2 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ 20.6 ⎥
2
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a3 ⎥ ⎢ 13.9 ⎥
⎢ ⎥ ⎢ ⎥
⎢ b ⎥ ⎢ 13.9 ⎥
⎢ 3 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c3 ⎥ ⎢ 11.7 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
a 11.7
⎢ 4 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
∗ ⎢ b ⎥ = ⎢ 11.1 ⎥
4
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c4 ⎥ ⎢ 11.1 ⎥
⎢ ⎥ ⎢ ⎥
⎢a ⎥ ⎢ 22.8 ⎥
⎢ 5 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b5 ⎥ ⎢ 11.1 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ 0. ⎥
c
⎢ 5 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a6 ⎥ ⎢ 0. ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
0.
⎢ b6 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ 0 ⎥
https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 5/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory
⎢ c ⎥ ⎢ 0. ⎥
6
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a7 ⎥ ⎢ 0. ⎥
⎢ ⎥ ⎢ ⎥
⎢ b ⎥ ⎢ 0. ⎥
7
⎣ ⎦ ⎣ ⎦
c7 0.

Resolviendo el sistema:

a1 0.
⎡ ⎤ ⎡ ⎤

⎢ b1 ⎥ ⎢ 0. ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ 22.8 ⎥
⎢ 1 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a2 ⎥ ⎢ 0. ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
0.
⎢ b2 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ 22.8 ⎥
2
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a3 ⎥ ⎢ 0.124716553 ⎥
⎢ ⎥ ⎢ ⎥
⎢ b ⎥ ⎢ 1.22222222 ⎥
⎢ 3 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c3 ⎥ ⎢ 19.8055556 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ −0.0888918895 ⎥
a
⎢ 4 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b4 ⎥ = ⎢ 0.570213341 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c4 ⎥ ⎢ 22.772196 ⎥
⎢ ⎥ ⎢ ⎥
⎢a ⎥ ⎢ 0.301557296 ⎥
⎢ 5 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b5 ⎥ ⎢ −10.1280943 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ 96.0556036 ⎥
c
⎢ 5 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a6 ⎥ ⎢ −0.225942929 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
9.1784139
⎢ b6 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ −80.5989468 ⎥
6
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a7 ⎥ ⎢ 0.27204006 ⎥
⎢ ⎥ ⎢ ⎥
⎢ b ⎥ ⎢ −13.629207 ⎥
7

⎣ ⎦ ⎣ ⎦
c7 180.548312

Los polinomios resultantes son:


Profundidad (Metros) Polinomio resultante para Temperatura (Grados centrígrados)

0 ≤ x ≤ 2.3 22.8

2.3 ≤ x ≤ 4.9 22.8

2
4.9 ≤ x ≤ 9.1 −0.124716553x + 1.22222222x + 19.8055556

2
9.1 ≤ x ≤ 13.7 −0.0888918895x + 0.570213341x + 22.772196

2
13.7 ≤ x ≤ 18.3 0.301557296x − 10.1280943x + 96.0556036

2
18.3 ≤ x ≤ 22.9 −0.225942929x + 9.1784139x − 80.5989468

2
22.9 ≤ x ≤ 27.2 0.27204006x − 13.629207x + 180.548312

https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 6/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory

El valor de la variable independiete es 15m que se encuentrar en el intervalo 13.7 ≤ x ≤ 18.3 por lo
tanto se debe usar el polinomio:
2
0.301557296x − 10.1280943x + 96.0556036

2
f (15) = 0.301557296(15) − 10.1280943(15) + 96.0556036 = 11.98458

import matplotlib as mpl


import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

fig, ax = plt.subplots()

profundidad = [0, 2.3, 4.9, 9.1, 13.7, 18.3, 22.9, 27.2]


temperatura = [22.8, 22.8, 22.8, 20.6, 13.9, 11.7, 11.1, 11.1]

plt.scatter(profundidad, temperatura, s=40, c='b', zorder=0)

x = np.linspace(0, 2.3, 100)


y = 0. * x + 22.8
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(2.3, 4.9, 100)


y = 0. * x ** 2 + 0. * x + 22.8
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(4.9, 9.1, 100)


y = -0.124716553 * x ** 2 + 1.22222222 * x + 19.8055556
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(9.1, 13.7, 100)


y = -0.0888918895 * x ** 2 + 0.570213341 * x + 22.772196
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(13.7, 18.3, 100)


y = 0.301557296 * x ** 2 - 10.1280943 * x + 96.0556036
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(18.3, 22.9, 100)


y = -0.225942929 * x ** 2 + 9.1784139 * x - 80.5989468
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(22.9, 27.2, 100)


y = 0.27204006 *x ** 2 - 13.629207 * x + 180.548312
ax.plot(x, y, linewidth=3, c='g', zorder=1)

plt.scatter(15, 11.98458, s=40, c='r', marker='s', zorder=2)

plt.xlabel("Profundidad (m)")
lt l b l("T t (°C)")
https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 7/8
4/2/2021 6.4.2.2 Spline cuadrático.ipynb - Colaboratory
plt.ylabel("Temperatura (°C)")
ax.legend();

No handles with labels found to put in legend.

https://colab.research.google.com/drive/1YGUGeXt8PK7nob80VRiy448XocAnRy6f 8/8
4/2/2021 6.4.2.3 Spline cúbico.ipynb - Colaboratory

Spline cúbico

Consiste en encontrar un polinomio de tercer orden (fi (x) = ai x3 + bi x


2
+ ci x + d i ) para cada
segmento.

Es necesario encontrar los coe cientes que de nen el polinomio de tercer orden (ai , bi , ci y di ), es
necesario un sistema de 4n ecuaciones y 4n incógnitas. Para encontrarlas se siguen los siguientes
criterios:

1. Los valores de las funciones deben ser iguales en los nodos interiores. Esta condición se
representa mediante:
3 2
ai−1 x + bi−1 x + ci−1 x i−1 + d i−1 = f (x i−1 )
i−1 i−1
3 2
ai x + bi x + ci x i−1 + d i = f (x i−1 )
i−1 i−1

i = 2⋯n

Se generan 2n − 2 ecuaciones.

2. La primera y la última función deben pasar a través de los puntos nales:


3 2
a1 x + b1 x + c1 x 0 + d 1 = f (x 0 )
0 0
3 2
an x n + bn x n + cn x n + d n = f (x n )

Se generan 2 ecuaciones.

3. Las primeras derivadas en los nodos interiores deben ser iguales:


′ 2
f (x) = 3ax + 2bx + c

2 2
3ai−1 x + 2bi−1 x i−1 + ci−1 = 3ai x + 2bi x i−1 + ci
i−1 i−1

i = 2⋯n

Se generan n − 1 ecuaciones.

4. Las segundas derivadas en los nodos interiores deben ser iguales:


′′
f (x) = 6ax + 2b

6ai−1 x i−1 + 2bi−1 = 6ai x i−1 + 2bi

i = 2⋯n

Se generan n − 1 ecuaciones.

5. Se asume que las segundas derivadas en los puntos nales son iguales a cero:
6a1 x 0 + 2b1 = 0

6an x n + 2bn = 0

Se generan 2 ecuaciones.

Una vez resulto el sistema de ecuaciones construir los polinomios para cada segmento.
https://colab.research.google.com/drive/1hYk2uuEjQdU8Qg0vQLgDg12jC57PvrJQ 1/6
4/2/2021 6.4.2.3 Spline cúbico.ipynb - Colaboratory

Finalmente identi car el segmento donde se encuentra el valor de la variable independiente y con su
polonimio encontrar el valor de la variable dependiente.

Note que es necesario trabajar con todos los datos desde un principio esto representa mayor
trabajo, pero mejora los resultados.

Aplicación
Resolver el problema aplicando spline cúbico.

A partir de la aplicación de los cinco criterios se obtiene:


12.167 5.29 2.3 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 0. 0. 12.167 5.29 2.3 1. 0. 0. 0. 0. 0.



⎢ 0. 0. 0. 0. 117.649 24.01 4.9 1. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 117.649 24.01 4.9 1. 0.


0. 0. 0. 0. 0. 0. 0. 0. 753.571 82.81 9.1 1. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 753.571


0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 2571.35


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 15.87 4.6 1. 0. −15.87 −4.6 −1. 0. 0. 0. 0. 0. 0.


0. 0. 0. 0. 72.03 9.8 1. 0. −72.03 −9.8 −1. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 248.43 18.2 1. 0. −248.43


0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 563.07


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 13.8 2. 0. 0. −13.8 −2. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 29.4 2. 0. 0. −29.4 −2. 0. 0. 0.

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 54.6 2. 0. 0. −54.6


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 82.2

⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.


⎢ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

⎢ 0 2 0 0 0 0 0 0 0 0 0 0 0
https://colab.research.google.com/drive/1hYk2uuEjQdU8Qg0vQLgDg12jC57PvrJQ 2/6
4/2/2021 6.4.2.3 Spline cúbico.ipynb - Colaboratory
⎢ 0. 2. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

Haz doble clic (o pulsa Intro) para editar

Resolviendo el sistema:

https://colab.research.google.com/drive/1hYk2uuEjQdU8Qg0vQLgDg12jC57PvrJQ 3/6
4/2/2021 6.4.2.3 Spline cúbico.ipynb - Colaboratory

a1 0.002174
⎡ ⎤ ⎡ ⎤

⎢ b1 ⎥ ⎢ 0. ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ −0.0115 ⎥
⎢ 1 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ d1 ⎥ ⎢ 22.8 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ −0.009172 ⎥
a
⎢ 2 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b2 ⎥ ⎢ 0.078283 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
c −0.191551
⎢ 2 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ d2 ⎥ ⎢ 22.938039 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
−0.011415
⎢ a3 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b ⎥ ⎢ 0.111256 ⎥
3
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c3 ⎥ ⎢ −0.353116 ⎥
⎢ ⎥ ⎢ ⎥
⎢d ⎥ ⎢ 23.201928 ⎥
⎢ 3 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a4 ⎥ ⎢ 0.029731 ⎥
⎢ ⎥ ⎢ ⎥
⎢ b ⎥ ⎢ −1.012018 ⎥
⎢ 4 ⎥ = ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c4 ⎥ ⎢ 9.868674 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ −7.804166 ⎥
d
⎢ 4 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ a5 ⎥ ⎢ −0.01531 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ 0.839182 ⎥
b
⎢ 5 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ c5 ⎥ ⎢ −15.492766 ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
108.013072
⎢ d5 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢a ⎥ ⎢ 0.00171 ⎥
6
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b6 ⎥ ⎢ −0.095592 ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ 1.613588 ⎥
6
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ d6 ⎥ ⎢ 3.664319 ⎥
⎢ ⎥ ⎢ ⎥
⎢a ⎥ ⎢ −0.001731 ⎥
⎢ 7 ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ b7 ⎥ ⎢ 0.141272 ⎥
⎢ ⎥ ⎢ ⎥
⎢ c ⎥ ⎢ −3.810587 ⎥
7

⎣ ⎦ ⎣ ⎦
d7 45.068852

Los polinomios resultantes son:


Profundidad (Metros) Polinomio resultante para Temperatura (Grados centrígrados)
3
0 ≤ x ≤ 2.3 0.002174x − 0.0115x + 22.8

3 2
2.3 ≤ x ≤ 4.9 −0.009172x + 0.078283x − 0.191551x + 22.938039

3 2
4.9 ≤ x ≤ 9.1 −0.011415x + 0.111256x − 0.353116x + 23.201928

3 2
9.1 ≤ x ≤ 13.7 0.029731x − 1.012018x + 9.868674x − 7.804166

3 2
13.7 ≤ x ≤ 18.3 −0.01531x + 0.839182x − 15.492766x + 108.013072

3 2
18.3 ≤ x ≤ 22.9 0.00171x − 0.095592x + 1.613588x + 3.664319

https://colab.research.google.com/drive/1hYk2uuEjQdU8Qg0vQLgDg12jC57PvrJQ 4/6
4/2/2021 6.4.2.3 Spline cúbico.ipynb - Colaboratory

Profundidad (Metros) Polinomio resultante para Temperatura (Grados centrígrados)


3 2
22.9 ≤ x ≤ 27.2 −0.001731x + 0.141272x − 3.810587x + 45.068852

El valor de la variable independiete es 15m que se encuentrar en el intervalo 13.7 ≤ x ≤ 18.3 por lo
tanto se debe usar el polinomio:
3 2
−0.01531x + 0.839182x − 15.492766x + 108.013072

3 2
f (15) = $ − 0.01531(15) + 0.839182(15) − 15.492766(15) + 108.013072$ = 12.76519

import matplotlib as mpl


import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

fig, ax = plt.subplots()

profundidad = [0, 2.3, 4.9, 9.1, 13.7, 18.3, 22.9, 27.2]


temperatura = [22.8, 22.8, 22.8, 20.6, 13.9, 11.7, 11.1, 11.1]

plt.scatter(profundidad, temperatura, s=40, c='b', zorder=0)

x = np.linspace(0, 2.3, 100)


y = 0.0021738865354947 * x ** 3 + 0.0 * x ** 2 - 0.011499859772765627 * x + 22.8
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(2.3, 4.9, 100)


y = -0.009171485797679268 * x ** 3 + 0.07828306909890038 * x ** 2 - 0.1915509187002365 * x
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(4.9, 9.1, 100)


y = -0.011414507785620063 * x ** 3 + 0.11125549232162985 * x ** 2 - 0.35311579249160835 *
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(9.1, 13.7, 100)


y = 0.02973104373004509 * x ** 3 - 1.012018064056026 * x ** 2 + 9.868673570545038 * x - 7.
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(13.7, 18.3, 100)


y = -0.01531031715483091 * x ** 3 + 0.8391818683123753 * x ** 2 - 15.492765502902031 * x +
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(18.3, 22.9, 100)


y = 0.0017165206072045274 * x ** 3 - 0.09559152482336974 * x ** 2 + 1.6135875914820863 * x
ax.plot(x, y, linewidth=3, c='g', zorder=1)

x = np.linspace(22.9, 27.2, 100)


y = -0.001731274487719509 * x ** 3 + 0.1412719981979118 * x ** 2 - 3.810587085705266 * x +
ax.plot(x, y, linewidth=3, c='g', zorder=1)
https://colab.research.google.com/drive/1hYk2uuEjQdU8Qg0vQLgDg12jC57PvrJQ 5/6
4/2/2021 6.4.2.3 Spline cúbico.ipynb - Colaboratory

plt.scatter(15, 12.76519, s=40, c='r', marker='s', zorder=2)

plt.xlabel("Profundidad (m)")
plt.ylabel("Temperatura (°C)")
ax.legend();

No handles with labels found to put in legend.

https://colab.research.google.com/drive/1hYk2uuEjQdU8Qg0vQLgDg12jC57PvrJQ 6/6
4/2/2021 7.1.1 Formulas de Integración de Newton-Cotes.ipynb - Colaboratory

Formulas de Integración de Newton-Cotes

Las formulas de integración de Newton-Cotes son el esquema más popular de integración


numérica. Consiste en en reemplazar una función (f (x) ), por un polinomio (fn (x) ) equivalente.
b b

I = ∫ f (x)dx ≊ ∫ fn (x)dx
a a

En la grá ca P (x) = fn (x)

Si f (x) y fn (x) sin aproximadamente iguales entre a y b entonces las áreas debajo de ellas serán
aproximadamente iguales, por lo tanto es posible integrar una ecuación muy compleja si se
encuentra un polinomio que sea aproximadamente igual en el segmento de integración.

Según el grado del polinomio existen tres variantes o reglas:

Regla trapezoidal.
Regla de Simpson 1/3.
Regla de Simpson 3/8.

https://colab.research.google.com/drive/1FefuN6MO1HdRhpzH9w4WCuRDFfWjhMrk 1/2
4/2/2021 7.1.1.1 Regla trapezoidal.ipynb - Colaboratory

Regla trapezoidal

Consiste en reemplazar la función (f (x) ) por un polinomio de primer grado (f1 (x) ) en el segmento
de integración.
b b

I = ∫ f (x)dx ≊ ∫ f1 (x)dx
a a

El polinomio de primer grado (f1 (x) ) se puede calcular usando una interpolación polinomial de
primer grado, se puede ver que en lugar de x0 y x1 se usan los límites de la integral.
f (b) − f (a)
f1 (x) = f (a) + (x − a)
b −a

b
f (b) − f (a)
I = ∫ f (a) + (x − a)dx
a
b −a

Resolviendo la integral se obtiene la regla trapezoidal:


f (a) + f (b)
I = (b − a)
2

Si bien el razonamiento y la obtención de la regla son fáciles, esta regla genera un error muy grande,
como se puede ver a continuación.

Dependiendo de la función y del punto especí co del segmento el error puede cambiar, para estimar
el error se usa la siguiente fórmula:
1
′′ 3
E = − f (ξ)(b − a)
12

a ≤ ξ ≤ b

Donde ξ es el punto especí co del segmento del cual se debea calcular el error.

https://colab.research.google.com/drive/1oe7D0-wroVMhXijQwepQmMnA1lcjaiyo 1/4
4/2/2021 7.1.1.1 Regla trapezoidal.ipynb - Colaboratory

Aplicación múltiple de la regla trapezoidal


Si bien la regla trapezoidal es fácil de aplicar solo sirve si la función es muy cercana a una línea
recta en el segmento de integración. Es posible dividir el segmento de integración en subsegmentos,
aplicar a cada uno de ellos la regla trapazoidal y sumar el resultado de cada subsegmento, como se
puede ver en la siguiente gura.

Se puede apreciar que mientras mayor sea la cantidad de subsegmentos mejor la integración,
gracias a las computadoras esto es posible generando miles de subsegmentos.
Todos los subsegmentos deben tener el mismo ancho, que se calcula con la siguiente ecuación:
b −a
h =
n

Donde:

h , ancho del subsegmento, para obtener mejores resultados debe tener una cantidad nita de
decimales.
n , cantidad de subsegmentos, mientras más subsegmentos mejor la aproximación.
a , límite inferior.
b , límite superior.

La integral aproximada de la función se calcula de la siguiente manera:


x1 x2 xn

I = ∫ f1 (x)dx + ∫ f1 (x)dx + … + ∫ f1 (x)dx


x0 x1 x n−1

Resolviendo las integrales:


f (x 0 ) + f (x 1 ) f (x 1 ) + f (x 2 ) f (x n−1 ) + f (x n )
I = h +h +… +h
2 2 2

Simpli cando se obtiene la regla trapezoidal múltiple:


n−1
h
I = [f (x 0 ) + 2 ∑ f (x i ) + f (x n )]
2
i=1

https://colab.research.google.com/drive/1oe7D0-wroVMhXijQwepQmMnA1lcjaiyo 2/4
4/2/2021 7.1.1.1 Regla trapezoidal.ipynb - Colaboratory

El error se calcula de la siguiente manera:


3 n
(b − a)
′′
E = − ∑f (ξi )
3
12n
i=1

x i−1 ≤ ξi ≤ x i

Aplicación
Calcule la siguiente integral:
3
2 x
I = ∫ x e dx
0

a = 0

b = 3

n = 11

b−a 3−0
h = = = 0.2727272727272727 …
n 11

Como se puede ver h no tiene una cantidad nita de decimales por lo tanto no usar n = 11 no es
buena idea.

n = 12

b−a 3−0
h = = = 0.25
n 12

Usando n = 12 se obtiene un mejor h .


n−1
h
I = [f (x 0 ) + 2 ∑ f (x i ) + f (x n )]
2
i=1

h
I = [f (x 0 ) + 2(f (x 1 ) + f (x 2 ) + f (x 3 ) + f (x 4 ) + f (x 5 ) + f (x 6 ) + f (x 7 ) + f (x 8 ) + f (x 9 ) +
2

x0 = a = 0

x 1 = x 0 + h = 0 + 0.25 = 0.25

x 2 = x 1 + h = 0.25 + 0.25 = 0.5

x 3 = x 2 + h = 0.5 + 0.25 = 0.75

x 4 = x 3 + h = 0.75 + 0.25 = 1

x 5 = x 4 + h = 1 + 0.25 = 1.25

x 6 = x 5 + h = 1.25 + 0.25 = 1.5

x 7 = x 6 + h = 1.5 + 0.25 = 1.75

x 8 = x 7 + h = 1.75 + 0.25 = 2

x 9 = x 8 + h = 2 + 0.25 = 2.25

x 10 = x 9 + h = 2.25 + 0.25 = 2.5

x 11 = x 10 + h = 2.5 + 0.25 = 2.75

https://colab.research.google.com/drive/1oe7D0-wroVMhXijQwepQmMnA1lcjaiyo 3/4
4/2/2021 7.1.1.1 Regla trapezoidal.ipynb - Colaboratory

x 12 = b = 3

En general:

x0 = a

xn = b

x i+1 = x i + h

Reemplazando:
h
I = [f (0) + 2(f (0.25) + f (0.5) + f (0.75) + f (1) + f (1.25) + f (1.5) + f (1.75) + f (2) + f (2
2

= 99.99331307969648

Resolviendo algebraicamente:
3 3

2 x x 2
I = ∫ x e dx = e (2 − 2x + x )∣ = 98.42768461593835
0

0

Como se puede ver el resultado obtenido con n = 12 está muy lejos del valor verdadero, con
n = 16000 se obtiene I = 98.42768549861893 que tiene 6 decimales de similitud.

Para que la regla sea útil es necesario usar una cantidad de subsegmentos muy grande.

https://colab.research.google.com/drive/1oe7D0-wroVMhXijQwepQmMnA1lcjaiyo 4/4
4/2/2021 7.1.1.2 Regla de Simpson 1/3.ipynb - Colaboratory

Regla de Simpson 1/3


Código Texto

Consiste en reemplazar la función ($f(x)$) por un polinomio de segundo grado ($f_2(x)$) en el


segmento de integración.

$$I = \int_a^b f(x) dx \approxeq \int_a^b f_2(x) dx$$

Para obtener un polinomio de segundo grado ($f_2(x)$) es necesario contar con tres puntos, los
límites son dos de ellos, el tercero se obtiene con el punto medio.

Aplicando el mismo razonamientos de la regla trapezoidal se obtiene la regla Simpson 1/3:

$$I=\frac{h}{3} \left[ f(x_0)+4f(x_1)+f(x_2) \right]$$

$h = \frac{(b-a)}{2}$
$x_0 = a$
$x_1 = x_0+h$
$x_2 = b$

Dependiendo de la función y del punto especí co del segmento el error puede cambiar, para estimar
el error se usa la siguiente fórmula:

$$E = -\frac{1}{90}h^5f^{(4)}(\xi)$$

$$a \leq \xi \leq b$$

Donde $\xi$ es el punto especí co del segmento del cual se debea calcular el error.

Aplicación múltiple de la regla de Simpson 1/3


Al igual que la regla trapezoidal se puede aplicar de manera múltiple la regla de de Simpson 1/3.

$$I=\int_{x_0}^{x_2} f_2(x) dx + \int_{x_2}^{x_4} f_2(x) dx + \ldots + \int_{x_{n-2}}^{x_n} f_2(x)


dx$$$$I=\int_{x_0}^{x_2} f_2(x) dx + \int_{x_2}^{x_4} f_2(x) dx + \ldots + \int_{x_{n-2}}^{x_n} f_2(x)
dx$$

Además de tener los cuidados mencionados en la regla trapezoidal, $n$$n$ debe ser par.

$$I=\frac{h}{3} \left[ f(x_0)+4\sum_{i=1,3,\ldots}^{n-1}f(x_i)+2\sum_{j=2,4,\ldots}^{n-2}f(x_j)+f(x_n)


\right]$$$$I=\frac{h}{3} \left[ f(x_0)+4\sum_{i=1,3,\ldots}^{n-1}f(x_i)+2\sum_{j=2,4,\ldots}^{n-
2}f(x_j)+f(x_n) \right]$$

El error se calcula de la siguiente manera:


https://colab.research.google.com/drive/1tjyMTNYXtkJHLEqj4XPPG8igbiDqqrn6 1/3
4/2/2021 7.1.1.2 Regla de Simpson 1/3.ipynb - Colaboratory

$$E = -\dfrac{(b-a)^5}{180n^5}\sum_{i=1}^n f^{(4)}(\xi_i)$$$$E = -\dfrac{(b-a)^5}


{180n^5}\sum_{i=1}^n f^{(4)}(\xi_i)$$

$$x_{i-1} \leq \xi_i \leq x_{i}$$$$x_{i-1} \leq \xi_i \leq x_{i}$$

Aplicación
Calcule la siguiente integral:

$$I=\int_{0}^3 x^2e^x dx$$$$I=\int_{0}^3 x^2e^x dx$$

$a=0$$a=0$

$b=3$$b=3$

$n=12$$n=12$

$h=\frac{b-a}{n}=\frac{3-0}{12}=0.25$$h=\frac{b-a}{n}=\frac{3-0}{12}=0.25$

$$I=\frac{h}{3} \left[ f(x_0)+4\sum_{i=1,3,\ldots}^{n-1}f(x_i)+2\sum_{j=2,4,\ldots}^{n-2}f(x_j)+f(x_n)


\right]$$$$I=\frac{h}{3} \left[ f(x_0)+4\sum_{i=1,3,\ldots}^{n-1}f(x_i)+2\sum_{j=2,4,\ldots}^{n-
2}f(x_j)+f(x_n) \right]$$

$$I=\frac{h}{3} \left[
f(x_0)+4(f(x_{1})+f(x_{3})+f(x_{5})+f(x_{7})+f(x_{9})+f(x_{11}))+2(f(x_2)+f(x_4)+f(x_6)+f(x_8)+f(x_{10
}))+f(x_{12}) \right]$$$$I=\frac{h}{3} \left[
f(x_0)+4(f(x_{1})+f(x_{3})+f(x_{5})+f(x_{7})+f(x_{9})+f(x_{11}))+2(f(x_2)+f(x_4)+f(x_6)+f(x_8)+f(x_{10
}))+f(x_{12}) \right]$$

$x_{0}=a = 0$$x_{0}=a = 0$
$x_{1}=x_{0}+h = 0 + 0.25 = 0.25$$x_{1}=x_{0}+h = 0 + 0.25 = 0.25$
$x_{2}=x_{1}+h = 0.25 + 0.25 = 0.5$$x_{2}=x_{1}+h = 0.25 + 0.25 = 0.5$
$x_{3}=x_{2}+h = 0.5 + 0.25 = 0.75$$x_{3}=x_{2}+h = 0.5 + 0.25 = 0.75$
$x_{4}=x_{3}+h = 0.75 + 0.25 = 1$$x_{4}=x_{3}+h = 0.75 + 0.25 = 1$
$x_{5}=x_{4}+h = 1 + 0.25 = 1.25$$x_{5}=x_{4}+h = 1 + 0.25 = 1.25$
$x_{6}=x_{5}+h = 1.25 + 0.25 = 1.5$$x_{6}=x_{5}+h = 1.25 + 0.25 = 1.5$
$x_{7}=x_{6}+h = 1.5 + 0.25 = 1.75$$x_{7}=x_{6}+h = 1.5 + 0.25 = 1.75$
$x_{8}=x_{7}+h = 1.75 + 0.25 = 2$$x_{8}=x_{7}+h = 1.75 + 0.25 = 2$
$x_{9}=x_{8}+h = 2 + 0.25 = 2.25$$x_{9}=x_{8}+h = 2 + 0.25 = 2.25$
$x_{10}=x_{9}+h = 2.25 + 0.25 = 2.5$$x_{10}=x_{9}+h = 2.25 + 0.25 = 2.5$
$x_{11}=x_{10}+h = 2.5 + 0.25 = 2.75$$x_{11}=x_{10}+h = 2.5 + 0.25 = 2.75$
$x_{12}=b = 3$$x_{12}=b = 3$

Reemplazando: $$I=98.44175237978556$$$$I=98.44175237978556$$

https://colab.research.google.com/drive/1tjyMTNYXtkJHLEqj4XPPG8igbiDqqrn6 2/3
4/2/2021 7.1.1.2 Regla de Simpson 1/3.ipynb - Colaboratory

Con $n=150$$n=150$ se obtiene $I=98.42768519973174$$I=98.42768519973174$ que tiene 6


decimales de similitud.

Como se puede ver la regla de Simpsin 1/3 es más e ciente que la regla trapezoidal.

https://colab.research.google.com/drive/1tjyMTNYXtkJHLEqj4XPPG8igbiDqqrn6 3/3
4/2/2021 7.1.1.3 Regla de Simpson 3/8.ipynb - Colaboratory

Regla de Simpson 3/8

Consiste en reemplazar la función (f (x) ) por un polinomio de tercer grado (f3 (x) ) en el segmento
de integración.
b b

I = ∫ f (x)dx ≊ ∫ f3 (x)dx
a a

Para obtener un polinomio de tercer grado (f3 (x) ) es necesario contar con cuatro puntos, los límites
son dos de ellos, los otros se obtienen al dividir el segmento en tres partes.

Aplicando el mismo razonamientos de la reglas anterios se obtiene la regla Simpson 3/8:


3h
I = [f (x 0 ) + 3f (x 1 ) + 3f (x 2 ) + f (x 3 )]
8

(b−a)
h =
3

x0 = a

x1 = x0 + h

x2 = x1 + h

x3 = b

Dependiendo de la función y del punto especí co del segmento el error puede cambiar, para estimar
el error se usa la siguiente fórmula:
3
5 (4)
E = − h f (ξ)
80

a ≤ ξ ≤ b

Donde ξ es el punto especí co del segmento del cual se debea calcular el error.

Aplicación múltiple de la regla de Simpson 3/8


Al igual que las reglas anteriores se puede aplicar de manera múltiple la regla de de Simpson 3/8.

https://colab.research.google.com/drive/1s1uOmYWrZ4UwLaax9suX1ZfLmTgZtbaN 1/2
4/2/2021 7.1.1.4 Segmentos desiguales.ipynb - Colaboratory

Segmentos desiguales

En ocasiones no es aconsejable dividir el segmento en parte iguales. En el afán de minimizar el


error, es recomendable usar segmentos desiguales. Si es necesario se puede aplicar un regla
diferente a cada subsegmento.

https://colab.research.google.com/drive/1PEebKfPsmBVB48H-X-wdqODRLswlFy-1 1/2
4/2/2021 7.1.2 Integración de Ecuaciones.ipynb - Colaboratory

Integración de Ecuaciones

Los métodos anteriores hacen uso de puntos y no directamente de las funciones, las funciones solo
sirven para generar los puntos usados en cada método, pero no se explotan las capacidades de las
funciones.

Los siguientes métodos explotan las capacidades de las funciones:

Romberg.
Cuadratura de Gauss.

https://colab.research.google.com/drive/1jSL9WbiA0Z0Y2G1Gm0IhvLVbxmxilH0Y 1/2
4/2/2021 7.1.2.1 Romberg.ipynb - Colaboratory

Romberg

Es una técnica e ciente de integración de funciones. Se basa en la aplicación sucesiva de la regla


trapezoidal. Los resultados se consiguen con menos esfuerzo.

La integral real (I ) es la sumatoria de la integral aproximada (I(h) ) y su error(E(h) ) ambas


dependen del ancho del subsegmento (h ), si se cambia el valor de h cambiarán la integral
aproximada y el error, pero la integral real sigue siendo la misma, se puede ver gra camente dicha
relación.

I(h) es cualquier método de integración numérica, generalmente se usa la regla trapezoidal


múltiple por ser la que menos cuidados tiene a la hora de de nir h .

Matemáticamente:

I = I(h) + E(h)

Si se calculan dos aproximaciones por separado se obtiene:

I(h 1 ) + E(h 1 ) = I(h 2 ) + E(h 2 )

El error de la regla trapezoidal se calcula con:


b −a
2 ′′
E = − h f (ξ)
12

En vista que el error depende del ancho del subsegmento, la ecuación del error se puede escribir
como:
b −a
2 ′′
E(h) = − h f (ξ)
12

Cuando se desea comparar dos métodos de integración o dos valores para h es necesario usar el
mismo ξ de esta manera se mantienen las mismas condiciones.

Sacando la relación entre los errores:


https://colab.research.google.com/drive/10ZpIBarQz4LurLP6sJji3NsoIBkMytKf 1/4
4/2/2021 7.1.2.1 Romberg.ipynb - Colaboratory
b −a
2 ′′
− h f (ξ)
E(h 1 ) 1
12
=
E(h 2 ) b −a
2 ′′
− h f (ξ)
2
12

b −a
Como se trata del mismo problema los límites de integración son los mismos, por lo tanto −
12

se puede simpli car:


2 ′′
E(h 1 ) h f (ξ)
1
=
2 ′′
E(h 2 ) h f (ξ)
2

La segunda derivada es la misma porque se trata de la misma función y en vista que se están
comparando dos valores para h , entonces ξ es el mismo, por lo tanto se puede simpli car,
quedando como resultado:
2
E(h 1 ) h
1
=
2
E(h 2 ) h
2

De esta ecuación se puede despejar E(h1 ) :


2
h1
E(h 1 ) = E(h 2 )( )
h2

Reemplezando la nueva formula de E(h1 ) en I(h1 ) + E(h1 ) = I(h2 ) + E(h2 ) se obtiene:


2
h1
I(h 1 ) + E(h 2 )( ) = I(h 2 ) + E(h 2 )
h2

Como se puede ver en esta expresión el único valor desconocido es E(h2 ) , por lo tanto se despeja
E(h 2 ) :
I(h 1 ) − I(h 2 )
E(h 2 ) =
2
h1
1 −( )
h2

Reemplazando E(h2 ) en I = I(h 2 ) + E(h 2 ) :


I(h 1 ) − I(h 2 )
I = I(h 2 ) +
2
h1
1 −( )
h2

h1
En el caso especial de que h2 =
2
:
I(h 1 ) − I(h 2 )
I = I(h 2 ) +
2
1 −2

Simpli cando:
I(h 1 ) − I(h 2 ) I(h 1 ) I(h 2 )
I = I(h 2 ) − = I(h 2 ) − +
3 3 3

Quedando la ecuación de la integración de Romberg de la siguiente manera:

https://colab.research.google.com/drive/10ZpIBarQz4LurLP6sJji3NsoIBkMytKf 2/4
4/2/2021 7.1.2.1 Romberg.ipynb - Colaboratory

4I(h 2 ) I(h 1 )
I = −
3 3

Aplicación
Calcule la siguiente integral:
3
2 x
I = ∫ x e dx
0

a = 0

b = 3

Siempre es buena idea calcular h con las consideraciones para cada método de integración, en este
caso se usará la regla trapeziodal.

Se calcula primero h1 :

n = 12

b−a 3−0
h1 = = = 0.25
n 12

Con h1 se calcula h2 :
h1 0.25
h2 = = = 0.125
2 2

Aplicando la regla trapezoidal con h1 :

I(0.25) = 99.99331307969648

Aplicando la regla trapezoidal con h2 :

I(0.125) = 98.81975768764006

Aplicando la ecuación de la integración de Romberg:


4I(h 2 ) I(h 1 ) 4(98.81975768764006) 99.99331307969648
I = − = − = 98.4285725569545
3 3 3 3

Para I(h1 ) se ha divido el segmento de integración en 12 partes, para I(h2 ) se ha divido en 24


partes haciendo un total de 36 subsegmentos a los que se les aplicó la regla trapezoidal.

Si se usar n = 80 para calcular h1 se obtiene:

I = 98.4276850669086

Que contiene 6 decimales de similitud con el valor verdadero. Para I(h1) se ha divido el segmento
de integración en 80 partes, para I(h2) se ha divido en 160 partes haciendo un total de 240
subsegmentos a los que se les aplicó la regla trapezoidal.
https://colab.research.google.com/drive/10ZpIBarQz4LurLP6sJji3NsoIBkMytKf 3/4
4/2/2021 7.1.2.2 Cuadratura de Gauss.ipynb - Colaboratory

Cuadratura de Gauss

En el método de Newton-Cotes sin importar la función en el mismo segmento de integreación


siempre se tomaban los mismos valores para x , en el caso la regla trapeziodal se usan para x los
límites, si importar la función:

Lo que puede producir errores muy grandes, siguiendo la misma idea de la regla trapezoidal de
trazar una línea recta entre los límites pero usando otros puntos de la función se puede conseguir
un trapecio que ajusta de mejor manera el área:

Estos puntos de referencia depende de cada función y permiten ajustar de mejor manera para
integral.

La integral se puede representar por:

I = c1 f (x 1 ) + c2 f (x 2 )

https://colab.research.google.com/drive/1m02uSpP9YYN4hLGYzvtgfkYGPpYA-m-Z 1/5
4/2/2021 7.1.2.2 Cuadratura de Gauss.ipynb - Colaboratory

Para calcular de manera éxitosa la integral es necesario calcular los valores para c1 , c2 , x1 y x2 .

Se debe construir un sistema de ecuaciones de cuarto grado, para lo cual se parte de integrales de
funciones conocidas:
0
x
1
x
2
x
3
x

Como se trata de una integración numérica es necesario que las integrales sean de nidas, para lo
cual se usa como límite inferior −1 y como superior 1 , quedando el sistema de ecuaciones:
1
⎧ c f (x ) + c f (x ) = ∫ 1dx
⎪ 1 1 2 2
⎪ −1


⎪ 1

c1 f (x 1 ) + c2 f (x 2 ) = ∫ xdx
−1

1 2
⎪ c1 f (x 1 ) + c2 f (x 2 ) = ∫ x dx
⎪ −1




⎪ 1 3
c1 f (x 1 ) + c2 f (x 2 ) = ∫ x dx
−1

Resolviendo las integrales:

⎧ c f (x 1 ) + c2 f (x 2 ) = 2
⎪ 1



c1 f (x 1 ) + c2 f (x 2 ) = 0

⎪ c1 f (x 1 ) + c2 f (x 2 ) = 0.666667




c1 f (x 1 ) + c2 f (x 2 ) = 0

Como se puede ver el sistema es no lineal y tiene muchas soluciones, una de ellas es:

c1 = 1

c2 = 1
1
x1 = −
√3
1
x2 =
√3

Por lo tanto:
1 1
I = f (− ) + f( )
– –
√3 √3

El método queda sujeto a los límites −1 y 1 .

Para usar otros límites se realiza un cambio de variable de x por xd :


(b + a) + (b − a)x d
x =
2

b −a
dx = dxd
2

El error se calcula:

https://colab.research.google.com/drive/1m02uSpP9YYN4hLGYzvtgfkYGPpYA-m-Z 2/5
4/2/2021 7.1.2.2 Cuadratura de Gauss.ipynb - Colaboratory
(4)
E = f (ξ)

Aplicación
Calcule la siguiente integral:
3
2 x
I = ∫ x e dx
0

a = 0

b = 3

En vista que los límites no son −1 y 1 no se puede aplicar directamente el método, es necesario
aplicar el cambio de variable:
(b + a) + (b − a)x d (3 + 0) + (3 − 0)x d
x = = = 1.5 + 1.5x d
2 2

b −a 3 −0
dx = dxd = d x d = 1.5d x d
2 2

Quedan la integral como:


1
2 1.5+1.5 x d
I = ∫ [(1.5 + 1.5x d ) e ] 1.5d x d
−1

Note los límites cambieron, ahora se puede aplicar la ecuación:


1 1
I = f (− ) + f( )
– –
√3 √3

Donde:
1 1 1.5+1.5(−
1
)
2
f (− ) = [(1.5 + 1.5(− )) e √3
] 1.5 = 1.13649267096
– –
√3 √3

1 1 1.5+1.5(
1
)
2
f( ) = [(1.5 + 1.5( )) e √3
] 1.5 = 89.4709075316
– –
√3 √3

1 1
I = f (− ) + f( ) = 90.6074002025
– –
√3 √3

Fórmulas con más puntos


En general se puede representar la aproximación de la siguiente manera:

I ≅ c0 f (x 0 ) + c1 f (x 1 ) + … + cn−1 f (x n−1 )

En lugar de calcular dos puntos se pueden calcular más puntos intermedios, este proceso lo hacen
los mátemáticos que encuentran nuevas soluciones, a continueción se muestran los valores para c
y x para diferentes puntos:
https://colab.research.google.com/drive/1m02uSpP9YYN4hLGYzvtgfkYGPpYA-m-Z 3/5
4/2/2021 7.1.2.2 Cuadratura de Gauss.ipynb - Colaboratory

3 puntos:

c0 = 0.5555556

c1 = 0.8888889

c2 = 0.5555556

x 0 = −0, 774596669

x 1 = 0.0

x 2 = 0.774596669
(6)
E = f (ξ)

4 puntos:

c0 = 0.3478548

c1 = 0.6521452

c2 = 0.6521452

c3 = 0.3478548

x 0 = −0.861136312

x 1 = −0.339981044

x 2 = 0.339981044

x 3 = 0.861136312
(8)
E = f (ξ)

5 puntos:

c0 = 0.2369269

c1 = 0.4786287

c2 = 0.5688889

c3 = 0.4786287

c4 = 0.2369269

x 0 = −0.906179846

x 1 = −0.538469310

x 2 = 0.0

x 3 = 0.538469310

x 4 = 0.906179846
(10)
E = f (ξ)

6 puntos:

c0 = 0.1713245

c1 = 0.3607616

c2 = 0.4679139

c3 = 0.4679139

c4 = 0.3607616

c5 = 0.1713245

https://colab.research.google.com/drive/1m02uSpP9YYN4hLGYzvtgfkYGPpYA-m-Z 4/5
4/2/2021 7.1.2.2 Cuadratura de Gauss.ipynb - Colaboratory

x 0 = −0.932469514

x 1 = −0.661209386

x 2 = −0.238619186

x 3 = 0.238619186

x 4 = 0.661209386

x 5 = 0.932469514
(12)
E = f (ξ)

https://colab.research.google.com/drive/1m02uSpP9YYN4hLGYzvtgfkYGPpYA-m-Z 5/5
4/2/2021 7.2.1 Fórmulas de alta precisión - Colaboratory

Fórmulas de alta precisión

Se basan en la serie de Taylor.


′′ (n)
f (x i ) f (x i )
′ 2 n
f (x i+1 ) = f (x i ) + f (x i )h + h +… + h
2 n

Dos términos
Se usan los dos primeros términos de la serie de Talor:

f (x i+1 ) ≃ f (x i ) + f (x i )h

Despejando f ′ (xi ) :
f (x i+1 ) − f (x i )

f (x i ) ≃
h

h tiene el mismo signi ca que en las integrales, mientras más pequeña mejor.

Esta la primera fórmula para calcular la derivada de una función para un valor dado de x .

Tres términos
Se usan los tres primeros términos de la serie de Talor:
′′
f (x i )
′ 2
f (x i+1 ) ≃ f (x i ) + f (x i )h + h
2

Despejando f ′ (xi ) :
′′
f (x i+1 ) − f (x i ) f (x i )

f (x i ) ≃ − h
h 2

Como se puede ver la ecuación resultante no es muy útil porque para calcular f ′ (xi ) es necesario
calcular previamente f ′′ (xi ).

Para encontrar una ecuación correcta, primero se escribe la expansión en serie de Taylor hacia
adelante para f (xi+2) en términos de f (xi ) :
′′
f (x i )
′ 2
f (x i+2 ) ≃ f (x i ) + f (x i )(2h) + (2h )
2

Note en lugar de h se usa 2h.

Se multiplica por dos la serie de Taylor con tres términos y se resta la ecuación anterior:

https://colab.research.google.com/drive/1U3FB0B1S4UBq3b4XtoHv7jfFXWgCWWkh 1/2
4/2/2021 7.2.1 Fórmulas de alta precisión - Colaboratory
′′ ′′
f (x i ) f (x i )
′ 2 ′ 2
f (x i+2 ) − 2f (x i+1 ) ≃ f (x i ) + f (x i )(2h) + (2h ) − 2 [f (x i ) + f (x i )h + h ]
2 2

′ ′′ 2 ′ ′′ 2
f (x i+2 ) − 2f (x i+1 ) ≃ f (x i ) + 2f (x i )h + 2f (x i )2h − 2f (x i ) − 2f (x i )h − f (x i )h

′′ 2
f (x i+2 ) − 2f (x i+1 ) ≃ −f (x i ) + f (x i )h

Despejando f ′′ (xi ):
f (x i+2 ) − 2f (x i+1 ) + f (x i )
′′
f (x i ) ≃
2
h

Con esta ecuación es posible calcular la f ′′ (xi ) de manera sencilla.

Reemplazar f ′′ (xi ) en la primera ecuación , la no que no es útil, de f ′ (xi ) :


f(x i+2 )−2f(x i+1 )+f(x i )

f (x i+1 ) − f (x i ) 2
′ h
f (x i ) ≃ − h
h 2

f (x i+1 ) − f (x i ) f (x i+2 ) − 2f (x i+1 ) + f (x i )



f (x i ) ≃ − h
2
h 2h

2f (x i+1 ) − 2f (x i ) − f (x i+2 ) + 2f (x i+1 ) − f (x i )



f (x i ) ≃
2h

Finalmente se obtiene una ecuación para f ′


(x i ) que solo depende de f (xi ) :
−f (x i+2 ) + 4f (x i+1 ) − 3f (x i )

f (x i ) ≃
2h
Se aplicar este mismo razonamiento y usar más terminos de la seria de Taylor y encontrar más
ecuaciones para calcular la derivada de cualquier orden.

https://colab.research.google.com/drive/1U3FB0B1S4UBq3b4XtoHv7jfFXWgCWWkh 2/2
4/2/2021 7.2.2 Extrapolación de Richardson.ipynb - Colaboratory

Extrapolación de Richardson

Recoge el mismo razonamiento de Romberg y por lo tanto la ecuación es la misma, pero en lugar
usar un método de integración usa uno de derivación numérica.
4 1
D = D(h 2 ) − D(h 1 )
3 3
h1
h2 =
2

Aplicación
Encuentre la primera derivada de:
4
f (x) = x

Para:

x = 1

h = 0.1

Se aplicará la formula obtenda con tres términos de la serie de Taylor.

h 1 = 0.1

h 2 = 0.05

Se asume i = 0 :
−f (x 2 ) + 4f (x 1 ) − 3f (x 0 )

f (x 0 ) ≃
2h

Para h1 = 0.1 :

x0 = x = 1

x 1 = x 0 + h = 1 + 0.1 = 1.1

x 2 = x 1 + h = 1.1 + 0.1 = 1.2

−f (1.2) + 4f (1.1) − 3f (1)



f (1) ≃ = 3.914
0.2

Para h2 = 0.05 :

x0 = x = 1

x 1 = x 0 + h = 1 + 0.05 = 1.05

x 2 = x 1 + h = 1.05 + 0.05 = 1.1

−f (1.1) + 4f (1.05) − 3f (1)



f (1) ≃ = 3.97925
0.1

https://colab.research.google.com/drive/1ixpoZXlwwmlrOcuBR7NbM6gHCPdJosnA 1/2
4/2/2021 8 Ecuaciones Diferenciales Ordinarias.ipynb - Colaboratory

Ecuaciones Diferenciales Ordinarias

Una ecuación diferencial ordinaria (EDO) es la que contiene una función desconocida de una
variable independiente y relaciona con sus derivadas:

1. Una sola variable independiente.


2. Una o más de sus derivadas respecto de tal variable.

En general una EDO se representa como:


dy
= f (x, y)
dx

o

f (x) = f (x, y)

o

y (x) = f (x, y)

La solución de una EDO consiste en encontrar una función que satisfaga dicha ecuación.

La solución de la EDO:
3y

f (x) =
x

es:
3
f (x) = x

Para veri car se debe reemplazar la solución en la EDO para veri car la igualdad.

Veri cando:
3
f (x) = y = x
′ 2
f (x) = 3x

Reemplazando:
3
3x
2
3x =
x

Simpli cando:
2 2
3x = 3x

https://colab.research.google.com/drive/1tsDn8h9RcU3uRHlIbaIaUo9Gc7qllPB2 1/2
4/2/2021 8.1 Métodos de un paso.ipynb - Colaboratory

Métodos de un paso

Consiste en un grupo de métodos que calculan el valor que satisface la igualdad a partir de un valor
anterior, es decir:

V alorN uevo = V alorActual + P endiente ∗ Anch oPaso

yi+1 = yi + Φh

La estimación de la pendiente (Φ) depende de cada método.

Valores iniciales
Para resolver una EDO usando métodos de un solo paso es necesario contar con los siguientes
datos iniciales:

x0 : Valor de la variable independiente.


y0 : Valor de la variable dependiente en función de x0 . El nuevo valor (y1 ) se calcula a partir
del valor actual (y0 ), por lo cual es necesario partir de un valor conocido para la EDO ((x0 , y0 )
), este valor se puede obtener de manera empírica, a traves de un experimiento, o de manera
teórica, a partir de la revisión bibliográ ca.
h : Ancho del paso, tiene el mismo signi cado que en el tema anterior; mientras más pequeña
mejor, además hay que tener en cuenta qie si tiene una cantidad in nita de decimales es mejor
usar otro valor.
xn : Valor de la variable independiente para el que se quiere calcular el valor de la variable
dependiente, estos métodos calcularán yn .

https://colab.research.google.com/drive/1XSnetB-_nYmv9FqRMywvEreUgT_sabFR 1/2
4/2/2021 8.1.1 Método de Euler.ipynb - Colaboratory

Método de Euler

La pendiente se calcula de la siguiente manera:


Φ = f (x i , yi )

Por lo tanto la ecuación para calcular el nuevo valor es:


yi+1 = yi + f (x i , yi )h

Aplicación
Resuelva la siguiente EDO:

$$f'(x)=\dfrac{3y}{x}$$

Para $y(4)$ sabiendo $y(2)=8$.

En primer lugar es necesario veri car que la EDO se encuentra en la forma:

$$\dfrac{dy}{dx}=f(x,y)$$

Se tienen dos $y$ una de ellas es $y_0$ y la otra es $y_n$; $y(4)$ es el valor que se desea calcular,
es decir se desea el valor de $y$ cuando $x=4$, por lo tanto es $y_n$ y 4 es el valor de $x_n$. La
palabra sabiendo da a entender que es un valor conocido de la EDO, es decir $y=8$ cuando $x=2$.

Es necesario calcular un buen valor para $h$, se puede usar la siguiente ecuación:

$$h=\dfrac{x_n-x_0}{n}$$

Donde $n$ es la cantidad de pasos usados. Para este caso se usarán 6 pasos:

$$h=\dfrac{x_n-x_0}{n}=\dfrac{4-2}{6}=0.333333333$$

Al tener un número in nito de decimales resulta en un mal valor para $h$, con 8 pasos mejora el
valor

$$h=\dfrac{x_n-x_0}{n}=\dfrac{4-2}{8}=0.25$$

Entonces:

$f(x,y)=\dfrac{3y}{x}$
$x_0=2$
$y_0=8$
$x_n=4$
$h=0.25$

Calcular $y_1$:

https://colab.research.google.com/drive/1SBD2wnS8wNR6R9U9GRCRG4qGLQi9nKUZ 1/3
4/2/2021 8.1.1 Método de Euler.ipynb - Colaboratory

$y_{1}=y_0+f(x_0, y_0) h$

$y_{1}=8+f(2, 8) (0.25)$

$y_{1}=8+(12) (0.25)=11$

Calcular $y_2$:

$x_{1}=x_0+h = 2+0.25=2.25$

$y_{2}=y_1+f(x_1, y_1) h$

$y_{2}=11+f(2.25, 11) (0.25)=14.666667$

Calcular $y_3$:

$x_{2}=x_1+h = 2.25+0.25=2.5$

$y_{3}=y_2+f(x_2, y_2) h$

$y_{3}=14.666667+f(2.5, 14.666667) (0.25)=19.066667$

Calcular $y_4$:

$x_{3}=x_2+h = 2.5+0.25=2.75$

$y_{4}=y_3+f(x_3, y_3) h$

$y_{4}=19.066667+f(2.75, 19.066667) (0.25)=24.266667$

Calcular $y_5$:

$x_{4}=x_3+h = 2.75+0.25=3$

$y_{5}=y_4+f(x_4, y_4) h$

$y_{5}=24.266667+f(3, 24.266667) (0.25)=30.333333$

Calcular $y_6$:

$x_{5}=x_4+h = 3+0.25=3.25$

$y_{6}=y_5+f(x_5, y_5) h$

$y_{6}=30.333333+f(3.25, 30.333333) (0.25)=37.333333$

Calcular $y_7$:

$x_{6}=x_5+h = 3.25+0.25=3.5$

$y_{7}=y_6+f(x_6, y_6) h$

$y_{7}=37.333333+f(3.5, 37.333333) (0.25)=45.333333$

Calcular $y_8$:

$x_{7}=x_6+h = 3.5+0.25=3.75$

https://colab.research.google.com/drive/1SBD2wnS8wNR6R9U9GRCRG4qGLQi9nKUZ 2/3
4/2/2021 8.1.1 Método de Euler.ipynb - Colaboratory

$y_{8}=y_7+f(x_7, y_7) h$

$y_{8}=45.333333+f(3.75, 45.333333) (0.25)=54.4$


$i$ $x_i$ $y_i$

0 2 8
1 2.25 11
2 2.5 14.666667
3 2.75 19.066667
4 3 24.266667
5 3.25 30.333333

6 3.5 37.333333
7 3.75 45.333333
8 4 54.4

Para $y(4)=54.4$

Sabiendo que la solución algebráica es $f(x)=x^3$, entonces $f(4)=64$, como se puede ver la
aproximación tiene un un error muy grande eso se debe al valor de $h$, usando $h=0.0002$, es
decir $n=10000$, el resultado es $y(4)=64$.

https://colab.research.google.com/drive/1SBD2wnS8wNR6R9U9GRCRG4qGLQi9nKUZ 3/3
4/2/2021 8.1.2 Métodos de Runge-Kutta.ipynb - Colaboratory

Métodos de Runge-Kutta

Son métodos que responden a la siguientes ecuaciones:

yi+1 = yi + Φ(x i , yi , h)h

Φ(x i , yi , h) = a1 k 1 + a2 k 2 + … + an k n

Según la cantidad de términos que tenga Φ recibe el nombre el método y los valores para ai y ki
cambian.

Método Runge-Kutta de Primer Orden


Φ(x i , yi , h) = f (x i , yi )

Es equivalente al método de Euler.

Método Runge-Kutta de Segundo Orden


1 1
Φ(x i , yi , h) = ( k1 + k2 )
2 2

k 1 = f (x i , yi )

k 2 = f (x i + h, yi + k 1 h)

Método Runge-Kutta de Tercer Orden


1
Φ(x i , yi , h) = (k 1 + 4k 2 + k 3 )
6

k 1 = f (x i , yi )

1 1
k2 = f (xi + h, yi + k 1 h)
2 2

k 3 = f (x i + h, yi − k 1 h + 2k 2 h)

Método Runge-Kutta de Cuarto Orden


1
Φ(x i , yi , h) = (k 1 + 2k 2 + 2k 3 + k 4 )
6

k 1 = f (x i , yi )

1 1
k2 = f (xi + h, yi + k 1 h)
2 2

1 1
k3 = f (xi + h, yi + k 2 h)
2 2

https://colab.research.google.com/drive/1YT2MVo6TYSJdJ_AU-gw-qBkKQm65ejIL 1/4
4/2/2021 8.1.2 Métodos de Runge-Kutta.ipynb - Colaboratory

k 4 = f (x i + h, yi + k 3 h)

Los matemáticos están encontrando nuevos valores para ai y ki que permiten tener más térmenos
y mejorar la e ciencia.

Aplicación
Se aplican exactemente igual que el método de Euler, la única diferencia es el cálculo de Φ.

Resuelva la siguiente EDO:


3y

f (x) =
x

Para y(4) sabiendo y(2) = 8 .

Entonces:
3y
f (x, y) =
x

x0 = 2

y0 = 8

xn = 4

h = 0.25

Primer Orden:
i xi yi

0 2 8
1 2.25 11
2 2.5 14.666667
3 2.75 19.066667
4 3 24.266667
5 3.25 30.333333
6 3.5 37.333333
7 3.75 45.333333

8 4 54.4

Segundo Orden:
i xi yi

0 2 8
1 2.25 11.333333
2 2.5 15.488889
3 2.75 20.55798
4 3 26.631928

5 3.25 33.802063

https://colab.research.google.com/drive/1YT2MVo6TYSJdJ_AU-gw-qBkKQm65ejIL 2/4
4/2/2021 8.1.2 Métodos de Runge-Kutta.ipynb - Colaboratory

i xi yi

6 3.5 42.159716
7 3.75 51.796222
8 4 62.802920

Tercer Orden:
i xi yi

0 2 8

1 2.25 11.385621
2 2.5 15.613615
3 2.75 20.777598
4 3 26.971184
5 3.25 34.287982
6 3.5 42.8216
7 3.75 52.665646

8 4 63.913726

Cuarto Orden:
i xi yi

0 2 8
1 2.25 11.390235
2 2.5 15.624148
3 2.75 20.795481
4 3 26.997971

5 3.25 34.325358
6 3.5 42.871384
7 3.75 52.729787
8 4 63.994309

https://colab.research.google.com/drive/1YT2MVo6TYSJdJ_AU-gw-qBkKQm65ejIL 3/4
4/2/2021 8.2 Métodos de multipaso.ipynb - Colaboratory

Los métodos anteriores usar el paso anterior(yi ) para encontrar el siguiente (yi+1 ).

Se puede encontrar el siguiente valor a partir de varios pasos anteriores.

https://colab.research.google.com/drive/1SfdBvYXE5ZKQFlrwoy7Ts6OgAq1UjCae 1/2
4/2/2021 8.2.1 Método de Heun sin principio.ipynb - Colaboratory

Método de Heun sin principio


Código Texto

Se basa en el método de Euler:


yi+1 = yi + f (x i , yi )h

y la regla trapezoidal:
f (x i , yi ) + f (x i+1 , yi+1 )
yi+1 = yi + h
2

El método consiste en calcular un primer valor y luego ajustarlo, es primer valor se denomina
predictor, para ajusta el predictor se aplicar la ecuación del corrector.

Predictor:
0 m m
y = y + f (x i , y )2h
i+1 i−1 i

Note que es necesario yi−1 es decir que para calcular el valor de y1 además de x0 y y0 se requiere
y−1 .

Corrector:
m j−1
f (x i , y ) + f (x i+1 , y )
j m i i+1
y = y + h
i+1 i
2

para j = 1, 2 … m

m es la cantidad de correciones.

Aplicación
Resuelva la siguiente EDO:
3y

f (x) =
x

Para y(4) sabiendo y(2) = 8 .

Aplicando tres correcciones.

Se usarán ocho pasos n = 8 :


xn − x0 4 −2
h = = = 0.25
n 8

Entonces:
3y
f (x, y) =
x

x0 = 2

https://colab.research.google.com/drive/1EuW6UxsqXlIKOoCtaNDxdNVFea-jL9ju 1/3
4/2/2021 8.2.1 Método de Heun sin principio.ipynb - Colaboratory

y0 = 8

xn = 4

h = 0.25

Una vez de nido el valor para h es necesario calcular el valor para x−1

x −1 = x 0 − h = 2 − 0.25 = 1.75

Es necesario obtener el y(1.75) si no se puede conseguir entonces no se puede aplicar este método.

Se sabe que y(1.75) = 5.359375

Calcular y1 :

Predictor: y10 = y
m
−1
+ f (x 0 , y
m
0
)2h = 5.359375 + f (2, 8)(2)(0.25) = 11.359375
0
f(x 0 , y0 )+f(x 1 , y ) f(2,8)+f(2.25,11.359375)
Corrector 1: y1 m
1 1
= y + h = 8 + (0.25) = 11.3932292
i 2 2
1
f(x 0 , y0 )+f(x 1 , y ) f(2,8)+f(2.25,11.3932292)
Corrector 2: y12 m 1
= y + h = 8 + (0.25) = 11.398872
i 2 2
2
f(x 0 , y0 )+f(x 1 , y ) f(2,8)+f(2.25,11.398872)
Corrector 3: y13 m 1
= y + h = 8 + (0.25) = 11.399812
i 2 2

Calcular y2 :

Predictor: y20 = y
m
0
+ f (x 1 , y
m
1
)2h = 8 + f (2.25, 11.399812)(2)(0.25) = 15.599875

Corrector 1:
0
f(x 1 , y1 )+f(x 2 , y ) f(2.25,11.399812)+f(2.5,15.599875)
1 m 2
y = y + h = 11.399812 + (0.25) = 15.63976
2 i 2 2

Corrector 2:
1
f(x 1 , y1 )+f(x 2 , y ) f(2.25,11.399812)+f(2.5,15.639762)
2 m 2
y = y + h = 11.399812 + (0.25) = 15.64574
2 i 2 2

Corrector 3:
2
f(x 1 , y1 )+f(x 2 , y ) f(2.25,11.399812)+f(2.5,15.645745)
3 m 2
y = y + h = 11.399812 + (0.25) = 15.64664
2 i 2 2

i xi yi

0 2 8
1 2.25 11.399812

2 2.5 15.646642
3 2.75 20.834621
4 3.0 27.057857
5 3.25 34.410463
6 3.5 42.986552
7 3.75 52.880235
8 4 64.185626

Para y(4) = 64.185626

Como se puede ver la aplicación de los correctores mejoró considerablemente la aproximación.

https://colab.research.google.com/drive/1EuW6UxsqXlIKOoCtaNDxdNVFea-jL9ju 2/3
4/2/2021 8.2.2 Formulas de Adams.ipynb - Colaboratory

Formulas de Adams

Se basan en la serie de Taylor:


n−1
n+1
yi+1 = yi + h ∑ β k fi−k + O(h )

k=0

Orden β0 β1 β2 β3 β4 β5 Error

5 3 ′′
h f
3 1 12
2 −
2 2
(ξ)

9 4 (3)
h f
23 16 5 24
3 −
12 12 12
(ξ)

251 5 (4)
h f
55 59 37 9 720
4 − −
24 24 24 24
(ξ)

475 6 (5)
h f
1901 2774 2616 1274 251 1440
5 − −
720 720 720 720 720
(ξ)

19087 7 (6)
h f
4277 7923 9982 7298 2877 475 60480
6 − − −
720 720 720 720 720 720
(ξ)

Mientras más alto el orden mayor cantidad de datos se requiere, para el segundo orden se requiere
(x 0 , y0 ) y (x−1 , y−1 ) ; para el tercer orden (x0 , y0 ) y (x−1 , y−1 ) y (x−2 , y−2 ) ; y así sucesivamente.
Si no se tiene acceso a dichos datos no se puede usar dicho orden.

Aplicación
Resuelva la siguiente EDO:
3y

f (x) =
x

Para y(4) sabiendo y(2) = 8 .

Se usarán ocho pasos n = 8 :


xn − x0 4 −2
h = = = 0.25
n 8

Entonces:
3y
f (x, y) =
x

x0 = 2

y0 = 8

https://colab.research.google.com/drive/1NX5c0s3BCAuX9yATqdeT9tgxn_HJVlHl 1/3
4/2/2021 8.2.2 Formulas de Adams.ipynb - Colaboratory

xn = 4

h = 0.25

Se aplicará el tercer orden;


23
β0 =
12
16
β1 = −
12
5
β2 =
12

Se sabe que:

y(1.75) = 5.359375

y(1.5) = 3.375

Calcular y1 :
23 16 5
y1 = y0 + h [ f (x 0 , y0 ) − f (x −1 , y−1 ) + f (x −2 , y−2 )]
12 12 12

23 16 5
y1 = 8 + 0.25 [ f (2, 8) − f (1.75, 5.359375) + f (1.5, 3.375)] = 11.390625
12 12 12

Calcular y2 :
23 16 5
y2 = y1 + h [ f (x 1 , y1 ) − f (x 0 , y0 ) + f (x −1 , y−1 )]
12 12 12

23 16 5
y2 = 11.390625 + 0.25 [ f (2.25, 11.390625) − f (2, 8) + f (1.75, 5.359375)] = 15.625
12 12 12

i xi yi

0 2 8
1 2.25 11.390625
2 2.5 15.625
3 2.75 20.796875

4 3.0 27.0
5 3.25 34.328125
6 3.5 42.875
7 3.75 52.734375
8 4 64.0

Para y(4) = 64.0

Como se puede ver el uso de más datos de la función mejoró considerablemente la aproximación.

https://colab.research.google.com/drive/1NX5c0s3BCAuX9yATqdeT9tgxn_HJVlHl 2/3

También podría gustarte