todos
Héctor F. Villafuerte
Agosto, 2010
Contenido, parte II
Guía
Breve Descripción
Guía 9
Polinomios, Interpolación de Lagrange, Trazadores.
Guía 10
Ajuste de curvas, mínimos cuadrados ordinarios.
Guía 11
Ajuste de curvas, descomposición (factorización) de valor singular.
Guía 12
Derivación numérica, diferencias finitas.
Guía 13Integración numérica, métodos del trapecio y Simpson.
Guía 14
Métodos de Monte Carlo.
Guía 15
Ecuaciones diferenciales ordinarias.
I
Métodos Numéricos
UVG- MM 2010,
Guía 9
MM 2022
Instrucciones: En sus cursos de matemática se le ha recomendado que ataque los problemas desde varios
enfoques: analítico, gráfico, y numérico. En este curso nos interesan particularmente losúltimos dos enfoques.
Responda las siguientes preguntas dejando constancia clara de su procedimiento; recuerde incluir gráficas,
código en Python, y explicaciones que considere pertinentes.
1.
Introducción
En Python existen varios comandos para tratar el problema de interpolación y ajuste de curvas, e.g. lstsq,
polyfit, linregress, polyfit, lagrange, splrep, splev, etc. Ejemplificaremos suuso con algunos ejercicios
resueltos, pero antes veamos el tratamiento básico de polinomios.
1.1.
Polinomios
Los comandos poly1d y poly nos proporcionan formas básicas de construcción de polinomios en una variable.
Por ejemplo,
p(x) = x2 − 1
q(x) = x3 + 1
r(x) = (x − 1)(x + 1/2)(x − 4)
En Python, noten el uso del comando roots para encontrar las raíces de polinomios:
1
In[34]: p = poly1d([1, 0, -1]); p
2
Out[34]: poly1d([ 1,
3
In [35]: q = poly1d([1, 0, 0, 1]); q
4
Out[35]: poly1d([1, 0, 0, 1])
0, -1])
5
In [36]: r = poly([1, -0.5, 4]); r
6
Out[36]: array([ 1. , -4.5,
7
In [37]: roots(p)
8
Out[37]: array([-1.+0.j,
9
In [38]: roots(q)
1.5,
2. ])
1.+0.j])
10
Out[38]: array([-1.0+0.j, 0.5+0.8660254j,0.5-0.8660254j])
11
In [39]: roots(r)
12
Out[39]: array([ 4.0+0.j, 1.0+0.j, -0.5+0.j])
Ahora para graficarlos necesitamos evaluar el polinomio con polyval; aunque una forma más natural de
evaluar polinomios en Python es usar notación funcional f(x) como se ejemplifica para el polinomio r:
1
In [44]: x = linspace(-1,1)
2
In [45]: plot(x, polyval(p,x))
3
In [46]: plot(x,polyval(q,x))
4
In [47]: plot(x, r(x))
# notacion funcional
1
5
In [48]: grid()
Figura 1: p(x), q(x), r(x)
Para más información: http://docs.scipy.org/doc/numpy/reference/routines.poly.html
1.2.
Problemas Resueltos
1. Encuentre el polinomio de grado no mayor a tres que interpola los siguientes puntos:
x
y
-3
4
-1
3
1
3
5
-2
Empleeinterpolación de Lagrange.
Solución: Acá podemos emplear los comandos polyfit, o lagrange:
1
2
from pylab import *
import scipy.interpolate as si
3
4
x = array([-3., -1, 1, 5])
5
y = array([4., 3, 3, -2])
6
7
P1 = polyfit(x,y,3)
8
P2 = si.lagrange(x, y)
9
10
allclose(polyval(P1,x), y)
11
allclose(P2(x), y)
Ambos comandos devuelven el mismo polinomiointerpolante P(x) = −0.04167x3 + 0.04167x + 3 (noten
que el coeficiente de x2 es cero).
2
2. Considere la función de Runge f(x) = 1/(1 + 25x2 ). El fenómeno de Runge consiste en tratar de interpolar esta
función con un solo polinomio de Lagrange.
(a) Encuentre el polinomio de Lagrange para la función de Runge en x=linspace(-1,1,10)
Solución:
1
x = linspace(-1,1,100)
2
y = 1/(1 +25*x**2)
xi = linspace(-1,1,10)
3
5
yi = 1/(1 + 25*xi**2)
P = si.lagrange(xi, yi)
6
plot(x,y)
7
plot(xi, yi, ’o’)
8
plot(x, P(x))
9
grid()
4
Figura 2: Función de Runge y un polinomio de Lagrange
Importante: note lo malo que resulta usar sólo un polinomio interpolante con esta función. La
solución es tomar polinomios interpolantes por trozos, ésto es lo...
Regístrate para leer el documento completo.