Você está na página 1de 4

Proyecto estudiantil: Métodos Numéricos

Santiago Araujo, Juan Bustamante, Berenice Guerrero, Felipe Mendieta, Marcelo Peñafiel .
santiago.araujo@ucuenca.edu.ec
juan.bustamantea@ucuenca.edu.ec
berenice.guerrero@ucuenca.edu.ec
felipe.mendieta98@ucuenca.edu.ec
david.penafiel@ucuenca.edu.ec
Universidad de Cuenca. Facultad de Ingeniería.

Resumen: en el presente documento se detallan los pasos


seguidos para la elaboración del proyecto estudiantil de la
asignatura de Métodos Numéricos. Se desarrollaron tres II. PROCEDIMIENTO
algoritmos los cuáles fueron programados en el
En base al uso de la lógica se logró completar cada uno de
compilador Phyton. El primer algoritmo tenía la finalidad
los programas pedidos.
de encontrar la raíz de una función f(x) = 0, mediante el
uso de una función lineal, el método era iterativo. El El enunciado 1 se basó en la construcción de un algoritmo
segundo ejercicio del proyecto implicaba la realización de iterativo en donde para encontrar una raíz se debe realizar la
un algoritmo que implemente el método de Muller el cual aplicación del teorema de Bolzano que menciona:
también nos ayuda a encontrar las raíces de una función
f(x) = 0. Por último, el tercer punto implicaba realizar una Si una función f(x) es continua en [a,b] y f(a) y f(b) son
interpolación de la función arctan(x) en 11 puntos en el de distinto signo, existe por lo menos un punto entre a y b
intervalo [1,6] y en 33 puntos en el intervalo [0,8]. para el cual f(c)=0.

El teorema de Bolzano es aplicado en varios métodos para


encontrar raíces con es en bisección, muller, falsa posición,
I. INTRODUCCIÓN etc.

En el campo de la ingeniería los cálculos matemáticos a Para este caso se plantea encontrar una ecuación de la
gran escala son necesarios para la realización de diversos recta que pasa por los puntos a y b. Al formular la ecuación:
tipos de obras o también para un diseño de redes de algún tipo
extremadamente complejo como, por ejemplo, el de una red
de servicio eléctrico. Una de las herramientas más útiles para
poder solucionar cálculos muy complejos, son las diversas
clases de métodos numéricos usados para la resolución de
diversas situaciones. Se iguala y=0 ya que se quiere calcular la raíz de la función
lineal generada entre a y b:
Dos de los problemas que se encuentran y que se pueden
resolver por medio del uso de métodos numéricos son el de
encontrar las raíces de una función de la forma f(x)=0 y la
segunda es la interpolación de varios puntos para así poder Ahora se despeja x, siendo esta la raíz buscada:
encontrar una función que recorra cada uno de ellos.

Para el primer problema la mayoría de los métodos que


existen para resolverlo son de tipo iterativo mientras que para
el segundo el objetivo, como bien se mencionó antes, es el de
encontrar una función que cruce por todos los puntos, para
ello existen métodos que van desde resolver sistemas de
ecuaciones hasta algunos que basta con seguir algunas pautas Siendo x la formula buscada para aplicar en cada iteración del
dadas por sumatorias para poder encontrar el polinomio algoritmo.
representativo. Los intervalos van variando ya que en cada iteración se
escogen nuevos números para formar la nueva recta. Estos
En este documento se plantea cumplir tres metas. La
son dependientes del teorema de Bolzano.
primera es realizar un programa que permita encontrar las
raíces de una función f(x)=0 por medio de una función de En cada iteración la raíz se va aproximando más a la original,
primer grado, el segundo es realizar un programa que permita todo depende del número de iteraciones que se realicen.
calcular las raíces del polinomio de la forma f(x)=0 por medio
del método de Muller, y el último interpolar la función
arctan(x) en 11 y en 33 puntos y observar que
comportamiento tiene y las conclusiones que se puede sacar
de ello.
Para el ejercicio 2, se comenzó haciendo un análisis del Una vez tenemos los coeficientes de la función 𝑝(𝑥) que
método de Muller. Este es un método iterativo que permite interpola 3 puntos de la función 𝑓(𝑥), procedemos a
encontrar las raíces, ya sean reales o complejas, de una encontrar las raíces de la función 𝑝(𝑥).
función f(x).
Mediante una alternativa a la formula general se pueden
El método consiste en la interpolación de 3 puntos de la obtener valores de la función 𝑝(𝑥) tal que 𝑝(𝑥) = 0, es
función f(x) mediante una función más simple del tipo: decir:
𝑝(𝑥) = 𝑎(𝑥 − 𝑥𝑛 )2 + 𝑏(𝑥 − 𝑥𝑛 ) + 𝑐 −2𝑐
𝑥 − 𝑥𝑛 =
En donde la aproximación 𝑥𝑛+1 es la raíz de la función 𝑏 ± √𝑏 2 − 4𝑎𝑐
𝑝(𝑥), al ser una función cuadrática se generan 2 raíces, de Por lo tanto, nuestra aproximación 𝑥𝑛+1 será igual a:
la cual se elige la más cercana a 𝑥𝑛 . Después se toman los
nuevos valores calculados de manera secuencial, es decir, si −2𝑐
𝑥𝑛+1 = 𝑥𝑛 +
se comienza con valores 𝑥0 𝑥1 𝑥2 para la interpolación y se 𝑏 ± √𝑏 2 − 4𝑎𝑐
obtiene una aproximación 𝑥3 los nuevos valores a utilizar
Para la elección del signo de la raíz se debe buscar que
para la interpolación serán 𝑥1 𝑥2 𝑥3 .
|𝑥𝑛+1 − 𝑥𝑛 | sea lo menor posible por lo tanto la operación
Generalizando se tienen valores 𝑥𝑛−2 𝑥𝑛−1 𝑥𝑛 , con su 𝑏 ± √𝑏 2 − 4𝑎𝑐 debe ser lo más grande posible, por lo que
correspondiente valor de 𝑓(𝑥), 𝑓(𝑥𝑛−2 ) 𝑓(𝑥𝑛−1 ) 𝑓(𝑥𝑛 ), de se tomara el mismo signo que 𝑏.
los cuales se pueden utilizar 2 valores iniciales arbitrarios
𝑥𝑛−2 𝑥𝑛−1 , pertenecientes al dominio de 𝑓, y el tercer valor Para el ejercicio 3 se procedió a usar el método de
interpolación de Newton de diferencias divididas. El
𝑥𝑛 puede ser calculado mediante cualquier método de
polinomio resultante cumple la forma:
aproximación de raíces conocido, como lo son el método de
bisección o el método de falsa posición. 𝑓(𝑥) = 𝑏0 + 𝑏1 (𝑥 − 𝑥0 ) + ⋯
Para la interpolación se requiere encontrar los + 𝑏𝑛 (𝑥 − 𝑥0 )(𝑥 − 𝑥1 ) … (𝑥𝑛 − 𝑥𝑛−1 )
coeficientes a, b y c de la función 𝑝(𝑥), para esto se utilizan
los valores 𝑥𝑛−2 𝑥𝑛−1 𝑥𝑛 con sus correspondientes
𝑓(𝑥𝑛−2 ) 𝑓(𝑥𝑛−1 ) 𝑓(𝑥𝑛 ) para generar un sistema de Para el cálculo de los coeficientes se usa el siguiente
ecuaciones lineales que nos permita calcular los diagrama:
coeficientes, es decir de la función 𝑝(𝑥) reemplazamos los
valores 𝑥𝑛−2 𝑥𝑛−1 𝑥𝑛 obteniendo:

𝑓(𝑥𝑛−2 ) = 𝑎(𝑥𝑛−2 − 𝑥𝑛 )2 + 𝑏(𝑥𝑛−2 − 𝑥𝑛 ) + 𝑐

𝑓(𝑥𝑛−1 ) = 𝑎(𝑥𝑛−1 − 𝑥𝑛 )2 + 𝑏(𝑥𝑛−1 − 𝑥𝑛 ) + 𝑐

𝑓(𝑥𝑛 ) = 𝑐

En donde diremos que:

𝑓(𝑥𝑛−1 ) − 𝑓(𝑥𝑛−2 )
𝛿0 =
𝑥𝑛−1 − 𝑥𝑛−2
Donde:

𝑓(𝑥𝑛 ) − 𝑓(𝑥𝑛−1 ) 𝑓(𝑥1 ) − 𝑓(𝑥0 )


𝛿1 = 𝑏1 =
𝑥𝑛 − 𝑥𝑛−1 𝑥1 − 𝑥0

ℎ0 = 𝑥𝑛−1 − 𝑥𝑛−2 Y se cumple el mismo patrón para los demás coeficientes,


por lo tanto, se ve útil el uso de una matriz de orden: grado
ℎ1 = 𝑥𝑛 − 𝑥𝑛−1 del polinomio +1. Esta matriz almacenara los valores
De esta forma, reemplazando las expresiones y obtenidos de los coeficientes.
resolviendo el sistema tenemos que: Para almacenar los valores del intervalo se usará un
𝛿1 − 𝛿0 vector. Posteriormente con estas dos estructuras se podrá
𝑎= visualizar tanto el polinomio formado como la respuesta
ℎ1 − ℎ0
obtenido por le polinomio al reemplazar por un valor dado
𝑏 = 𝑎ℎ1 − 𝛿1 por el usuario.

𝑐 = 𝑓(𝑥𝑛 )
 Funciones importantes:
La presente función llamada llenarMatriz, se encarga de 2.00)(x-2.50)(x-3.00)-0.00030294754868142893(x-
calcular los valores de los coeficientes, siguiendo la fórmula 1.00)(x-1.50)(x-2.00)(x-2.50)(x-3.00)(x-
planteada anteriormente. 3.50)+3.593116032706831e-05(x-1.00)(x-1.50)(x-
def llenarMatriz(matriz,vector,grado): 2.00)(x-2.50)(x-3.00)(x-3.50)(x-4.00)-
for i in range (grado+1): 2.27131832573972e-06(x-1.00)(x-1.50)(x-2.00)(x-
valor = math.atan(vector[i]) 2.50)(x-3.00)(x-3.50)(x-4.00)(x-4.50)-
matriz[i,0] = valor 2.8502653443409865e-07(x-1.00)(x-1.50)(x-2.00)(x-
for i in range(1,grado):
2.50)(x-3.00)(x-3.50)(x-4.00)(x-4.50)(x-5.00)
for j in range(i,grado):
valor = (matriz[j,i-1]-matriz[j-1,i-1])/(vector[j]- Valor con polinomio de Newton:
vector[j-i])
matriz[j,i] = valor
1.373400766945016
Valor con la función: 1.373400766945016
Una vez calculados los coeficientes se procede a mostrar
Diferencias en intervalo [0,8]
el polinomio. Para esto usamos tanto la matriz de coeficientes
como el vector de intervalos. La función que cumple con este [-0.11069247684521656, -
proceso es: 0.035074391758089435, -0.008547066426500827, -
def mostrarPolinomio(vector,matriz,grado): 0.0013789540879065587, -3.802806732777775e-05,
pol = "" 4.628701513809119e-05, 4.203050959161736e-06, -
if (matriz[0][0]!=0): 5.406198262392081e-06, -9.60360328816634e-07,
pol = "{0:.2f}".format(matriz[0,0]) 1.2217961700144997e-06, 3.6266032710230434e-07,
a = ""
-4.531179853550782e-07, -2.0835361147497622e-07,
for j in range(0,grado):
if (matriz[j+1,j+1]>0): 2.5647523660410343e-07, 1.7595367007849916e-07,
pol+="+" -2.1507377501173153e-07, -2.174350151040727e-07,
if (matriz[j+1,j+1]!=0): 2.6752165438459485e-07, 4.0300729420295056e-07,
pol+=str(matriz[j+1,j+1])+"*"#"{0:.5f}".format -5.118699784034675e-07, -1.2005059195629997e-06,
a +="(x-"+"{0:.2f}".format(vector[j])+")"
1.666032095615222e-06, 6.848749324106507e-06, -
pol+=a
print("Polinomio:\n",pol) 1.2518972900110725e-05, -
0.00015537281943456271, -0.0006790350588921079,
-0.002143790409209201, -0.005638314477418804, -
Por último, se realiza muestra el valor calculado por el 0.013113077086425395, -0.027853681761070836, -
polinomio y por la función arctan(x) para que el usuario
0.05513124892993715, -0.10307240158933073, -
pueda visualizar la diferencia entre estas. La función
encargada de calcular el valor f(x) en el polinomio es:
0.18379716660713896]

def calcularValor(vector,matriz,grado,numero): IV. CONCLUSIONES.


pol= matriz[0,0]
En el problema 1, el método necesita una cantidad
a=1;
for j in range (0,grado): baja de iteraciones para converger a la raíz , sin embargo
a = a*(numero-vector[j]); a simple inspección se necesita un poco más iteraciones
pol = pol+ a*matriz[j+1,j+1]; que el método de Muller , aunque esto depende del
return pol intervalo y la función a analizar.
En el problema 2, el método de Muller, es un
método muy útil para las aproximaciones de raíces
III. RESULTADOS. debido a que llega a un resultado bastante aceptable en
unas pocas iteraciones e incluso da la posibilidad de
En el problema 3 se procedió a probar el programa encontrar las raíces complejas de una función, sin
con el valor x = 5. Los resultados obtenidos son: embargo el cálculo de raíces imaginarias es mas
Polinomio en intervalo [1,6] complejo y costoso.

Polinomio: En el problema 3, al realizar la diferencia en el


intervalo [0,8] para 33 iteraciones, observamos que la
0.79+0.39479111969976155(x-1.00)- diferencia se va reduciendo, pero luego aumenta, estos
0.14608113060623884(x-1.00)(x- valores oscilan constantemente. Esto se da a que al ser
1.50)+0.04243573685973242(x-1.00)(x-1.50)(x-2.00)- un polinomio de grado 10, va a presentar diversos
0.009998966106131787(x-1.00)(x-1.50)(x-2.00)(x- puntos máximos y mínimos.
2.50)+0.001933487339232709(x-1.00)(x-1.50)(x-
Aproximadamente la gráfica del polinomio vs la
función arctan(x) se presenta de la siguiente forma:

Você também pode gostar